本文推荐的是 Netflix 工程博客的一次分享,他们解决的问题几乎每个互联网公司都要遇到,他们提出的解决方法是一个很有趣的角度。这个角度不仅仅在对服务器即使的稳定性、可用性、性能的演练上可用,还在产品设计以及经营上可以考虑,一种反脆弱的方法。
在 2011 年,Netflix 转向使用 AWS 云服务之后,他们一直在关注研究如何提高 Netflix 可用性和可靠性的方法。如今的 Netflix 占北美互联网流量的 1/3 以上,而他们之所以做到在如此大的流量下的稳定和可用,靠的就是一群猴子军团的方法。
AWS 云服务是冗余和容错的。因为没有一个单独的组件可以保证100% 的正常运行时间(甚至最昂贵的硬件最终也会失败) ,所以必须设计一个架构,其中单个组件可以失败,而不影响整个系统的可用性。必须比最薄弱的环节更强大。但仅仅设计一个容错体系架构是不够的。必须不断地测试是否有能力在这些“千载难逢”的失败中存活下来。
想象一下爆胎的情景。
- 即使你的后备箱里有一个备用轮胎,你知道它充气了吗?
- 你有换胎、打气的工具吗?
- 而且,最重要的是,你还记得如何正确地换胎吗?
那么最好的方法是什么?
- 确保你能够在高速公路上,在雨中,在午夜处理爆胎的一个方法是;
- 每周一个星期天的下午在你的轮胎上戳一个洞,然后进行更换轮胎的操作。
- 这在现实世界中是昂贵和耗时的,但是在云服务中可以(几乎)免费和自动化。
这里发生最有趣的事情之一是 Netflix 经常攻击自己的系统。他们有一个叫做 Chaos Monkey 的工具,可以随机地禁用他们自己的生产实例,以确保他们能够在没有任何客户影响的情况下生存下来,这就是 Netflix 构建 Chaos Monkey 时的哲学。
Chaos Monkey 的原理很简单: 通过构建一个预期故障的服务器架构,系统作为一个整体可以学习如何抵御越来越严重的障碍,即使他们不知道这些障碍在现实生活中何时或如何发生。
这个名字来源于这样一个想法,即在你的数据中心放出一只野生猴子,随机击落服务器并咬断电缆——在此期间,继续不间断地为客户服务。通过在一个工作日的中间运行 Chaos Monkey,在一个仔细监控的环境中,工程师随时准备解决任何问题,仍然可以学到关于我们系统弱点的教训,并建立自动恢复机制来处理它们。因此,下一次当一个实例在周日凌晨3点失败时,我们甚至不会注意到。
受到 Chaos Monkey 成功的启发,他们已经开始创建新的 Chaos Gorilla,这些 Chaos Gorilla 会导致各种各样的故障,或者检测异常情况,并测试在这些情况下生存的能力。一支虚拟的类人猿军队来保证 Netflix 的云安全和高可用性。
Netflix 的猴子军团
- Latency Monkey :通信层中引入人为延迟,模拟服务退化的延迟猴子
- Conformity Monkey:不符合最佳实践的例子,关闭它们,让服务所有者有机会正确地重新启动它们
- Doctor Monkey:检测不健康的实例,将它们从服务中删除
- Janitor Monkey:搜索未使用的资源并处置这些资源
- Security Monkey:Conformity Monkey 的延伸发现安全违规或漏洞,并终止违规实例
- 10–18 Monkey:国际化猴子,使用不同的语言和字符集,为区域的客户检测配置和运行问题
- Chaos Gorilla:大猩猩,模拟了整个 AWS 可用性区域的中断
推荐
