混沌工程:自动化实验以持续运行

在找到描述稳定状态的业务指标并建立稳定状态的假设后,然后采用注入多样的现实世界事件的方式验证微服务稳定性,在有状态、第三方系统和外部输入的生产环境中进行验证。这是一套完整的流程,在微服务稳定性测试初期是再合适不过了。但随着时间推移,重复的劳动浪费人力,要求新技能的提高,把手工的操作自动化起来是必然要落地。

手动执行一次性的实验是非常好的第一步。当想找出故障空间的新方法时,经常从手动的方法开始,小心谨慎地处理每一件事以期待建立对实验和对系统的信心。这种小心谨慎的态度有利于:a) 正确运行实验,b) 确保实验最小的爆炸半径。

在执行实验成功后,下一步就是将这个实验自动化以持续运行。当然如果某个实验是不可以自动化的,手工测试即可(个人观点,和书中不一样)。

微服务稳定性测试自动化的优势

稳定性测试自动化的好处很多,有助于将每次的实验规范化,可能自动化一开始注入某个事件后对系统的影响检查点比较少,可以慢慢积累,随着版本变更,对系统的影响检查点可能变更,不管什么原因,将每次的影响分析后不断更新到自动检查对系统的影响检查清单中。

还有一些操作如批量操作(n个虚拟机节点同时重启,n个物理机同时掉电等)、对时间有苛刻要求的测试(凌晨进行自动备份和自动同步任务时进行测试)、观测运行时关键指标的变化(虚拟机节点的资源占用情况和微服务的资源占用,微服务的接口调用成功率)等,都是大规模应用的,不易控制,不易观察汇总,自动化都可以解决这些问题。

需要自动判断实验是否存在可接受的范围内执行,比如在影响了5%的流量时观察这些流量对SPS的影响,若无影响可以提到到10%,再看是否有影响,若无影响再提高到20%,再不行就提高到40%。如果有影响则下调到30%再测试下影响。每次的实验需要做成自动化的模板,根据不同的需求定制相应的策略,直到找到系统可接受的范围甚至是边界值

确保实验最小的爆炸半径

我们的实验通过各种各样的方法探寻故障会造成未知的和不可间的影响。关键在于如何让这些薄弱环节曝光出来不会因意外造成更大规模的故障,我们称之为最小爆炸半径。

确定好最小爆炸半径也有助于自动化开展。

自动创建实验

定期自动化执行稳定性测试后,需要追求一个更好的自动化水平:自动设计实验。

设计混沌工程实验的挑战并非来自定位导致生产环境崩溃的原因,这些信息都在故障跟踪中。我们真正想要做的是,找到那些本不应该让系统崩溃的事件的原因,包括那些未曾发生过的,然后持续不断地设计实验进行验证,保证这些事件不会导致系统崩溃。

一个值得关注的项目是自动化路径驱动的故障注入的技术,可以识别出可能导致分布式系统故障的错误事件组合,其工作原理是通过推断系统正常情况下的行为来判断需要注入的候选错误事件。

稳定性测试自动化平台

尽量将稳定性测试自动化工具做成平台,进行分层,比如采用注入事件的模型,每一层包括测试预置条件、测试操作步骤(测试场景构造,测试执行和测试恢复)、测试检查点。

在混沌工程的实践中,我们自动执行实验,自动分析实验结果,并期望可以自动创建新的实验,生成环境也最好能自动化起来。

参考资料:侯杰翻译的《混沌工程》之自动化实验以持续运行

有兴趣还可以看看《互联网规模的自动化故障测试研究》Automating Failure Testing Researsh at Internet Scale。

你可能感兴趣的:(混沌工程:自动化实验以持续运行)