企业如何规模化地赋能团队,以应对上云后所遭遇的未知暗债?在解决这个复杂问题的过程中,混沌工程诞生了。
什么是暗债?讨论系统复杂性的STELLA 报告指出,“暗债存在于复杂系统中,它所产生的异常,会导致复杂系统出现故障。 暗债产生时,无法识别。 它不会使得系统停顿,而是会产生异常。 当硬件或软件与框架其他部分发生不可预见的交互时,暗债就会产生。 由于暗债不可见,只能通过系统发生异常才能感知它的存在,所以暗债无法避免。”
企业的应用软件系统,无论是从原先的单体架构整体平移到云环境,还是进行了微服务化改造后逐步上云,软件系统运行所依赖的环境以及软件系统自身,都会变得越来越复杂。当软件系统内部的服务之间,以及与其所依赖的云平台发生交互时,就会产生不可避免的暗债,导致系统出现不可预知的故障。
Netflix公司在2008年,将其单体架构的系统从数据中心迁移到AWS云平台时,就出现了暗债所导致的未知故障。比如系统运行所依赖的AWS实例会突然消失,且不会发出警告。
由于Netflix的业务完全依赖AWS的云服务,所以上述暗债是会影响公司所有业务。如何才能规模化地应对这种全局性的暗债呢?
Netflix工程师尝试了各种方法来应对这种暗债,最后发现“混沌猴”效果不错,于是就将其保留了下来。
混沌猴是一个应用程序,它会模拟触发上述暗债,即遍历AWS实例集群,然后从每个集群中随机选择一个实例,在上班时间关闭,且不发出警告。由于这是在生产环境注入了故障,所以工程师们会将应对这种暗债,作为最高优先级的工作来完成,从而将规模化应对这种暗债最终落地。
Netflix公司从中逐渐发展出了混沌工程这门学科。
从中能够看出,混沌工程就是通过在复杂的分布式系统上进行故障注入实验,以便在企业内规模化地促进开发团队进行系统稳定性的赋能,从而应对不可预知的复杂系统中的暗债。
混沌工程赋能的核心,就是规模化地赋能开发团队各角色(业务、开发、测试、运维),更全面地理解复杂系统如何运行及如何失效,加强系统稳定性设计,以便快速应对未知暗债。
赋能开发团队,需要成立赋能团队。赋能团队的主要赋能工作,包括两个方面:首先为开发团队提供咨询服务,之后在此基础上,为开发团队提供适用的工具或平台。
要为混沌工程赋能创造好的条件,可以做下面12件事(参考了Reliability Calculator:https://www.gremlin.com/reliability-calculator/)。
混沌工程是一个赋能活动,其成效度量可以参考在培训界常用的Kirkpatrick模型。该模型是美国威斯康星大学教授Kirkpatrick,于1954年提出“4级培训成效评估模型”。
4级培训成效评估模型
要想实现混沌工程规模化赋能,需要运用“跨越鸿沟”的规模化思路,通过解决早期大众的痛点,来跨越从早期采纳者到早期大众的鸿沟,从而逐渐实现规模化。混沌工程赋能的过程,可以包含以下9步。
成立赋能团队,为开发团队的混沌工程实践,提供咨询服务和工具。
选择为生产环境稳定性所困扰的团队,及其所开发和维护的软件系统服务,作为试点。因为这样的团队,才有动力提升系统稳定性。
持续搞混沌工程实战营,每一期3个月,聚焦一个试点服务,重点培养混沌工程赋能种子,优化过程和工具,沉淀案例并分享。下一期换一个服务,再搞实战营,上一期的种子可以作为下一期的讲师,持续搞实战营,以便逐步增加赋能种子,并优化工具,逐步通过种子和工具进行混沌工程的规模化。
选择具有编程能力,且具备混沌工程理念的开发人员,作为赋能种子。每期实战营可选2位种子。
调研与访谈试点团队的系统稳定性现状和痛点,可以使用问卷,加快调研速度。
通过培训的形式,为试点团队业务、开发、测试、运维各个关键角色,导入混沌工程理念。在导入理念时,内容一定要紧扣团队痛点。
沉淀试点团队通过混沌工程实践,有效应对系统稳定性痛点的案例。以下7步是常见的混沌工程实验步骤。
1)稳态假说
召集试点团队业务、开发、测试、运维各个关键角色,参考软件架构图和系统稳定性痛点,共创稳态假说。
2)现实事件
试点团队参照现实世界的真实事件,设计故障注入方案和混沌实验。
3)观测影响
试点团队准备好观测工具,以便搜集实验数据,并在故障影响业务时及时中止实验。
4)稳定设计
试点团队针对共创出的稳态假说和现实事件,进行系统稳定性设计。
5)应急预案
试点团队针对故障注入实验,设计应急预案和随时中止实验的大红按钮,确保实验不会影响业务。
6)进行实验
试点团队业务、开发、测试和运维等关键角色需要全程参与实验,并扮演总指挥、操作员、观察员、记录员、安全员等角色,按照演练手册,各司其职。
7)学习改进
实验结束后,试点团队需要回顾实验整个过程,识别改进项(包括工具方面的改进项),并分析实验观测数据,编写实验报告,落地各个改进项。
试点团队按照Kirkpatrick模型,识别混沌工程实验应对系统稳定性痛点的成效,连同实验的整个过程,一起分享给其他团队,以便为规模化营造氛围。
试点团队通过混沌工程实战营,总结适合自身特点的混沌工程实践过程,并持续优化,以便持续提升系统稳定性,并为给其他团队进行规模化推广,提供参考。
混沌工程实践,本质上是赋能团队,通过提供咨询服务和工具,为复杂系统的开发团队进行规模化的系统稳定性赋能活动。要想让规模化赋能顺利开展,需要运用“跨越鸿沟”的规模化思路,通过解决早期大众的最大痛点,来跨越从早期采纳者到早期大众的鸿沟,从而逐渐实现规模化。而吸引早期大众的关键特性,就是能赋能早期大众更全面地理解复杂系统的运行和失效方式,从而设计更具韧性的系统,并能更加快速地应对暗债,以验证高可用的设计。