Twitter时常会因为某个热点事件导致系统压力突增,例如前两年日本的“天空之城”事件使Twitter创造了新的发推记录,之前是每秒1万条左右,因为这个事件,突然达到了每秒3.4万条,而Twitter的系统并没有受到多大影响,顺利支撑住了


Twitter的技术副总曾在InfoQ的访谈中聊过他们的做法,我个人对其内容的总结主要有两点,一是预演,二是预案


Twitter在平时会对系统做大量的压力测试,对产品功能做极端测试,模拟各种意外情况,并分析各个情况及相应的处理方法,形成预案,以备快速处理突发状况


压力测试


能够从容的面对突发压力,是因为背后长期的准备工作,经常对整个系统进行压力测试


每月都会跑一遍压力测试,并分析每个系统的状况


每周检查整体性能指标,和每个服务的性能指标,清晰了解当前的处理能力


讨论分析系统是否处于高效运行状态、当前服务器数量是否足以支撑预期的产品状态、是否需要买更多的机器 ……


例如发现某个服务不正常,处理的请求数明显低于其他服务,就要对其进行仔细检查,看他是否正常、是否需要对其进行调整 ……


像“天空之城”事件带来的压力,之前是没有实际经验的,但压力测试早已把系统推向了那个高度,所以,当它发生时,只是一次真实的验证


极端测试


对产品不断的进行各种极端情况的测试,来了解产品的实际反应


还会进行故障模拟,随机的杀掉数据中心里的一些机器,并要求保证服务正常


形成预案


在平时的大量测试工作中总结积累各种问题及其处理方案


每个系统都必须整理出他的运行条件是什么、哪些情况会导致他的崩溃……,用作紧急情况下的指导文档


虽然不可能想到所有的情况,但至少会列出测试中发现的那些问题,并指明如何处理


还有一个巨大的玻璃墙,上面记录着关键信息,在问题发生时能够帮助进行快速决策



提前做好准备、想好出现问题时如何处理,是保证稳定性的重要思路