thoughtworks 伍斌 混沌工程与系统稳定性设计模式

CodeWarrior

2019/07/08 发布于 编程 分类

GIAC2019 

文字内容
1. 混沌工程2系统稳定性设计模式 v0 3 道长V伍斌W 201,.0).22
3. 道长V伍斌W、吾真本 能辅导软件开发团队又快又好地 y付软件的:DoNCDMWorkL技术 教练 因搞编程道场,人称“道长S。 经常在简书上撰写敏捷开发相关 的博客,署名“吾真本S。 工作20多年,做过开发、测试、 项目—理、技术教练。 2
4. 目录 什k是混沌工程 i什k要做混沌工程 稳定性设计是混沌工程“维稳S+步法的关键 3
5. 听众问题 i何使用测试不能解决复杂系统问题? 如何证明我的系统是复杂系统?什k因素让系统变成复杂系统?有没有办法通 过消除这些因素让系统变成非复杂?系统变多大满足r多少需求才会变成复杂 系统? 对项目g的8.实践有什k帮助? 项目的复杂度到r什k程度之后,才需要做所谓混沌工程呢?是不是这f概念 对u绝大多数“企d“应用S都是没有用的呢? 如何说服领导在生产环境实践混沌工程? 在什k阶段引入混沌工程? 引入混沌工程时,如何有效规避风险? 4
6. 什7是混沌工程.
7. 最早实现混沌工程的奈飞公司 1,,*:奈飞成立,0V0邮寄租赁 200*:流媒体服务V免费插件, 1,000部流媒体影片W;微软技术栈 V单块架构,”向容量伸缩W 200+.0+:数据库损坏,3天停机 V含0V0邮寄W;从单块架构迁移 到.W9分布式v架构 200,.0):12,000部流媒体影片; 数百f微服务,大规模分布式系统 的复杂性,随机的服务g断 2010:/DaoL 4oIkAP;失效注入 测试12: (1ailNrA 2IFAcMioI :ALMiIC 6
8. 混沌工程,指在分布式系统上进行试验的探索性 实践,旨在建立人们对u系统能够应对生产环境 中的动荡状态的信心。QQ混沌工程原则 7
9. 6什7要做混沌工程.
10. 1年前的一天TT “故障u1):21左右开始,1):(0分开始陆续恢复。S “访问某里v官网控制台和48、5.9、699等产品功能出现问题,引发r大量吐 槽。S “上线一f自动化运维新功能g,执行r一项变更验证操作。S “这一功能在v试环境验证中并未发生问题。S “上线到自动化运维系统后,触发8一个未知代码bug。S “错误代码禁用r部分内部27,导致部分产品访问链路不通。S “后续人工介入后,工程师团队快速定位问题进行r恢复。S “对u这次故障,没有借口,我们不能o不该出现这样的失误!S “我们将认真复盘改进自动化运维技术和发布验证流程,敬畏每一行代码,敬畏每 一份托付。S 9
11. 复杂和混沌的系统无u预v
12. 复杂系统:一组相互之间以及a环境之间存在互 动关系的子系统,b不完全被g央系统所控制。 11
13. 复杂性来自哪里? 非线形系统:输出的变化a输入的变化不成比例 蝴蝶效应 三体问题 12
14. 蝴蝶效应V非线形系统W 1,)1:美国气象学家洛伦兹,第t次用计 算机计算一段时间的气候变化 从昨天的g间…果0.(0)V实际精度是 0.(0)12*W开始往后 咖啡 天壤之别 1,)3:海鸥 1,*2:巴西的蝴蝶,得克萨斯州的龙卷风 对u非线形系统 整体不等u各部分之和 导致…果出现巨大差异的微小初始条 件,难以发现 13
15. 蝴蝶效应:导致不同后果的细微原因不易发现 14
16. 三体问题V典型的非线性系统W 1++*:瑞典国王奥斯卡tc,)0岁寿诞, 太阳系的稳定性问题 已知三点质量的初始位置和速度V或动 量W,根据牛顿运动定律和牛顿万有引力 定律,求解其后续运动。 法国数学家庞加莱简化r问题,提出r限 制性三体问题:假设一f双体问题,互相 围绕旋转,再增加一f质量远小u他们的 第三体,求第三体收到双体的引力之和会 出现怎样的轨迹。 庞加莱最终的…论发现,即使是限制性三 体问题,o会因i初始值稍有偏差而导致 后续…果无法预测。 三体互动关系,无法简单预测 15
17. 三体换成三服务呢?每f服务都通过r测试TT 某里v30分钟线上故障 “这一功能在测试环境验证g并未 发生问题。S “上线到自动化运维系统后,触发 r一f未知代码bNC。S 16
18. i何“在测试环境验证g并未发生问题S? 测试人员走进一家酒吧。 要r一杯啤酒。 要r0杯啤酒。 要r,,,,,杯啤酒。 要r一只蜥蜴。 要r负1杯啤酒。 要r一fLfdAlFkIALO。 17
19. i何“在测试环境验证g并未发生问题S? 开发人员面对分布式计算的谬误 网络可靠 延迟i零 带宽是无限的 网络是安全的 拓扑不会改变 只有一f—理员 传输成本i零 网络是同质的 18
20. 稳定性设计: 混沌工程*维稳”8步u的关键
21. 混沌工程的目的不是搞破坏,而是用试验进行探 索和演练,来增强系统的稳定性。 20
22. 系统稳定性V弹性/韧性W,指系统在可接受的 干扰情况下,能够承受局部破坏,并在可接受的 时间内进行自我恢复的能力。 21
23. 混沌工程“维稳S+步法 *0 先决条件:限制爆炸半径和受害者;建立可观v性;制定关闭混沌 试验后回b稳态的方案;制定应急预案 1. 定l稳态:定l系统正常*d务*行i的“稳态S *2 稳定性设计:运用稳定性系统设计方u实现3务稳态 3. 建立假设:假设d务稳态在引入干扰时保持平稳 4. 引入干扰:模拟真实c界的干扰并引入系统 (. 对比试验:根据试验和对照组的数据试图证明d务稳态假设不成立 *6 进行g进:根据试验结果g进系统稳定性设计 *7 持续试验:重复上述过程 注:*i比“混沌工程原则Sg的4步法多出的4步 22
24. 分布式系统“维稳S的稳定性设计模式 “要躲避的坑SV10+2f反模式W “不信有好sSV,+3f好模式W 1 集成点 1 超时 2 连累反应 2 断路器 3 层叠失效 3 舱壁 4 用户 4 稳态 ( 阻塞的线程 ( 快速失败 ) 自黑式攻击 ) 任其崩溃并替换 * 放大效应 * 握手 + 失衡的系统容量 + 考验机 *9 一窝蜂 , 将g间件解耦 *10 做出误判的机器 *10 卸0负载 11 缓慢的响应 *11 背压机制 12 无限长…果集 *12 节速器 23
25. 1 集成点 传入数据的每一f连接,都可以 令系统停止响应 24
26. 2 连累反应 由u一台服务器停机,令其他服 务器必须接过其负载而不堪重负 25
27. 3 层叠失效 某一层的失效导致其调用层发生 失效 26
28. 4 用户 随着用户流量的增长,最终它将 超过系统的容量 27
29. ( 阻塞的线程 所有线程都在开开心心地运行, 但只在那里“等待戈多S 28
30. ) 自黑式攻击 指系统V或有人类参a的扩展系 统W参a合谋来a自身作对 29
31. * 放大效应 存在“多对一S或“多对少S的 关系的多方规模增大,令另一方 遭受放大的影响而崩溃 30
32. + 失衡的系统容量 一f层“或服务能向另一f层“ 或服务,发送超过后者处理能力 的大量请求,从而淹没后者 31
33. *, 一窝蜂 当启动多台服务器V如在代码升 “和重新启动之后W,或一f croI作d在任何一f整点时间被 触发,或当配置—理系统推出一 f变更时,一堆服务器同时对某 一台服务器V如数据库W施加的 瞬时负载 32
34. *10 做出误判的机器 对u系统预期状态的“信念S, 在自动化平台a—理员之间所发 生的冲突 33
35. 11 缓慢的响应 “慢得好像死rS 34
36. 12 无限长…果集 查询数据库、遍历…果集并处理 每一行…果的程序,没有明确限 制可以处理的…果数量 35
37. 1 超时 只要认i响应不会到来,就可以 停止等待 36
38. 2 断路器 如果调用执行成功,那k一切平 安无s。但如果调用执行失败, 断路器会将其记录下来。一旦失 败次数或频率超过阈值,断路器 将跳闸并“断开电路S 37
39. 3 舱壁 能将船分隔成若干独立的水密隔 间的隔板,可防止水从一f部分 流到另一f部分。使得船体即使 被洞穿一次o不会沉没,能控制 损害范围 38
40. 4 稳态 分布式系统的“维稳S,比如针 对每f累积资源的机制,要相应 存在另一f机制以回收该资源 39
41. ( 快速失败 如果系统无法满足93.要求,则需 要快速通知调用者。不要让调用 者等待错误信息,o不要让他们 等到超时i止。否则只会让你的 问题成i他们的问题 40
42. ) 任其崩溃并替换 创建系统“稳定性所能做的最好 的s情,就是放弃组件“的稳定 性,并尽快更换组件,以回到系 统最初干净的刚完成启动的状态 41
43. * 握手 发送方和接收方ef设备之间用 u规范e者之间通信方式的过 程,让服务器通过限制自己的工 作量来保护自己 42
44. + 考验机 能够用网络错误、协议错误或应 用程序“错误等各种低层错误, 来“考验S被测软件的测试服务 器。因i每f系统最终都会偏离 接口规范 43
45. , 将g间件解耦 通过在系统之间传递数据和s件 的g间件来实现集成;通过让参 a其g的系统不必r解其他系统 的特定知识,而只是对其进行调 用来实现解耦 44
46. *10 卸下负载 当负载过高时,就开始拒绝新的 工作请求。这a快速失败模式相 关 45
47. *11 背压机制 请求的消费方将其处理请求的速 度通知发送方,让自己能慢些工 作,从而创造安全性 46
48. *12 节速器 减缓缺n判断能力的自动化机制 出错时的速度 47
49. 48
50. 听众问题
51. 听众问题 i何使用测试不能解决复杂系统问题? 测试只能检测已定l的测试用例,但无法保证用户和真 实的生产环境V网络错误、协议错误或应用程序“错 误W遵循任何测试用例。 50
52. 听众问题 如何证明我的系统是复杂系统?什k因素让系统变成复杂 系统?有没有办法通过消除这些因素让系统变成非复杂? 系统变多大满足r多少需求才会变成复杂系统? 复杂系统:一组相互之间以及a环境之间存在互动关系 的子系统,b不完全被g央系统所控制。 51
53. 听众问题 混沌工程对项目g的8.实践有什k帮助? 混沌工程重在用试验从不可预知g探索学习;失效注入 测试重在先入ij的进行检测 52
54. 听众问题 项目的复杂度到r什k程度之后,才需要做所谓混沌工程 呢?是不是这f概念对u绝大多数“企d“应用S都是没 有用的呢? 没有上v和没有使用大规模分布式系统的企d“应用, o离不开“维稳S的稳定性设计 53
55. 听众问题 如何说服领导在生产环境实践混沌工程? 医疗系统能否使用混沌工程?借鉴一下药物h床试验, 这是医学研究g的最高标准。 54
56. 听众问题 在什k阶段引入混沌工程? 生产s故问题定位时间越来越长 导致生产s故的原因不清的情况逐渐增多 越来越多的生产s故是由未预料到的使用场景导致 55
57. 听众问题 引入混沌工程时,如何有效规避风险? 限制爆炸半径和受害者 确保所涉及的系统落地r系统稳定性设计 需要具备有效的可观测性 识别系统稳态 制定…束混沌试验后回归系统稳态的方案 制定应急预案 56
58. 混沌成熟度模型 “ Chaos Engineering 9 ” InfoQ 57
59. 混沌成熟度模型 Chaos Engineering 9 InfoQ 58
60. 混沌成熟度模型 Chaos Engineering 9 InfoQ 59
61. 混沌成熟度模型 A/B / Chaos Engineering 9 InfoQ 60
62. 总结
63. 总… 不要止步u所发现的“根本原因S,简单地惩罚替罪羊r s。因i大部分现实问题都是非线形问题,既无法预测, 又不易发现导致异常…果的细微原因 用所发现的“根本原因S作i启发,本着*1信有好9” 和*能在局部破坏0实现自愈”的设计原则,进行系统的 稳定性设计,把分布式系统各f子服务打造成“明哲自 保S的自治子系统,从而维持整f系统的稳定性 稳定性设计和24f稳定性模式,是混沌工程“维稳S+步法 的关键 62