莎士比亚新询文事故总结(事故编号 #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 故障结束

其他支持信息