通过对生产中的系统造成随机破坏,Chaos Monkey会教您如何使这些系统更强大
从分发DVD到构建用于流视频的分布式云系统的转变过程中,Chaos Monkey是Netflix的先驱,它引入了一种工程原理,已被各种规模和规模的软件开发组织所接受:即,通过有意破坏系统来可以学习使他们更具韧性。
根据该主题的原始Netflix博客文章,该文章由当时的云和系统基础架构总监Yury Izrailevsky和流媒体公司的云解决方案总监Ariel Tseitlin于2011年7月发布,Chaos Monkey旨在随机禁用以下设备上的生产实例:其Amazon Web Services基础架构,从而暴露出Netflix工程师可以通过构建更好的自动恢复机制来消除的弱点。
[ 什么是SRE?站点可靠性工程师的重要角色 ]
博客的名字源于“在您的数据中心(或云区域)释放带有武器的野猴以随机击落实例并通过电缆咀嚼的想法-在我们不断为客户提供服务的同时,不中断”状态。
在实践中,这将涉及一个简单的应用程序:“从每个群集中随机选择一个实例,并在营业时间的某个时间点将其关闭,而不会发出警告。这将在每个工作日完成,”前Netflix工程师Nora Jones和Casey Rosenthal在由O'Reilly Media出版的有关该主题的综合书籍“ 混沌工程”中详细介绍了这一点。
这个想法是,通过了解您最薄弱的地方,工程师可以设置自动触发器来解决问题,如果出现问题,可以在半夜为他们保存呼叫。从此,混沌猴子在混沌工程学的旗帜下发展成为一整套混沌原理。
Chaos Monkey Netflix上的Chaos Monkey
Chaos Monkey源自2010年左右在Netflix进行的工程工作,当时Greg Orzell(现在在微软拥有的GitHub工作)被要求在公司新的基于云的体系结构中建立弹性。
混沌工程学 Orzell告诉InfoWorld:“我对Chaos Monkey的看法并不是工程学的主要成就。” “它带来的价值是改变观念,这在我们从运送DVD到通过互联网流式传输的过程中至关重要。”
[ 在这个由12部分组成的综合课程中,从入门概念到高级设计模式学习Java!]
早期,Netflix工程师使用“ 四面军 ”的开放源代码工具向系统中引入了一系列中断和问题,每种工具都负责某些类型的故障,首先是从Chaos Monkey提取AWS群集开始。
最初的军队(现在大多数人已经退休,转而使用新工具)包括诸如Latency Monkey(这会导致RESTful客户端-服务器通信层的人为延迟)之类的事物,以及Monkey Doctor(其会参与在每个实例上运行的健康检查) ,并监视其他外部健康状况(例如CPU负载)以检测不正常的实例,并在需要时将其从服务中删除。
通过模拟整个AWS可用性区域的中断,Chaos Kong将Chaos Monkey提升到一个新的水平。2015年Netflix博客文章概述了“ AWS区域不可用的情况非常罕见,但确实如此。”
“通过定期运行模拟区域中断的实验,我们能够及早发现任何系统性弱点并加以修复,”该帖子继续说道。“当US-EAST-1实际上不可用时,我们的系统已经足够强大,可以处理流量故障转移。”
混沌工程学 正如琼斯和罗森塔尔在书中所概述的那样,在混乱的基础设施上放任混乱是“白手起家,装配了“作战室”以监视流媒体服务的各个方面,并且持续了数小时。”
两年后的2017年7月,Netflix推出了 ChAP,即Chaos Automation Platform,它“查询用户指定服务的部署管道。然后,它将启动该服务的实验和控制集群,并向每个集群路由少量流量。
[ 同样在InfoWorld上:什么是CI / CD?持续集成和持续交付的解释 ]
混沌工程原理
基本的混沌猴子的做法已经迅速发展,通过混沌岗越来越大的部署,后来被正式称为混沌工程。Netflix直到2015年才组建自己的正式混乱工程团队。该团队由现任Stitch Fix工程总监Bruce Wong领导。
混沌工程学 混沌工程学的原理已经由“混沌猴子”的一些原始作者正式整理,将实践定义为:“在系统上进行实验的学科,以建立对系统承受生产中动荡条件能力的信心。”
实际上,这采用四步过程的形式:
定义系统的“稳定状态”以设置正常行为的基准。假设在对照组和实验组中这种稳态都将持续。引入反映真实事件的变量,例如崩溃的服务器,发生故障的硬盘驱动器或断开的网络连接。试图通过寻找对照组和实验组之间的差异来反驳这一假设。如果稳定状态难以破坏,那么您将拥有一个强大的系统。如果存在弱点,那么您需要解决一些问题。
琼斯和罗森塔尔观察到:“自从《原理》发布以来的五年中,我们已经看到混乱的工程技术不断发展,以应对新行业中的新挑战。” “随着采用范围遍及软件行业并进入新的垂直领域,实践的原理和基础必将继续发展。”
混沌工程与混沌猴子
要运行Chaos Monkey的开源版本,您的系统将必须满足GitHub上概述的一组前提条件。
Chaos Monkey不能作为服务运行,因此您必须按照GitHub页面上的说明设置cron作业,然后每周工作一次致电Chaos Monkey以创建终止时间表。
要使用此版本的Chaos Monkey,您必须使用Netflix自己的开源连续交付平台Spinnaker,这可能会限制某些组织采用该方法的能力。Chaos Monkey还需要一个与MySQL兼容的数据库,版本5.6或更高版本。
服务所有者通过Spinnaker设置其Chaos Monkey配置。Chaos Monkey通过Spinnaker来获取有关服务部署方式的信息,并以您指定的频率和时间表随机终止实例(虚拟机或容器)。
当然,实施Chaos Monkey只是解决系统弹性问题的艰巨和复杂任务的开始。混沌猴子只是发现系统中的弱点。然后,由开发人员或系统工程团队确定原因并提出解决方案。
什么是Chaos Monkey “工具本身并不昂贵,但是您必须对工具做出反应的投资却是,” Orzell指出。致力于混乱的工程还需要将资源从构建新功能转移到增强弹性。他补充说:“每项业务在该频谱上处于不同的位置,他们每个人都必须决定在该空间中要拨多少钱。”
琼斯(Jones)和罗森塔尔(Rosenthal)说,在早期,Netflix的工程师“特别是从金融机构那里得到了很多回击。”
尽管银行的风险更高,但它们仍然遭受停电的影响,因此,许多组织通过谨慎地实施“积极的战略,例如混乱的工程来理解风险,以防止产生大的,不受控制的结果”,但许多组织改变了想法,最早采用Capital One收养者,详见书中。
[ 同样在InfoWorld上:站点可靠性工程遇上发展难题的地方 ]
混沌工程资源
同样,关于该主题的最新,权威著作是前Netflix工程师Nora Jones和Casey Rosenthal于2020年4月出版的《混沌工程》,该书借鉴了这些作者和其他人在2017年《混沌工程》一书中汇编的许多作品。。有关更实用的概述,请参见Russ Miles的《学习混沌工程》。
Netflix在GitHub上提供了有关该主题的大量资源,包括教程,大量文档,错误计数器,中断检查器和解密器工具。