从 Twitter 运维技术经验可以学到什么
没有一个网站的性能像 Twitter 这样这么令人牵肠挂肚,看见那条大鲸鱼总是让人感觉很无奈。Twitter 的运维专家 John Adams 在 Velocity 2009 上做了一篇题为 Fixing Twitter 的技术分享(PDF),人家也是一直在努力阿。John Adams 在 2008 年七月加入的 Twitter ,对于 Twitter 的站点稳定的确做了不少工作。
Twitter 运维团队的职责:
- 软件性能(后端) Software Performance (back-end)
- 可用性 Availability
- 容量规划 Capacity Planning (metrics-driven)
- 配置管理 Configuration Management
看完这个接近 50 页的 PDF ,除了满足我们一小部分技术窥探的癖好,或许也可以学到点什么。
不重复发明轮子
对于监控,Twitter 用的就是 RRDtool,Ganglia、MRTG 这些已经成为很多网站标准配备的组件。而不是自己写一大堆功能重复的东西。值得注意的是, Twitter 也一直在用 Google Analytics 进行业务分析。
不重复发明轮子,可以打磨轮子,比进行如一些功能脚本定制之类的工作。
发明不重复的轮子
Twitter 开源了他们自己用的一个 Apache 模块 mod_memcache_block(a distributed IP blocking system),这个模块根据 HTTP 代码请求限制访问频率。熟悉 Twitter 的朋友会知道这是针对第三方应用程序的必须的一个功能,否则的话,会产生类似 DDos 的效果 :) John Adams 说这个模块是他多年以来就期待的东西,我相信,如果有人已经做了同样的事情,他们肯定不会自己再写一个。
尽可能的自动化
无论是配置管理还是针对各项功能的"开关",都尽可能的自动化。依赖于人来控制一些事情容易"规范",但是流程冗杂,节奏变慢。
更好的理解硬件
拥抱新技术体系,使用更有经济效益的硬件(比如对 8 核 CPU 的选型与更换)会带来更好的收益。而这个要建立在对硬件体系的正确理解上才行。
另外几句话要记住:
- Disk is the new Tape. (内存是新类型的磁盘. 磁盘是新类型的磁带)
- Kill long running queries before they kill you. (问题是如何提前发现? 有效的监控!)
- Use metrics to make decisions, not guesses.
- "Cache Everything!" not the best policy
或许还应该学到更多...