混沌工程应该是最近几年行业里流行的新概念,是很多大厂、很多测试行业大会中热门话题。有趣的是,几年下来,混沌工程这个话题一直温度不降,并像AI测试、精准测试那样,在行业内大放异彩。
为什么混沌工程会火起来?
我认为原因有二:
1、技术发展快
随着互联网业务发展,微服务架构、分布式架构和虚拟化容器技术的广泛普及,软件架构的复杂度在不断提升,已经远远超过了我们这批老技术员的技术认知。
但这样的大规模架构有个缺点,那就是「定位问题」较难,定位问题的成本越来越高,所以,才有了混沌工程现在的江湖地位。
2、开源工具多
在混沌工程的生态里,有诸多开源工具挺好用的:
- chaosblade:阿里开源的一款遵循混沌工程原理和混沌实验模型的实验注入工具,帮助企业提升分布式系统的容错能力。
- Simoorg:开源故障诱导程序,LinkedIn使用这个程序进行混沌工程实验。
- Monkey-Ops:在 Go 中实现并构建的开源工具,用于测试和终止随机组件和部署配置。
- Gremlin:一个混沌的工程项目,与AWS和Kubernetes合作,专注于零售和金融行业。它附带了内置冗余,在混沌工程实验威胁系统时阻止它们。
最终,随着开源工具越来越多,帮助大家减少了很多实验的学习和执行成本。
经济学家刘润曾经讲过这样一个知识点:真正的洞察力,可以始于相关性,但终于因果链。
混沌工程实验就是帮助测试工程师增加洞察力的有力方式。
举个栗子:
公司某系统在生产环境中运行的好好的,突然因为一些因素导致了生产问题,为公司造成了很多损失。
这时,老板生气地问“测试工程师为什么没有提前测出来?”
测试工程师也很冤枉“老板,我们测试又不是神仙,没办法预知未来啊!”
假如,如果,倘若,譬如,若是……,你曾经参与并对系统做过「混沌工程实验」,那就是完全不一样的两个场景。
你会理直气壮地说“老板,我们提前预知了这个问题。导致这种问题的原因是因为机器磁盘满了,而机器磁盘满了是因为系统的日志没有定时备份和清理的机制,我们曾经发过混沌工程实验报告,报告中重点提到了这个问题,他们那帮开发根本没把这个问题当回事啊!”
你看,在这种情况下,混沌工程是不是很有用?
什么是混沌测试?
从混乱的猴子开始,Netflix(奈飞公司)为应对不确定性的领域带来了一种全新的思维方式——主动出击。
这种主动出击的思维方式衍生出的一套实践方法,被称为混沌工程(Chaos Engineering),它旨在从根本上改变开发者应对软件缺陷和故障的思维方式。
在此之前,我们期望通过一系列的测试验证手段,尽最大的可能确保在线上运行的系统没有缺陷和故障。而混沌工程的理念认为这既不现实,也不符合系统自然发展的规律。混沌工程提倡我们首先要正面接受系统一定会存在缺陷,并且一定会时不时地发生故障的事实;然后,要求我们通过一些列实验找出可能发生问题的风险点,进而在不断加固系统的同时,促使开发者在开发软件时必须选择将防御性内建在系统中。
说白了,混沌测试 和 常规测试 的区别在于:
常规测试:我等系统开发出来,我再做测试执行,然后我发现Bug来证明你的系统不完善。(属于被动挨打,在需求或系统的条件下开展测试)
混沌测试:系统在各种异常状态下,肯定是存在缺陷的,我要通过实验证明这一点。(属于主动出击,属于技术性质的探索测试)
混沌测试的优势
这块内容就不写太多了,因为混沌工程至少拥有三大优势:找到系统中的盲点、隐藏的错误 和 性能瓶颈。
混沌测试的限制
你在百度搜索「混沌工程」,大部分的文章都在告诉你混沌工程有多么多好,多么多么优秀,但很少有文章提醒你事物的两面性:有优点,就有缺点。
缺点1:门槛高
如果你公司内成立了混沌工程的虚拟团队,这个团队一般都是由你们公司的技术大牛、IT架构大佬、测试开发专家组成的。不要说测试工程师了,就连普通的高级开发工程师都没办法入他们的法眼,原因就一个,技术不达标,教起来太累。
缺点2:成本高
要在生产环境做混沌工程实验,这不是开玩笑的,弄不好要丢掉饭碗的。
而且那么多大佬组成的虚拟团队,每天白花花的银子花着,老板的心在滴血。
虽然有诸多缺点,但并不会让混沌工程失去也非常依赖实验覆盖的广度与深度,广度越广,深度越深,暴露出系统架构层面的脆弱点才会越多,让整个团队对系统的信心也会越足。
用混沌工程搞垮团队的5种方法
1、尝试穷举所有的故障
由于我们人类日常的思维都是惯性思维,很少有逆向思维的场景,这就导致了工作中很多需求之外的异常情况我们不会主动去思考,例如:
- 系统网络永远是正常的
- 网络绝对不会有延迟
- 带宽是无上限的,不会被挤占
- 网络也是安全的
- 网络拓扑永远不会改变
- 系统管理员都是经过专业培训的,不会误操作
- 机房永远不会断电
- 机房的机器也不会宕机
- Docker是完美的
- 机器上的磁盘空间很大,不会满
- 我写的代码不会有Bug
- ……
还有很多很多,如果列举一条马云能给我100元的奖励,我能写到马云破产。
但上述大多问题,一家IT公司从创立到破产,说不定都遇不到1次,那么问题来了,到底哪些实验故障需模拟、哪些故障不需要模拟呢?