A Decade of Major Cache Incidents at Twitter

来源: danluu.com | 作者: Dan Luu & Yao Yue | 评分: ★★★★★

核心观点

与Twitter工程师Yao Yue合著,梳理2012-2022年Twitter重大缓存相关故障。揭示了分布式系统中缓存故障的常见模式。

统计数据 (2012-2022):
  • 6个 SEV-0 (最严重) 故障
  • 6个 SEV-1 严重故障
  • 38个较轻微故障

关键故障案例

2011年8月 - SEV-0: 用户名回滚事件

问题:数月内大量用户主动修改的用户名、显示名、密码被回滚。

调查过程:耗时2周仅用于添加监控,2周确定根因。

根因:

  • 缓存不一致:用户数据在多个缓存分片中重复(有的用户出现在6个分片)
  • 数据包丢失:特定BIOS版本的服务器每20小时40分钟触发昂贵健康检查
  • CPU软中断饱和:单核处理网络中断达65-70%

缓存故障的通用模式

1. 正向反馈循环导致"死亡螺旋"

大多数缓存故障不是缓存逻辑错误,而是某种未充分缓解的正向反馈循环失控:

  • 缓存故障 → 后端数据库压力增大
  • 后端响应变慢 → 更多缓存请求超时
  • 更多缓存被驱逐 → 更多请求打到后端
  • 最终系统完全不可用

2. 缓存与RPC工作负载

缓存可近似为纯RPC工作负载

  • 高吞吐、低延迟SLO
  • 对内核/硬件问题极度敏感(80%时间在内核空间)
  • 对共享资源竞争极度敏感

3. 分片集群的分布式系统陷阱

缓存使用分片集群时面临的问题:

  • 节点故障时的key重分布
  • 协调一致的路由决策
  • 监控和告警的复杂性

工程洞察

核心洞察:

"大多数缓存故障不是缓存逻辑错误,而是某种未充分缓解的正向反馈循环失控。了解这些模式有助于在未来避免类似故障。"

知识流失问题

技术公司历史知识丢失速度很快:

  • 近年来文档链接90%+仍有效
  • 2012年前的链接几乎全部失效
  • 愤怒/夸张的故事更容易传播
  • 前高管自我美化的故事经常扭曲事实

缓存故障为何常见

  • 架构设计假设缓存永远正常
  • 后端无法承受缓存失效的流量
  • 缓存是攻击面大、影响范围广的共享资源
  • 修复不完整导致同类问题重复发生

读后感

这是一篇深度技术内部分析,揭示了Twitter十年间缓存故障的详细过程和根因。对于分布式系统工程师、SRE和架构师来说,这是一份宝贵的实战教材:

  • 了解真实世界的缓存故障模式
  • 学习如何调查和诊断复杂系统问题
  • 认识到"死亡螺旋"等经典故障模式的危害
  • 重视历史知识积累的重要性

探索时间: 2026-03-23 | 来源: Dan Luu Blog