五分钟技术趣谈 | 关于混沌工程,你了解多少

企业动态
混沌工程(Chaos Engineering)不是一个新概念,从Netflix的工程师创建混沌猴子开始,已经默默发展了数年,随着近年云原生的兴起,混沌工程开始频繁地出现在我们面前。作为一种提高技术架构弹性能力的复杂技术手段,混沌工程在分布式系统上进行随机的故障注入实验,和云原生规模宏大、结构复杂、可靠性要求高的特点完美匹配,为云原生的发展提供较强助力。

Labs 导读

混沌工程(Chaos Engineering)不是一个新概念,从Netflix的工程师创建混沌猴子开始,已经默默发展了数年,随着近年云原生的兴起,混沌工程开始频繁地出现在我们面前。作为一种提高技术架构弹性能力的复杂技术手段,混沌工程在分布式系统上进行随机的故障注入实验,和云原生规模宏大、结构复杂、可靠性要求高的特点完美匹配,为云原生的发展提供较强助力。

[[424743]]

 

“今年要搞云原生,混沌工程也要考虑了。”“听说某某公司建了个混沌工程平台呢。”“我最近也在研究混沌工程。”

最近是不是经常听到这样的对话?

混沌工程到底是什么?

为什么要实施混沌工程?

怎么实施?

如果你还不太了解

那就听我给你介绍一下吧

Part 01 什么是混沌工程

有一只猴子,非常调皮,上蹿下跳地到处搞破坏,不知道什么时候就把系统内哪台服务给搞挂了,可是IT人们不仅不想办法消灭它,还非常欢迎它,甚至任由它的队伍发展壮大,成立了“猴子军团”!是不是特别匪夷所思?其实,这就是混沌工程的始祖,由Netflix公司开发的Chaos Monkey,让我们来了解一下吧。

根据这只猴子的特性,想必大家也能猜个几分了,在系统内随机搞破坏,制造一些正常手段难以设计的故障,验证系统的恢复能力,提高系统的可靠性,如果给个定义的话,混沌工程就是一种提高技术架构弹性能力的复杂技术手段。是不是感觉跟我们常说的“故障注入”有点像呢?没错,“故障注入”是混沌工程最重要的组成部分,“故障演练”和混沌工程确实有一部分重叠,只是混沌工程的内涵更丰富,有自己的通用准则,在实施层面上看,混沌工程更像是一种实验,并不预设实验结果。

Part 02 为什么要实施混沌工程

按照目前云原生时代流行的持续测试的理念,测试人员在软件生命周期的需求分析阶段就介入了,更有自动化测试、测试左移/后移等手段的保驾护航,难道还会有发现不了的bug?还需要引入混沌工程?答案是肯定的。因为目前的测试手段都是基于制定好的测试用例来执行测试,测试结果是有预期的,对于复杂的系统,尤其是动辄成千上万台服务器的云环境,我们很难预计到系统内会发生什么故障,更无法预期发生一个小小的故障对整个系统会产生多大的影响。混沌工程就是为了解决这个问题而产生的,尽可能产生随机故障,监控系统的表现,为加固系统提供参考和建议,这样就能不断提高系统的健壮性。

Part 03 怎么实施混沌工程

作为混沌工程的基础,肯定要先了解下故障注入,其实业界已经有了相对通用的按照等级划分的故障画像了。

有了故障画像,混沌工程的实施就有了基础,Netflix也给出了混沌工程的实施步骤以及设计原则,经过多年的发展,阿里巴巴、亚马逊等巨头公司都有了自己的混沌工程平台,同时开源了很多故障注入工具,站在巨人的肩膀上,我们再来实施混沌工程就容易了很多。

目前比较受欢迎的开源工具见下表,大部分的工具是在chaos monkey的基础上衍生出来的:

我们研究了部分开源工具,并在项目上进行了实践。不管是在虚拟机环境还是容器环境,这些工具的使用都非常简单,覆盖的故障场景也相对比较全面,从底层服务器级别,到代码的方法级别,常规的故障都可以模拟。当然了,目前支持的故障场景比较简单,很多常用的中间件也暂不支持,留给我们很大的二次开发空间。

这些开源工具存在的通用问题整理如下:

  • 功能分散、单薄。每种工具在功能上都有局限性,只具备模拟部分故障的能力;
  • 重点都在故障注入,在混沌工程的其他设计原则方面比较欠缺。不能自动化执行,没有可视化管理界面,对实验的爆炸半径控制不够等。

那什么样的才是完整的混沌工程平台呢?除了故障类型的支持,权限管理、资源管理、演练推荐、流程编排等 都是一个成熟的混沌工程平台的必要组成部分,甚至可以提供攻防演练等上层能力。所以说,搭建一个成熟的混沌工程平台不是一件容易的事情。

Part 04 总结

混沌工程发展了这么多年,前人已经在故障画像、故障注入工具、混沌工程平台搭建思路等方面打好了坚实的基础,进而推动混沌工程技术持续进步与完善,随着云原生技术的发展,混沌工程的价值也将更加显现。

【本文为51CTO专栏作者“移动Labs”原创稿件,转载请联系原作者】

戳这里,看该作者更多好文

责任编辑:未丽燕 来源: 移动Labs
相关推荐

2023-07-02 16:09:57

人工智能人脸识别

2023-07-02 16:43:24

云桌面云计算

2023-07-23 18:47:59

Docker开源

2023-07-16 18:49:42

HTTP网络

2023-04-15 20:25:23

微前端

2023-07-02 16:34:06

GPU虚拟化深度学习

2023-07-23 08:35:13

Web网络

2023-09-12 07:10:13

Nacos架构

2023-07-31 08:55:15

AI技术网络暴力

2023-07-12 15:50:29

机器学习人工智能

2023-08-29 06:50:01

Javamaven

2023-07-12 16:03:37

Android开发架构

2023-09-17 17:51:43

Android 14

2023-08-06 07:00:59

Openstack网络

2023-08-15 14:46:03

2023-08-06 06:55:29

数字可视化物联网

2021-06-04 15:38:18

联邦学习人工智能数据

2023-06-03 21:06:05

2023-09-02 20:22:42

自动化测试软件开发

2023-08-07 06:35:07

系统限流
点赞
收藏

51CTO技术栈公众号