混沌工程:最小化爆炸半径

在找到描述稳定状态的业务指标并建立稳定状态的假设后,然后采用注入多样的现实世界事件的方式验证微服务稳定性,在有状态、第三方系统和外部输入的生产环境中进行验证。我们的实验通过各种各样的方法探寻故障会造成未知的和不可见的影响。关键在于如何让这些薄弱环节曝光出不会因意外造成更大规模的故障,我们称之为最小爆炸半径

混沌工程实验应该从可以承受可以衡量的注入事件开始,每个注入事件对应一定的风险,采用递进的方式,在进行的每一步实验都在前一步的基础之上。这种递进的方式不断增加我们对系统的信心,而不会对用户造成过多不必要的影响。个人认为这也是为什么提出最小爆炸半径的原因,从最小爆炸半径开始,不断叠加注入事件,对系统的稳定性测试稳扎稳打步步为营。

最小风险的实验只作用于很少的用户,为此验证客户端功能时只向一小部分终端注入事件(故障),这些实验仅影响一小部分用户或一小部分流程。虽然他们不代表全部的生成流量却是很好的早期指标。如果一个网站无法通过早期实验,那么就没有必要影响其余的大量真实用户。

首先是运行小规模的扩展实验,只影响一小部分用户,因为实验只允许这些流量遵循正常的路由规则所以最终会在生产服务器上均匀分布。小规模的扩展实验需要定义好成功指标来过滤所有被影响的用户,防止实验的影响被生产环境的噪声掩盖。成功指标指衡量实验是否成功的指标,哪些是真正验证通过的,哪些是碰巧没触及待测试点的也验证通过了。小规模扩散实验的优点在于不会触及生产环境的阈值,可以验证单一请求的超时和预案。

接下来是小规模的集中实验,通过修改路由策略将实验覆盖的用户流量导向特定的节点,这些节点上做高度集中的故障和延迟等测试。

风险最大但最准确的实验是无自定义路由的大规模实验。该实验可能会影响不在实验覆盖范围内的用户。当然没有什么比让所有生产环境中的用户都参与实验,能得到更多关于系统可以抵御特定故障场景的确定性。

除了扩大实验范围,在实验造成过多伤害时及时终止实验是必不可少的。自动创建生产环境和自动终止生产环境都是很重要的。

在扩大实验的同时最好有相应的实时监控我们感兴趣的指标,实时监控的指标系统要跟上节奏。

为了尽可能高效地应对实验不可预料的情况,要避免在高风险的时间段运行实验。

如果实验的工具和仪器本身对定义好的指标产生影响,也就是说结果有偏差,那么整个实验就没有意义了。我们要记住每次只检验一个可控的故障。

微服务稳定性测试,从最小爆炸半径开始,不断叠加注入事件,逐渐扩大实验的规模,打造配套的实时监控系统,稳扎稳打步步为营。

参考资料:侯杰翻译的《混沌工程》之最小化爆炸半径

你可能感兴趣的:(混沌工程:最小化爆炸半径)