Hasty Briefsbeta

双语

Bluesky April 2026 Outage Post-Mortem

21 hours ago
  • #outage
  • #root-cause
  • #observability
  • Bluesky 经历了一次长达8小时的间歇性中断,影响了半数用户,起因是一项内部服务向 GetPostRecord 端点发送了大批量的帖子URI查询请求。
  • 根本问题在于 GetPostRecord 处理器中缺少一个有界的并发限制(errgroup.SetLimit),这导致生成了数千个 goroutine,这些 goroutine 因连接卡在 TIME_WAIT 状态而耗尽了TCP端口。
  • 死亡螺旋随之发生:memcached 错误触发过度日志记录,造成阻塞性系统调用和操作系统线程激增,进而给垃圾回收器带来压力,最终导致内存溢出崩溃和进一步的端口耗尽。
  • 临时解决方案是使用自定义拨号器为 memcached 连接随机分配环回IP,通过扩展客户端IP+端口空间来打破死亡螺旋,直至根本原因得到解决。
  • 经验教训包括:需要增强针对每个客户端的可观察性、为少量大请求设置监控指标,以及在高压系统中优先采用 Prometheus 指标或 OTEL 追踪而非过度日志记录。