概念
混沌工程是一种提升可靠性的工程方法,通过人为在软件运行环境中制造可控的破坏,以此观察软件的整体运行情况,并根据表现发掘出软件系统的脆弱环节然后加以改进。
实施
实施混沌工程是有风险的,混沌工程和故障演练有根本性区别,故障演练是根据预案进行,结果是经过评估、可预期的。而混沌工程是为了挖掘系统中的薄弱点,是在生产环境中实施,出现的结果是未知的,有可能会影响业务,这一点需要格外注意,并与相关部门和leaders做好沟通和声明,得到共识后再进行
原则
- 评估风险,不在条件不成熟时进行高风险试验
- 因为试验的影响可能是未知的,尽量先小范围试验
- 目标场景明确,控制变量,一次测试的薄弱点不要太多
- 要有兜底方案,万一失控引起系统雪崩,有能力快速还原
步骤
- 制定计划,选择要试验的对象及薄弱场景,要控制试验半径(一般指试验对象的数量、物理位置、逻辑分组等),不能对正在运行的业务产生较大冲击。试验目标是当假设的脆弱场景发生时,系统能否保持稳态,即稳定的为用户服务。 例如我们认为数据中心内部的网络抖动可能会导致大哥打赏失败,即网络抖动是打赏系统的脆弱场景之一。接下来我们需要在生产环境中制造该场景,从而观察系统是否能正常打赏。打赏服务共计部署了10台服务器,我们可以选择其中几台服务器连接的交换机作为试验对象,执行死循环脚本耗尽交换机的cpu,使网络包的转发延迟上升,人为的制造网络抖动场景。然后观察整个打赏系统能否正常运行。如果系统正常,说明系统足够坚韧,这个脆弱场景不存在,如果异常,则需要观察具体的影响以便后期改进。
- 定义稳态基线。 只有先定义了稳态,我们才能以此为基线判断系统思否异常。常见稳态基线有资源使用率,网络延迟,请求响应时间、响应错误率等。 试验一旦造成的影响超过稳态基线的某一数值时,必须停止试验,以免系统失控。
- 制定还原方案。分两种情况:一是试验失控,要有能力还原,以便快速恢复业务;二是试验正常结束,需要让系统回归稳态。例如上面提到的交换机,为了制造网络抖动,人为跑了一些测试脚本,需要停止并还原配置。
- 执行试验。 记录试验场景,通过对照法,对比未试验前同时期的现象,观察系统是否能保持稳态
- 恢复系统,输出报告
工具
常见的混沌工程工具软件有chaos Blade,chaos mesh, chaos monkey等,具体使用可百度
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。