1、声明式自愈系统声明式自愈系统高可用分布式系统的设计之道高可用分布式系统的设计之道高级技术专家目录目录 分布式系统面临的高可用问题 设计和验证高可用分布式系统的工具与方法 设计和验证高可用分布式系统的案例分享 高可用系统的最佳实践总结无状态分布式系统的高可用问题无状态分布式系统的高可用问题处理消息的服务节点可以随机选择不必处理数据复制和同步的问题系统容量和高可用能力可以同步提升服务节点可以随意迁移,不必固定 IP 和存储有状态分布式系统的高可用问题有状态分布式系统的高可用问题一致性一致性可用性可用性分区容错性分区容错性PaxosPaxosRaftRaft2PC2PCGossipGossip 处理
2、请求需要特定节点处理请求需要特定节点 必须要考虑数据备份和同步必须要考虑数据备份和同步的问题的问题 容量扩展和高可用需要不同容量扩展和高可用需要不同解决方案解决方案 服务节点不能随便迁移服务节点不能随便迁移CAP Is Not Simply 2 out of 3 没有分区时,可用性和一致没有分区时,可用性和一致性要兼得性要兼得 经常要考虑的是可用性和一经常要考虑的是可用性和一致性各有一部分致性各有一部分 根据不同设计应用需求有不根据不同设计应用需求有不同的组合同的组合 重要的是系统如何恢复到重要的是系统如何恢复到“最佳状态最佳状态”分区容错性可可用用性性一一致致性性系系统统服服务务等等级级分区
3、容错性可可用用性性一一致致性性系系统统自自愈愈程程度度Look Distributed System in another WaySafetySomething bad will never happene.g.received message is lostLivenessSomething good will eventually happene.g.is able to receive message目录目录 分布式系统面临的高可用问题 设计和验证高可用分布式系统的工具与方法 设计和验证高可用分布式系统的案例分享 高可用系统的最佳实践总结依据声明式自愈的理念设计系统依据声明式自愈的理念设
4、计系统有一个统一的状态持久化接口,所有有状态模块通过统一的接口对应统一的对象模型配置模块对象只需要包括Desired State每个领域的控制器模块的逻辑保证自己领域独立自愈的能力改变状态的操作必须是幂等的声明式操作,没有新声明时各模块按照之前的声明继续工作控制器模块对象包括Desired State 和 Realized State声明式自愈系统的控制器协调循环声明式自愈系统的控制器协调循环ObserveObserveAnalyzeAnalyzeActionActionu 观察当前的观察当前的Realized StateRealized Stateu当前有当前有2 2个正常运行的个正常运行的
5、PodPodu比较比较Desired StateDesired State跟跟Realized StateRealized State的差距的差距u期望期望3 3个个PodPodu实际状态实际状态2 2个个PodPodu控制器执行动作协调到控制器执行动作协调到Desired StateDesired Stateu创建创建1 1个新的个新的PodPod Controller观察特定领域的观察特定领域的系统状态系统状态 协调协调Desired State跟跟Realized State之间的差之间的差距,维持最终一致性距,维持最终一致性 定期处理集群中的事件定期处理集群中的事件 系统必须是幂等的系
6、统必须是幂等的控制器的设计理念控制器的设计理念控制逻辑应该只依赖于当前状态假设任何错误的可能,并做容错处理尽量避免复杂状态机,逻辑不要依赖无法监控的内部状态每个模块都可以在必要时优雅地降级服务每个模块都可以在出错后自动恢复假设任何命令都可能被任何调用对象拒绝,甚至返回错误结果声明式自愈系统声明式自愈系统的现有框架的现有框架Kubernetes声明式自愈系统设计理念的回顾声明式自愈系统设计理念的回顾统一接口和对象模型自愈能力幂等操作和状态机DS 和 RSDesired State可重用部分可重用部分已完全实现已完全实现要在领域内要在领域内自己实现自己实现如何设计好状态机和自愈协议?如何设计好状态