混沌工程工具:混沌工程定位及原则梳理(8)

2023-10-10 21:31:14 浏览数 (2)

混沌工程定位

很多人都会把混沌工程和测试区分不清楚,我从执行时机、执行后是否对系统产生新认知,做了一张图如下。

基本可以看出,混沌工程不是测试,也不是在生产环境搞破坏,而是通过受控的实验,提升韧性,具有主动、能探索未知的效果。

混沌工程工具系列传送门:

1、 混沌工程工具:Chaos-mesh与Chaosblade技术实现与原理分析(1)-腾讯云开发者社区-腾讯云

2、 混沌工程工具:chaos-mesh注入项原理分析(2)-腾讯云开发者社区-腾讯云

3、 混沌工程工具:chaosblade在服务器上注入项原理分析(3)-腾讯云开发者社区-腾讯云

4、 混沌工程工具:业务代码注入原理(4)-腾讯云开发者社区-腾讯云

5、 混沌工程工具:Chaosblade Java业务代码注入原理(5)-腾讯云开发者社区-腾讯云

6、 混沌工程工具:混沌工程实施过程及持久价值(7)-腾讯云开发者社区-腾讯云

7、 混沌工程工具:混沌工程定位及原则梳理(8)-腾讯云开发者社区-腾讯云

8、 混沌工程工具:一个混沌工程设计的例子(9)-腾讯云开发者社区-腾讯云

混沌工程原则解读及选择原则

混沌工程高级原则,是国外混沌工程专家一起整理的实践指南,每条原则单独拎出来,都可以演进成一个完成的系统工具。深入理解这些原则,对混沌工程的实施具有事半功倍的效果。

原文参考:https://principlesofchaos.org/zh/

原则一:构建基于稳态的假说

1、 需要具有可证伪性。

2、 定义稳态,可量化

3、 必选业务KPI及资源负载情况

好的假说:当发生故障A时,系统服务响应耗时增加,由于有超时控制,超时请求量上涨10%,B服务相应设备的CPU负载会达到50%。

不好的假说:当发生故障A时,系统会运行不正常,客户访问比较慢。

原则二:多样化真实世界的事件

这个原则主要说的是实验选择的问题,如何选择,可一参考如下思路

1、 最能在日常遇到的故障 -- 该故障模式的风险程度为高

2、 发生实验的故障时,系统是否必出问题。如果是,则需要考虑重新设计高可用方案

3、 假说是否满足业务需要,不满足则要考虑重新设计高可用方案

4、 假说的反驳只能在演练阶段实现

5、 最能提升对系统的认识及团队能力提升

如果都不满足,最好不要选这个实验,而是采用其它手段应对。

比如:ES是主链路资源,如果ES集群异常而无法读写,则不需要演练了,因为结果已知。

原则三:持续进行自动化实验

系统一直在变化,只有持续实验,才能及时识别因系统变化对稳定性的破坏,获取最大的能力提升。

而单次实验的人力投入比较多,并且每次实验中,有可复用的地方,可以通过工具来自动化。这就是我们前面分析的混沌源码要解决的问题

1、 自动化创建实验,可以借助IDIF

2、 自动化执行实验,可以借助开源工具。

原则四:在生产环境中执行实验

在哪个环境进行实验,就可以获得哪个环境的信心。所以在开始混沌时,为了减少对系统的冲击,可以在测试环境执行。但最终还是要演进到生产环境。在生产环境中执行实验至关重要,因为它可以帮助我们测试新的功能、修复潜在的问题以及优化性能,而这些是在真实使用情况下难以模拟的。通过生产环境实验,我们可以获取实际用户反馈,了解系统行为,并确保应用程序在变化的条件下仍然可靠。这有助于提高产品质量、减少风险,同时使团队更具敏捷性,能够快速适应不断变化的需求,从而为用户提供更好的体验。

原则五:最小化爆炸半径

执行实验时,一定要考虑不能对系统造成大的影响,这包括下面两点:

1、 实验时的影响尽可能小。

2、 实验后对恢复的影响尽可能小。

根据历史经验,可以考虑通过下面方式最小化爆炸半径

分类

原则

演练时机

1、 低峰期先于高峰期 2、 工作日先于节假日 3、 变更前先于变更时、变更后

演练规模

用户粒度:1、单用户先于多用户2、测试用户先于真实用户请求粒度: 1、 单请求先于多请求 2、 单模块复合请求先于多模块复合请求组件粒度:1、小比例先于全组件系统粒度: 1、 边缘系统先于核心系统 2、 边缘可用区优于核心可用区网络粒度: 1、 子网小比例先于全子网 2、 子网先于全网

演练环境

非生产环境优于生产环境

演练模式

1、 有剧本的演练先于无剧本随机演练 2、 通过程序固化故障注入方式

稳态指标

突破稳态指标立即中止演练

终止通道

可随时终止演练

总结

本文梳理了混沌工程的定位及混沌原则解读。后面会针对一个具体的场景,设计一个混沌实验。

我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

0 人点赞