混沌工程
什么是混沌工程
定义
混沌工程是在分布式系统上进行实验的学科
混沌工程与传统测试的区别
会共用很多测试工具,但混沌工程是通过实践对系统有更新的认知,而传统测试则是使用特定方式对某一块进行特定测试。
混沌工程应该是传统测试的补充。
目的
了解和发现系统未知的弱点,做到防患于未然。
原则
破坏这种稳定状态的难度越大,我们对于系统运作效果的信心就越强。如果发现其中存在薄弱环节,我们则可将其设为改进目标,并抢在其对整体系统造成影响前加以解决。
- 围绕稳态行为构建假设
专注于系统的可测量输出结果,而非系统的内部属性。在短时间内测量输出结果并将此作为系统稳态的代表。整体系统的数据吞吐量、错误率、延迟百分比等皆可作为稳态行为的关键性表示指标。通过关注实验中各系统行为模式,混沌工程能够验证系统是否正常工作——而无需尝试解析其工作原理。
- 各类现实世界事件
混沌变量应直接反映各类现实世界事件。利用潜在影响或者预估频率确定各事件的具体优先级。另外,您应考虑到各类与硬件故障相关之事件,包括服务器死机、错误响应等软件故障以及流量峰值或规模伸缩事件等非故障性状况。任何可能导致稳态中断的事件皆应被视为混沌实验当中的潜在变量。
- 在生产环境中运行实验
根据环境与流量模式的不同,系统运行效果亦将受到影响。由于运行效果可能随时改变,因此我们应将对实际流量进行采样作为获取可靠请求路径的惟一方法。为了保证系统运行方式的真实性以及同现有部署系统间的关联性,混沌工程原则强烈建议您直接面向生产流量进行实验。
- 利用自动化实验机制实现持续运行
实验的手动运行工作属于劳动力密集型任务,因此难以长久持续。我们建议您采取自动化实验及持续运行方式。混沌工程能够将自动化系统引入系统之内,从而促进协调与分析工作的顺利进行。
- 尽可能缩小影响范围
在生产环境中进行实验可能给客户造成不必要的影响。尽管部分短期负面影响不可避免,但混沌工程师有责任亦有必要尽可能控制并减小实验引发的不良后果。
实践的先诀条件
如果确定混沌工程实验会导致系统出现严重问题,那么运行该实验就没有任何意义。
如果明确地知道系统中存在某个弱点,就没有必要实验;那么先解决这个弱点,然后回到混沌工程。
具体实践
故障演练:遵循混沌工程实验原则
阿里巴巴的实践参考:https://www.jianshu.com/p/02f8e7b7d1ad
工具
阿里开源故障演练平台:ChaosBlade
netflix开源的SimianArmy
资料
https://www.jianshu.com/p/4bd4f88e24e4
https://blog.youkuaiyun.com/zl1zl2zl3/article/details/86676588