1 什么是混沌工程
混沌工程(Chaos
Engineering)是一种系统稳定性保障手段,主要采用主动向系统中引入软件或硬件的异常状态(扰动)的方式,制造故障场景并根据系统在各种压力下的行为表现确定优化策略。
应用混沌工程能够校验和评价系统抵抗扰动并保持正常运作的能力(稳定性),提前识别未知隐患,并及时修复,确保保障系统能够抵御生产环境中的失控条件,提升整体稳定性。
2 混沌工程发展历程
混沌工程首次提出是在2008 年 8
月,由网飞公司(Netflix)提出,当时提出的背景是网飞公司的数据库发生故障使得网飞公司长达三天的停机,经济损失巨大。于是网飞公司开始探索用混沌工程去优化稳定性保障体系,防止此类事件的再次发生,于是2010
年该公司开发Chaos Monkey
程序,其主要功能是随机终止在生产环境中运行的虚拟机实例和容器,模拟系统基础设施遭到破坏的场景,使得工程师能够观察服务是否健壮、有弹性,能否容忍计划外的故障。
![混沌工程 混沌工程](//ziboxinyan.com/FileUpload/ueditor_s/upload/2022-1/4/6377690038334299616392105.png)
2012年Chaos
Monkey 在 Simain Army 项目中开源,Simian
Army成为首个开源的混纯工程工具集,此举为混沌工程工具的发展打下了基础。
2015年网飞公司正式发布《混沌工程理念》(Principal of Chaos
Engineering),主要介绍了混沌工程实验的目的、意义和方法论。2016 年混沌工程商业公司 Gremlin成立,混沌工程正式走向商用化。
2018 年开始,混沌工程的春天开始来临,国内企业纷纷引入并实践混沌工程,并在2019年推出国内厂商主导的混沌工程开源项目Chaos
Blade,2020年推出 Chaos Mesh,现已发展成为具备国际顶级影响力的混沌工程项目。
3 混沌工程和现阶段稳定性保障措施的对比
(1)工作内容:现阶段稳定性保障措施防范缺陷的引入,故障发生时对缺陷进行快速的识别和响应;而混沌工程通过实验主动探究系统缺陷
(2)排查缺陷的类型:现阶段稳定性保障措施排查低层次缺陷,比较明显的缺陷,或已经引发故障的缺陷;而混沌工程排查未知的、潜在的缺陷,还未造成明显后果的缺陷
(3)应对缺陷的方式:现阶段稳定性保障措施被动响应,缺陷应对的开始时间取决于故障何时发生,缺陷应对成本不可控;而混沌工程主动响应,缺陷应对的开始时间取决于混沌工程,实验时间,缺陷应对成本可控
(4)识别缺陷的效率:现阶段稳定性保障措施效率低,对于一些触发条件苛刻的潜在缺陷可能需要很长时间才能被识别;而混沌工程效率高,可以使潜在缺陷尽快暴露,缩短缺陷识别周期
![混沌工程](//ziboxinyan.com/FileUpload/ueditor_s/upload/2022-1/4/6377690096024639488005509.png)
![混沌工程](//ziboxinyan.com/FileUpload/ueditor_s/upload/2022-1/4/6377690096040262463520368.png)
4 实施混沌工程的意义
(1)对研发工程师、架构师来说,实施混沌工程可以加深对系统的理解,验证系统架构的容错能力
(2)对运维工程师来说,实施混沌工程能够提高故障的应急效率,实现故障告警、定位、恢复的有效应对
(3)对于测试工程师来说,实施混沌工程可以弥补传统测试方法留下的空白,更主动的方式探究系统问题
(4)对于产品设计人员来说,实施混沌工程可以了解产品在突发情况下的表现,提升客户在突发情况下的产品使用体验
![混沌工程 混沌工程](//ziboxinyan.com/FileUpload/ueditor_s/upload/2022-1/4/63776900403440.png)
来源:《中国信通院:混沌工程实践指南(2021年)(43页).pdf》
推荐阅读:《8-第四范式-基于k8s的自动化混沌工程实践-王丹丹.pdf》
《混沌工程实验室:中国混沌工程调查报告(2021年)(21页).pdf》
《姚远-现代化应用的 DevOps 与混沌工程.pdf》