导读
混沌工程(Chaos Engineering)不是一个新概念,从Netflix的工程师创建混沌猴子开始,已经默默发展了数年,随着近年云原生的兴起,混沌工程开始频繁地出现在我们面前。作为一种提高技术架构弹性能力的复杂技术手段,混沌工程在分布式系统上进行随机的故障注入实验,和云原生规模宏大、结构复杂、可靠性要求高的特点完美匹配,为云原生的发展提供较强助力。
云原生 × 混沌工程
“今年要搞云原生,混沌工程也要考虑了。”
“听说某某公司建了个混沌工程平台呢。”
“我最近也在研究混沌工程。”
最近是不是经常听到这样的对话?
混沌工程到底是什么?
为什么要实施混沌工程?
怎么实施?
如果你还不太了解❓
那就听我给你介绍一下吧👇
Part 01
● 什么是混沌工程 ●
有一只猴子,非常调皮,上蹿下跳地到处搞破坏,不知道什么时候就把系统内哪台服务给搞挂了,可是IT人们不仅不想办法消灭它,还非常欢迎它,甚至任由它的队伍发展壮大,成立了“猴子军团”!是不是特别匪夷所思?其实,这就是混沌工程的始祖,由Netflix公司开发的Chaos Monkey,让我们来了解一下吧。
根据这只猴子的特性,想必大家也能猜个几分了,在系统内随机搞破坏,制造一些正常手段难以设计的故障,验证系统的恢复能力,提高系统的可靠性,如果给个定义的话,混沌工程就是一种提高技术架构弹性能力的复杂技术手段。是不是感觉跟我们常说的“故障注入”有点像呢?没错,“故障注入”是混沌工程最重要的组成部分,“故障演练”和混沌工程确实有一部分重叠,只是混沌工程的内涵更丰富,有自己的通用准则,在实施层面上看,混沌工程更像是一种实验,并不预设实验结果。
Part 02
● 为什么要实施混沌工程 ●
按照目前云原生时代流行的持续测试的理念,测试人员在软件生命周期的需求分析阶段就介入了,更有自动化测试、测试左移/后移等手段的保驾护航,难道还会有发现不了的bug?还需要引入混沌工程?答案是肯定的。因为目前的测试手段都是基于制定好的测试用例来执行测试,测试结果是有预期的,对于复杂的系统,尤其是动辄成千上万台服务器的云环境,我们很难预计到系统内会发生什么故障,更无法预期发生一个小小的故障对整个系统会产生多大的影响。混沌工程就是为了解决这个问题而产生的,尽可能产生随机故障,监控系统的表现,为加固系统提供参考和建议,这样就能不断提高系统的健壮性。
Part 03
● 怎么实施混沌工程 ●
作为混沌工程的基础,肯定要先了解下故障注入,其实业界已经有了相对通用的按照等级划分的故障画像了。
有了故障画像,混沌工程的实施就有了基础,Netflix也给出了混沌工程的实施步骤以及设计原则,经过多年的发展,阿里巴巴、亚马逊等巨头公司都有了自己的混沌工程平台,同时开源了很多故障注入工具,站在巨人的肩膀上,我们再来实施混沌工程就容易了很多。
目前比较受欢迎的开源工具见下表,大部分的工具是在chaos monkey的基础上衍生出来的:
我们研究了部分开源工具,并在项目上进行了实践。不管是在虚拟机环境还是容器环境,这些工具的使用都非常简单,覆盖的故障场景也相对比较全面,从底层服务器级别,到代码的方法级别,常规的故障都可以模拟。当然了,目前支持的故障场景比较简单,很多常用的中间件也暂不支持,留给我们很大的二次开发空间。
这些开源工具存在的通用问题整理如下:
1、功能分散、单薄。每种工具在功能上都有局限性,只具备模拟部分故障的能力;
2、重点都在故障注入,在混沌工程的其他设计原则方面比较欠缺。不能自动化执行,没有可视化管理界面,对实验的爆炸半径控制不够等。
那什么样的才是完整的混沌工程平台呢?除了故障类型的支持,权限管理、资源管理、演练推荐、流程编排等 都是一个成熟的混沌工程平台的必要组成部分,甚至可以提供攻防演练等上层能力。所以说,搭建一个成熟的混沌工程平台不是一件容易的事情。
● 总结 ●
混沌工程发展了这么多年,前人已经在故障画像、故障注入工具、混沌工程平台搭建思路等方面打好了坚实的基础,进而推动混沌工程技术持续进步与完善,随着云原生技术的发展,混沌工程的价值也将更加显现。