都在说混沌工程,那到底要怎么做呢?

1,766 阅读8分钟

回答这个问题,首先要解决下,混沌工程的定义

什么是混沌工程?

 关于混沌工程的定义,各家都有自己的说法。下面是引用自信通院在《混沌工程实践指南(2021年)》中对于混沌工程的定义。

    混沌工程(Chaos Engineering)是通过主动向系统中引入软件或硬件的异常状态(扰动),制造故障场景并根据系统在各种压力下的行为表现确定优化策略的一种系统稳定性保障手段。
应用混沌工程可以对系统抵抗扰动并保持正常运作的能力(稳定性)进行校验和评估,提前识别未知隐患并进行修复,进而保障系统更好地抵御生产环境中的失控条件,提升整体稳定性。

 混沌工程是一种增加系统稳定性,确定系统优化策略的手段;也是一种认知复杂系统的手段。

混沌工程听上去不错,但它是怎么帮助我们改进系统稳定性的?

 2008年开始,Netflix 开始将计算平台从自有机房往AWS进行迁移,直到2010年底完成计算平台的完成整个过程。如此大规模的迁移工作,显然需要解决很多问题:
1、业务长时间跑在自建数据中心和AWS云上两种架构混合状态下,如果保证业务稳定性?
2、Netflix 估算共需要在云上搭建10多万个实例,在如此规模的应用系统下,如果保证业务稳定性?
3、作为在线视频业务,每1秒的业务终端都会造成巨大的经济损失,如何保证业务系统在微服务化进程中的稳定性?
对于这些问题的探究,通过加强高可用性设计,提高代码健壮性,加大测试范围,提高监控敏感度,都无法有效阻止故障发生。这种状况引发了Netflix对于生产故障的另一种思考:是不是我们现有条件下已经无法完整认知整个复杂系统?又或者,故障是不是本身就无法避免,我们需要从被动处理故障,改为主动认识故障?Netflix 面对这些问题时,内部开发了随机终止AWS上的EC2实例的实验工具,名为Chaos Monkey。意在通过故障实验的方式,从新认识故障和业务系统。Chaos Monkey 又发展成为 Chaos Kong(关闭整个可用区)以及后来的(ChAP,Chaos Automation Platform)混沌自动化平台。标题: fig:
根据Netflix的经验,借助平台工具进行自动化的、频繁的、可控的实验,可以很好的认知复杂系统,并提高系统应对故障时的信心。
执行混沌工程的目的就是为了提升系统稳定性,并且通过规范化和流程化的混沌工程工作的展开,转变大家对于故障的态度:“既然故障无法避免,就让故障在可控范围内频繁发生,让我们认知故障、认知系统,并进行持续改进”

混沌工程如此复杂,都需要哪些组织来执行?

 根据各个组织架构的分工不同,混沌工程可以从测试、运维、生产运行管理等组织内进行切入。
1、从测试切入时,通常作用于对测试系统的补充验证。混沌工程实验本身与非功能测试就有很多交集,但又有区别。、主要区别在于,测试是验证已知问题的结果,混沌工程是增加对系统的未知部分的探索。

差异点测试混沌工程
整体目标证明产品符合需求获得更多对系统的认知
执行环境开发、测试、准生产等专属环境(非生产)推荐在可控的生产环境
场景来源系统的设计文档,需求的交叉组合多样的现实事件做故障场景
测试方法根据系统接口设计输入根据系统架构和现实故障组合测试
输出结果二元性的测试结果:“符合”、“不符合”对系统本身的认知(过程资产)
结果影响范围系统逻辑代码的修正系统架构、系统运行资源、系统代码的调整

 2、从运维切入时,通常可以作用于对系统架构稳定性的验证。包括:对基础环境的稳定性验收。如:网络设备、物理服务器、操作系统、中间件产品、应用系统的整体架构的抗压能力、应用系统在各个负载情况下的服务状态等。尤其时当运行稳定的系统,引入新的组件时,混沌工程实验可以帮助我们认知新组件引入后系统的表现。我们应用系统引入和使用信创产品时,混沌工程实验能够很好帮助我们制定产品基线,并进行有效的检验。在信创产品上线之前充分识别风险,提前处置、修正问题。有效杜绝信创产品“带伤”上线。在验证应用对生产故障的修正时,通过平台化的混沌工程实验,将故障时各个组件的状态进行回放式模拟,使验证更方便。同样的,开发人员也可以通过这种回放场景,来验证故障发生时,系统的反应,分析故障发生的根本原因。
3、从生产运行切入时,通常可以作为验证组织对于系统故障预案的熟悉程度,以及预案的有效性的辅助工具。通过混沌工程平台,可以很好的控制故障注入的半径范围,并根据现实故障,生成实验场景。验证预案并将预案的执行过程进行记录,方便后续分析。持续帮助组织完善应急响应和故障预案。

这么多组织都可以进行混沌工程,混沌工程工作该如何展开?

 开展混沌工程可以根据企业组织具体需要进行,既可以自上而下进行建设,又可以从下而上逐步形成体系。
自上而下进行建设时,系统的建设混沌工程时,建议遵循混沌工程原则,建议进行两部分工作:混沌工程体系建设的咨询工作和平台的定制化工作。根据组织的切实需求,制定适应的混动工程体系。通过咨询的工作,确认混沌工程的建设范围:如,组织进行混动工程实验的目标、哪些系统纳入混沌工程平台、哪些人员参与混沌工程相关工作,混沌工程实验的全流程组织过程。混沌工程平台的定制化工作,主要解决对于现有系统的对接和纳管,并且根据组织进行混沌工程实验的目标。组织、定制故障场景库,解决各组织间开展实验时的沟通。最重要的是对于实验的过程资产管理。混沌工程最大的意义在于过程资产,混沌工程实验对于实验的结果并不是十分看重,反而实验过程对于混沌工程实验具有重大意义。也就是说无论实验的结果如何,我们都可以通过实验的过程资产,改进系统的稳定性,认识系统。规模化、体系化的进行混沌工程实验,必须具备平台能力。
自下而上进行建设时,则可以通过小规模,组织内可控的混沌工程实验开始,可以先通过一些混沌工程开源工具,进行故障注入测试,慢慢提高组织内的对于故障处置的能力和逐步提高系统稳定性。然后再慢慢进行跨组织,进行混沌工程实验,这时候仅仅靠开源工具是无法满足的。逐步就会形成对于平台的需求。此时组织可以进行平台的调研性工作,并根据组织的情况决定采购或者是自研。

总结

 混沌工程的终极目标是通过频繁的与系统互动,从而逐步完善系统的认知。我们既可以从上而下的体系化建设、也可以自下而上的逐步渐进。但最终由于混沌工程的复杂性,都将会需要平台工具来进行支撑和管理,保障最大化故障实验价值。