Netflix刚刚开源了他们那被人惦记好一阵子的“Chaos Monkey”,这是一套用来故意把服务器搞下线的软件,可以测试云环境的恢复能力。Netflix专门开发的一系列捣乱工具,已经有不少被拿出来和技术社区自由分享,现在Chaos Monkey也加入了这个行列。
Netflix团队让Chaos Monkey亮相的时间,最早是在2010年12月的一篇官博文章,文章内容是他们在AWS云上托管其热门视频流服务所得到的经验教训。文中总结了一点,叫做“避免失败的最好办法是经常失败”, 反映Netflix通过主动破坏自身环境来发现弱点的做法。
我们的工程师在AWS上最早建立的系统之一叫Chaos Monkey。这猴子的工作是随机杀掉架构中的运行实例和服务。如果我们不经常检验自己战胜挫折的能力,那么在最需要的时候,遇到意料之外的故障事件的时候,能力很可能使不出来。
Netflix技术团队在2012年7月20日的官博文章上宣布,Chaos Monkey作为开源项目公 开。文中解释了Chaos Monkey的设计意图和运营中的注意事项。Netflix声称软件可以成功运行在在AWS以外的云上,主要给用户检测自身环境中的失败条件。考虑到有人 会担心在数据中心里随便放跑猴子,不知道会闯出多大的祸事,Netflix预设了一些配置选项作为防备。首先,Chaos Monkey可以被设定为只在支持人员现场待命,准备救灾的时候才运行。
服务具有可配置的执行计划,默认只在非假日的周一到周五上午9点至下午3点执行。一般来说,我们的应用设计可以保证一两个实例下线不至于导致服务中 断,但万一有什么特殊情况,我们还是希望边上有人能解决问题和吸取经验。根据这样的思路,我们设计只有在预料警报会被工程师发现并作出响应的有限时间段, 才把Chaos Monkey放出来。
第二,用户可以决定Chaos Monkey对新应用的攻击强度。Netflix喜欢让Chaos Monkey对所有的应用无差别攻击(除非应用负责人明确选择退出),但一般用户不需要完全照学,可以养一只温顺点的猴子,叫它只跟特定的应用过不去,还 可以把彻底搞死实例的几率设得低一些。
不是所有的应用都能把实例下线不当回事。有时候恢复实例必须拿人力去填,说不定还要折腾备份。简化回复流程,加快恢复速度,最终实现自动化,这些都 需要时间。对于禁不起下线的应用,Chaos Monkey允许自主退出。Chaos Monkey中止实例的几率也是可调的。
比Chaos Monkey还早一点点喜迎开源的是另一个重要项目:Asgard。Netflix团队在另一篇文章中说,Asgard是用于部署和管理AWS环境的一套web界面。AWS本身的管理控制台提供了完整的服务器规划能力,不过Netflix团队觉得它缺少了“应用”的概念,所以打算让Asgard填补空缺。
当一个面向服务的架构中充满了巨量云对象的时候(如同Netflix所面临的情况),让用户从中找到与特定应用关联的全部对象,是很重要的一件事情。Asgard依靠存放在SimpleDB里的应用登记表和命名约定,把应用和相关的云对象联系到一起。
另外,Asgard将AWS Auto Scaling Groups聚合为“clusters”对象,更便于在部署失败的时候回滚。Asgard之所以设计“应用”和“集群”的概念,以及支持自动化部署任务,都是为了简化AWS的管理,减少人为出错。
Netflix正在积极的开源其软件,惠及更大的社群,Chaos Monkey和Asgard只是其中的一小部分而已。在他们的Github页面上可以看到Netflix全部开源项目。