莎士比亚新询文事故总结(事故编号 #465)
日期
2015-10-21
作者
Jennifer、martym、agoogler
目前状态
已经终稿,待办事项正在进行中
摘要
莎士比亚搜索服务出现66分钟的故障,由于新发现了一篇韵文,导致用户流量暴涨。
事故影响
预计12.1亿个请求丢失,没有损失任何收入。
根源问题
由于异常的高负债情况以及搜索词语在 Shakespeare Corpus 中不存在时的一项资源泄露导致的连锁故障的发生,新发现的韵文使用了一个之前从未在莎士比亚文献中出现的词语。这恰恰是用户大量搜索的关键词!在日常情况下。这种资源泄露导致的任务崩溃现象,由于出现非常不频繁,而没有被注意到。
触发条件
潜伏性的Bug被大量上涨流量所触发
解决方案
将流量导向泄洪集群,同时增加了10倍容量,以应对连锁故障。部署了更新过的索引,绕过了潜在的Bug,在公共对新韵文的兴趣消退之前,保持额外的容量。资源泄露的问题已经被找到,并且修复已经上线
检测
我检测到大量的 HTTP 500的情况,向on-call发送了紧急报警
代办事项
待办事项 | 类型 | 负责人 |
---|---|---|
经验教训
做的好的地方
- 监控系统在大量错误的情况下快速发出了告警
- 在所有集群中快速更新的 Shakespeare Corpus
做的不好的地方
- 对连锁故障的处理不够熟练
- 由于这次大幅度的流量增长,几乎全部请求都失败了,导致我们超过了可用性与错误预算数个数量级。
幸运的因素
- 莎士比亚迷的邮件列表里刚好有一份新的韵文文本
- 服务日志中包括了指出文件描述符耗尽问题导致崩溃的栈跟踪
- 致死请求通过推送新的索引关键词就解决了
时间线
2015-10-21(所有时区都是UTC)
-
14:51 新闻报道新的莎士比亚韵文在一辆Delorean车的杂物箱中发现
-
14:54 事故开始,搜索后端在高负载的情况下崩溃
-
……
-
15:01 应急故障管理开始
-
……
-
15:36 故障缓解
-
……
-
16:00 故障结束