Twitter时常会因为某个热点事件导致系统压力突增,例如前两年日本的“天空之城”事件使Twitter创造了新的发推记录,之前是每秒1万条左右,因为这个事件,突然达到了每秒3.4万条,而Twitter的系统并没有受到多大影响,顺利支撑住了
Twitter的技术副总曾在InfoQ的访谈中聊过他们的做法,我个人对其内容的总结主要有两点,一是预演,二是预案
Twitter在平时会对系统做大量的压力测试,对产品功能做极端测试,模拟各种意外情况,并分析各个情况及相应的处理方法,形成预案,以备快速处理突发状况
压力测试
能够从容的面对突发压力,是因为背后长期的准备工作,经常对整个系统进行压力测试
每月都会跑一遍压力测试,并分析每个系统的状况
每周检查整体性能指标,和每个服务的性能指标,清晰了解当前的处理能力
讨论分析系统是否处于高效运行状态、当前服务器数量是否足以支撑预期的产品状态、是否需要买更多的机器 ……
例如发现某个服务不正常,处理的请求数明显低于其他服务,就要对其进行仔细检查,看他是否正常、是否需要对其进行调整 ……
像“天空之城”事件带来的压力,之前是没有实际经验的,但压力测试早已把系统推向了那个高度,所以,当它发生时,只是一次真实的验证
极端测试
对产品不断的进行各种极端情况的测试,来了解产品的实际反应
还会进行故障模拟,随机的杀掉数据中心里的一些机器,并要求保证服务正常
形成预案
在平时的大量测试工作中总结积累各种问题及其处理方案
每个系统都必须整理出他的运行条件是什么、哪些情况会导致他的崩溃……,用作紧急情况下的指导文档
虽然不可能想到所有的情况,但至少会列出测试中发现的那些问题,并指明如何处理
还有一个巨大的玻璃墙,上面记录着关键信息,在问题发生时能够帮助进行快速决策
提前做好准备、想好出现问题时如何处理,是保证稳定性的重要思路