cat case/PM-2016-0050.md

GitHub 2016-01-28 主数据中心电力中断+发电机切换失败,服务中断数小时

P1 · GitHub Web/API/Git 操作多次中断,部分 webhook 投递丢失

summary

2016-01-28,GitHub 主数据中心因公用事业公司进行电力维护导致市电中断,随后现场发电机未能按预期接管,造成该数据中心短时间掉电。受此影响,GitHub 的数据库主节点(MySQL)及一系列核心服务在故障切换与恢复过程中多次中断,部分 webhook 投递在故障窗口内丢失。

timeline

电力维护触发市电中断,发电机切换出现延迟/失败,数据中心短暂掉电。GitHub 将流量切到次级设施并恢复数据库主节点,过程中 Web/API/Git 多次抖动。团队随后进行数据一致性检查与 webhook 补偿,整体恢复历时数小时。

root_cause

外部电力维护叠加现场发电/切换机制未能无缝接管,导致主数据中心掉电;数据库主节点故障切换与恢复流程在压力下暴露出可靠性问题。

amplifiers

① 单数据中心强依赖:主设施掉电即影响全局。② 发电/切换冗余不足:市电中断后未能瞬时接管。③ 故障切换链路复杂:数据库主节点恢复拖慢整体。④ 部分异步投递(webhook)在窗口内丢失。

mitigation

将流量与核心服务切换到可用设施;恢复数据库主节点并做一致性校验;对丢失的 webhook 做补偿。GitHub 后续强化多数据中心能力与发电流程。

lessons

核心服务应跨可用区/数据中心部署;发电与切换需定期演练;数据库主节点故障切换应自动化且快速;异步投递需有持久队列与重放。

checklist

① 关键设施实现多活/跨区冗余。② 定期演练发电与切换。③ 数据库主节点自动化 failover。④ webhook 等异步任务持久化+可重放。