事故复盘

出过的问题,一件都不藏

影响面超过 1% 用户的事故,我们在 48 小时内发布署名复盘。影响面写具体百分比——写「部分用户」等于没写,而且你看得出来我们在遮掩。

下面三条是占位样例,不是真实发生过的事故。 它们写成这个样子是为了说明我们打算怎么复盘——影响面写具体百分比、时间线到分钟、根因和改动都署名。真实事故发生后会替换掉它们,并去掉「样例」角标。我们不打算把这一页做成空的:一个从不出事的复盘页只说明它没在记录。

样例2026-07-19 14:22 CST持续 47 分钟影响面 3.1%负责 网关与计量

前沿推理组首 token 延迟升高,部分请求触发灾备

前沿推理

一家上游供应商的响应延迟从中位 1.2 秒升到 9 秒以上,超过了我们首 token 超时阈值的一半。灾备按预期把请求转到了同能力组的备用模型,没有请求失败,但受影响用户感知到明显变慢。

时间线

  1. 14:22探测发现 frontier-a 首 token 延迟超过基线三倍,自动降权。
  2. 14:31延迟继续上升,熔断触发,流量全部转向 frontier-b。
  3. 14:38frontier-b 并发接近上限,排队延迟出现。人工介入,临时放开跨供应商配额。
  4. 15:09上游恢复,逐步回切并观察 20 分钟后确认稳定。

根因

我们对单个供应商的容量估计过于乐观,frontier-b 的储备并发只按日常峰值的 1.3 倍配置,不足以在另一家完全不可用时独立承载。熔断本身工作正常,问题出在储备容量不够。

我们改了什么

  • 前沿推理组的储备并发从日常峰值的 1.3 倍提高到 2.5 倍,并纳入容量预测的告警口径。
  • 熔断阈值从「超时」细化为「延迟超过基线 3 倍持续 60 秒」,提前约 9 分钟触发。
  • 受影响时段内所有走了灾备的请求已按原能力组计费,差价由我们承担,无需申请。
样例2026-05-30 03:10 CST持续 132 分钟影响面 1.4%负责 网关与计量

用量明细延迟入库,控制台数字滞后约两小时

用量事件的异步落库任务积压,控制台显示的已用额度低于真实值。配额扣减本身没有受影响——Redis 侧的计数是准的,限流按真实用量执行。受影响的只是明细展示。

时间线

  1. 03:10落库队列积压告警触发。
  2. 03:52定位到一条缺失索引的查询拖慢了批量写入。
  3. 05:22补建索引,积压清空,对账确认无数据丢失。

根因

新增的按项目筛选功能引入了一条没有覆盖索引的查询,在月末数据量下退化成全表扫描,和落库任务抢锁。

我们改了什么

  • 补齐索引,并在 CI 里加了慢查询回归检查。
  • 落库积压超过 5 分钟时,控制台顶部直接显示「数据延迟中」,不再让用户看到一个安静的错数字。
样例2026-04-02 11:05 CST持续 26 分钟影响面 0.6%负责 支持与合规

地域过滤误判,部分境内用户被错误拦截

国产旗舰

一次地域规则更新把一批本应可用的境内模型误判为不可用,受影响用户在选择模型时看到置灰。没有产生错误计费,也没有反向问题(即不存在应拦未拦的情况)。

时间线

  1. 11:05规则发布。
  2. 11:18用户工单反馈模型不可选,值班确认为误判。
  3. 11:31回滚规则,恢复正常。

根因

备案状态字段的默认值写成了「未备案」而不是「保持不变」,导致这次更新里没有显式声明的模型被一并标记为不可用。

我们改了什么

  • 该字段改为必填,没有显式值的更新直接拒绝发布。
  • 地域规则发布前增加一步 diff 预览,列出本次将改变可用性的模型清单。

正式上线后这一页由真实事件驱动。