Twitter 是如何为硬件故障做准备的
在理想的情况下,Twitter 的基础设施与运营总监马兹达克·哈希米(Mazdak Hashemi)可以走到公司的数据中心,然后拔掉其中一台服务器的电源线,这时公司的服务也不会受到影响。虽然他现在还不会这么做,但是他和他的团队一直在研究如何在 Twitter 内部模拟类似的故障,同时确保服务能够维持正常运行。
“在如此大的服务规模之下,我们的基础设施有可能会出现各种各样的问题,我们随时都可能出现断电、机架故障、配置不当或者网络故障。”哈希米说道,“所以我们开始思考,除了面对突如其来的故障以外,检测故障的最佳方式是什么。”
他的工程团队基本上设计了一系列的测试,他们会以可控的方式向系统注入故障,模拟上面提到的情况。这样做的目的是确保所有工作人员可以为各种意外故障做好准备,比如服务器宕机,或者电源线意外脱落导致整个服务器节点离线。
Twitter 会在服务中注入一些小型的故障,测试运行系统和基础设施的反应。它会监控 Twitter 服务的系统健康状况,确保不会有全站规模的故障发生,然后回滚之前注入的故障状态。在整个测试过程当中,这支团队还可以使用一系列的工具来了解系统的情况。他们希望可以监控服务器集群出现断电,或者在写入新配置的时候出现断网的问题。
以上都是 Twitter 内部应急工具的一部分,确保 Twitter 在任何情况之下都不会束手无策。“失败鲸”(Fail Whale)曾经是 Twitter 网站上的常驻吉祥物,不过现在 Twitter 正不遗余力地避免这条鲸鱼再次出现。
最终这个工具有望会被开源,这样就可以让开发者社区找到更多的使用方式,甚至对它进行改进。“Twitter 与其他公司的区别在于——我们的所有东西都是实时的。”哈希米说道,“我们不会说‘你去准备黑色星期五,你去准备超级碗。’其他人想到某些日子将要来临的时候就会做准备,但是对我们来说,每一天都可以是黑色星期五,每一天都可以是超级碗。我们的网站是充满不确定性的,世界这么大,什么事情都有可能发生。”
这些测试的意义当然不止如此。如果仅仅是为了测试的话,他们随时都可以拔掉 服务器的网线来测试服务能否继续运行。这些测试的目标是为了确保每个团队都能准备好应对任何级别的真正事故。
“我希望终有一天可以在数据中心里随便拔掉一条电线,然后看看会发生什么事情。”哈希米说道,“我今天会这么做吗?也许不会,不过我现在还不想这么做。我对部分情况还是比较放心的,但是如果故障的层级越高,它所造成的影响也会越大。我们团队的终极考验是,当我们在数据中心随意拔掉各种线缆的时候,系统能否保持安然无恙。”
题图来自:Bryce Durbin
翻译:关嘉伟( @consideRay)