




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、声明式自愈系统高可用分布式系统的设计之道目录分布式系统面临的高可用问题设计和验证高可用分布式系统的工具与方法设计和验证高可用分布式系统的案例分享高可用系统的最佳实践总结无状态分布式系统的高可用问题处理消息的服务节点可以随机选择不必处理数据复制和同步的问题系统容量和高可用能力可以同步提升服务节点可以随意迁移,不必固定 IP 和存储有状态分布式系统的高可用问题一致性可用性分区容错性Paxos Raft2PCGossip处理请求需要特定节点必须要考虑数据备份和同步 的问题容量扩展和高可用需要不同 解决方案服务节点不能随便迁移CAP Is Not Simply 2 out of 3没有分区时,可用性和
2、一致 性要兼得经常要考虑的是可用性和一 致性各有一部分根据不同设计应用需求有不 同的组合重要的是系统如何恢复到“最佳状态”分区容错性系 统 服 务 等 级分区容错性可用性一 致 性系 统 自 愈 程 度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目录分布式系统面临的高可用问题设计和验
3、证高可用分布式系统的工具与方法设计和验证高可用分布式系统的案例分享高可用系统的最佳实践总结依据声明式自愈的理念设计系统有一个统一的状 态持久化接口, 所有有状态模块 通过统一的接口 对应统一的对象 模型配置模块对象只 需要包括 Desired State每个领域的控 制器模块的逻 辑保证自己领 域独立自愈的 能力改变状态的操作 必须是幂等的声 明式操作,没有 新声明时各模块 按照之前的声明 继续工作控制器模块对象 包括DesiredState 和 Realized State声明式自愈系统的控制器协调循环ObserveAnalyzeAction观察当前的Realized State当前有2个正
4、常运行的Pod比较Desired State跟Realized State的差距期望3个Pod实际状态2个Pod控制器执行动作协调到Desired State创建1个新的PodController观察特定领域的 系统状态协调Desired State跟 Realized State之间的差 距,维持最终一致性定期处理集群中的事件系统必须是幂等的控制器的设计理念控制逻辑应该只依赖于当前状态假设任何错误的可能,并做容错处理尽量避免复杂状态机,逻辑不要依赖无法监控的内部状态每个模块都可以在必要时优雅地降级服务 每个模块都可以在出错后自动恢复假设任何命令都可能被任何调用对象拒绝,甚至返回错误结果声明式
5、自愈系统的现有框架Kubernetes声明式自愈系统设计理念的回顾统一接口 和对象模 型自愈 能力幂等操 作和状 态机DS 和 RSDesired State可重用部分已完全实现要在领域内 自己实现如何设计好状态机和自愈协议?Writing Correct Software Is Hard!Math and Thinking Can Help Us!TLA+ 是用来给(软件或硬件)系统建模的语言TLA+ 强调排除特定编程语言(软件或硬件)的影响验证系 统设计TLA+ 由 Paxos 协议的发明人 Leslie Lamport 发明使用 TLA+ 定义和验证系统设计Why TLA+Leslie
6、LamportLanguage vs. ConceptFor quite a while, Ive been disturbed by the emphasis on language in computer science. One result of that emphasis is programmers who are C+ experts but cant write programs that do what theyre supposed to .I believe that the best way to get better programs is to teach prog
7、rammers how to think better. Thinking is not the ability to manipulate language; its the ability to manipulate concepts.Whorfian syndromeLeslie Lamport沃尔夫综合征Language vs. RealityComputer scientists collectively suffer from what I call the Whorfian syndrome1the confusion of language with reality.Since
8、 these devices are described in different languages, they must all be different. In fact, they are all naturally described as state machines.Functions vs. State MachinesYet computer scientists are so focused on the languages used to describe computation that they are largely unaware that those langu
9、ages are all describing state machines.Leslie LamportTLA+试图用状态机而不是计算过程描述系统更加关注系统的非正常输入更加关注系统的稳定性可用性等特性而不是系统输出 分布式系统环境下没有单一的输入输出TLA+是一种适合定义状态机的语言定义一个状态机需要:定义所有可能的初始状态定义在特定状态下可能有哪些状态转换一个程序可以用状态机描述定义一个状态机需要:定义变量定义所有可能的初始状态定义在特定状态下可能有哪些状 态转换计算 100/x 的程序: x = 100 / x;TLA+的应用场景验证系统设计的正确性TLA+工具会遍历所有可能的状态验证
10、系统的正确性分布式系统中有哪些异常情况需要模拟?运行时可能出现的异常ApplicationsRuntimesMiddlewareOSVirtualizationStorageNetworkingData启动异常进程被杀服务器假死断电启动异常超卖进程死锁负载均衡失效心跳异常缓存热点缓存限流数据库热点数据库宕机数据库延迟CPU 抢占内存抢占内存错乱上下文切换磁盘满磁盘坏网络抖动网卡慢断网DNS 故障业务线程池满流控不合理监控错误内存溢出系统单点异步阻塞依赖超时不可读写目录分布式系统面临的高可用问题设计和验证高可用分布式系统的工具与方法设计和验证高可用分布式系统的案例分享高可用系统的最佳实践总结一个
11、分布式消息系统的概念模型Producer X Topic AQueue A0Queue A1Server Group 0Topic BQueue A2Queue A0Server Group 1Producer YConsumer A1消费组AConsumer A2Consumer B1消费组BConsumer B2Topic A分布式消息系统的部署模型Producer Discovery Service ClusterConsumerConsumerConsumerProducer Producer Server Group 0Server Group 1分布式消息系统在 Kubernete
12、s 下的部署运维Server Master Pod-0-0Server Slave Pod-0-1Server Slave Pod-0-2Server Group 0StatefulSet-0Server Master Pod-1-0Server Slave Pod-0-1Server Slave Pod-0-2Server Group 1StatefulSet-1Server Master Pod-N-0Server Slave Pod-N-1Server Slave Pod-N-2Server Group NStatefulSet-2Storage Service ClusterDisco
13、very Service Pod-0Discovery Service Pod-1Discovery Service Pod-2Discovery Service Cluster使用 TLA+ 验证系统自愈特性目标状态Desired State使用 TLA+ 验证系统自愈特性实际状态Realized State设计实现声明式自愈系统的工具与方法架构选型选择基础状态持久化框架参考系统:Kubernetes高可用 系统设计设计并验证高可用分布式系统参考工具:TLA+ Toolkit系统实现实现高可用系统的控制模块参考模式:Kubernetes Operator系统测试测试分布式高可用系统的自愈能力
14、参考工具:Jepsen目录分布式系统面临的高可用问题设计和验证高可用分布式系统的工具与方法 设计和验证高可用分布式系统的案例分享 高可用系统的最佳实践总结最佳实践分享有关 TLA+ 的使用分布式系统设计 80% 的重点工作在与设计安全性原则 目前 TLA+ 工具已经有云服务上线,但只支持检查安全性 单机版的 TLA+ 工具支持系统活性的检查,但是性能比较差 活性检查的性能瓶颈在于系统状态图中强连通图算法的实现TLA+ 中实现的卡壳(Stutter)等价能力,即对所有状态保持不变 也是合法状态最佳实践分享有关分布式系统统一 API 的设计所有API应该是声明式的 高层API以操作意图为基础设计
15、低层 API 根据高层 API 的控制需要设计 API 对象是彼此互补而且可组合的 尽量避免简单封装,不要有隐藏的内部 API API 操作复杂度与对象数量成正比API 对象状态不依赖于连接状态针对全局状态设计自愈容错机制最佳实践分享有关系统设计和运营分开设计理想状态和实际状态 Desired State Realized State利 用 队 列 解 耦 系 统 尽量不要依赖 DNS 做高可用 监控负载不均的情况 避免 Self DoS最佳实践分享有关微服务架构的典型模式限 流 Throttling 超 时 Timeouts 熔断器 Circuit Breaker 壁 舱 Bulkheads 快 速 失 败 Fail Fast 背压模式 Backpressure最佳实践分享有关遵循快速回复的原则快 速 报 错 Fail Fast 复杂操作拆分成简单原子操作,在界面和 CLI 做组合 注 意 设 置 超 时 尽 量 避 免 用 全
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北方农村散养鸡管理制度
- 学校综合组制度管理制度
- 玻璃窑炉考试题及答案
- 爆破证考试题及答案
- 保安结业考试题及答案
- 氨工艺考试题及答案
- 外购后备猪饲养管理制度
- 家具公司设计部管理制度
- 幼儿照护与托育管理制度
- 大自然公司用车管理制度
- 四川省凉山彝族自治州西昌市2024年小升初总复习数学测试题含解析
- TD/T 1014-2007 第二次土地调查技术规程(正式版)
- 《电力变压器有载分接开关机械特性的声纹振动分析法》
- 理财经理营销经验
- 马生产学智慧树知到期末考试答案2024年
- 医院安保工作实施方案
- 福建省福州市2023-2024学年下学期八年级期末适应性测试物理模拟试卷
- 劳务合作合同范本
- 医院信息科某年工作总结
- 网络安全法律法规与政策
- 车辆爆胎突发事件的应对与处理技巧
评论
0/150
提交评论