A Decade of Major Cache Incidents at Twitter
核心观点
与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