《游戏服务端架构·核心系统与契约》附录 C 核心系统故障模式清单

把卷二十三个核心系统常见的失败模式收进一张可查的表:症状、触发条件、影响面、可探测性、兜底动作与责任方,并给出跨系统故障链、最小可观测集、演练方法与一页纸复盘模板,清单可直接用于评审、事故复盘与演练设计,每条给出责任方与兜底动作,并附一页纸复盘模板。

这份清单怎么用

卷二每一章都给了单个系统的失败模式。真正出事时,问题很少只停在一个系统里:登录超时会触发重试,重试会放大网关压力,网关摘除节点又会让房间分配失败,最后表现为“玩家进不去游戏”。

这份附录做三件事:

  1. 统一失败模式的描述格式,避免“偶发”“不稳定”这类无法行动的措辞;
  2. 按系统列出高频失败模式,给出可探测信号与兜底动作;
  3. 给出跨系统故障链和最小可观测集,供评审与演练直接使用。

清单不是事故预案的全部。预案还需要联系人、升级路径和对外话术,那些属于运维与组织流程,不在本书范围内。

一、统一的描述格式

每个失败模式至少写清六件事:

字段要回答的问题
症状玩家或监控看到什么,不要写内部实现
触发什么条件下出现,是流量、数据还是依赖故障
影响面单玩家、单房间、单分片、单游戏还是全平台
可探测性多快能发现,靠指标、日志还是客诉
兜底自动恢复、降级、人工介入分别做什么
责任方哪个系统拥有处置权,谁负责复盘

不合格写法:“偶发登录失败,重试即可。”它没有说明触发条件、影响面和责任方,也无法判断重试会不会放大故障。

二、按系统的失败模式

2.1 账号与身份

失败模式触发影响面可探测信号兜底
重复建号渠道回调重复、并发绑定单玩家出现两个角色同设备短时间多个账号绑定幂等键、合并流程
绑定冲突同一外部身份绑到两个内部账号单玩家无法登录绑定失败率上升拒绝并进入人工复核
注销不彻底删除请求只删了主表合规风险、残留数据定期数据审计删除任务编排 + 对账
风控误伤阈值过严、设备指纹漂移一批正常玩家被挑战挑战率、失败率突增灰度阈值、白名单、申诉

2.2 登录与网关

失败模式触发影响面可探测信号兜底
票据雪崩票据服务不可用,客户端集中重试全游戏登录失败登录成功率、重试 QPS本地验签、限流、排队
续期风暴大量会话同时到期网关与账号服务过载续期 QPS 尖峰过期时间打散、退避
连接归属漂移网关崩溃、归属表未及时清理部分玩家反复掉线重连率、归属不一致数租约 + 定期对账
排队正反馈超时太短,客户端立即重试队列越排越长放弃率、重试率同升退避、排队票据、拒绝语义

2.3 匹配与房间

失败模式触发影响面可探测信号兜底
匹配饥饿分段过严、冷门模式人少少数玩家长期匹配不到等待时长 P99窗口逐步放宽、机器人兜底
幽灵房间进程崩溃、租约未续资源泄漏、匹配到空房活跃房间数与心跳不一致租约过期回收、对账扫描
重复创建客户端重试、调度器超时同一局多个房间同局 ID 多实例创建幂等键、唯一约束
实例碎片规格不一、回收不及时有空闲资源却开不了房可分配率下降装箱策略、定期整理

2.4 场景与世界

失败模式触发影响面可探测信号兜底
AOI 消息放大玩家聚集、视野半径过大单场景带宽打满出站字节、单格人数降频、聚合、分线
分线抖动阈值贴着实测容量玩家频繁切换分线分线切换次数滞回区间、手动锁定
广播风暴全服事件同时下发所有网关出口拥塞广播队列积压分级广播、分区订阅
跨线写入迁移时旧实例仍可写状态错乱、回档双写检测、版本冲突epoch/fencing、拒绝旧写入

2.5 战斗与结算

失败模式触发影响面可探测信号兜底
重复发奖回调重试、结算任务重跑经济通胀、玩家不公平同 battle_id 多条结算幂等键 + 唯一约束
结算丢失房间崩溃、消息丢失玩家未收到奖励结算单与对局数不一致对账补算、客服补偿
战斗服过载开房突增、单房 tick 超时单局卡顿或判负tick P99、房间排队暖池、限流、降级 tick
回放不可信日志缺字段、版本不一致申诉无法裁定回放校验失败率记录裁决事件、版本化

2.6 经济与交易

失败模式触发影响面可探测信号兜底
余额分叉多处直接改余额单玩家资产错误双分录不平衡单一账本、越权检测
交易双花并发提交、冻结不彻底双方资产错误同一道具多次易手托管状态机、锁与版本号
产出失控活动配置错误、刷取漏洞全服通胀来源标签突增、价格指数限额、回滚、冻结核查
对账缺口异步落账失败账实不符日终差异条数补偿任务、人工挂账

2.7 成长与任务

失败模式触发影响面可探测信号兜底
进度重复累加事件重复投递单玩家任务异常完成同事件多条进度去重键、幂等累加
重置漏做调度失败、时区错误一批玩家日常未刷新重置任务成功率补做窗口、幂等执行
属性计算漂移加成顺序不一致战斗结果异常同配置属性不一致单一计算入口、快照校验
赛季切换错位旧榜未冻结、奖励重复排名与奖励错乱赛季边界告警截止快照、幂等结算

2.8 社交与公会

失败模式触发影响面可探测信号兜底
关系不对称单边写入失败单对玩家好友状态异常双向校验差异补偿任务、定期修复
权限越权缓存了旧角色公会仓库资产风险越权拒绝日志权限版本号、即时失效
仓库并发多人同时取物公会资产错误库存负值、冲突数事务 + 版本号
聊天刷屏绕开单频道限速单频道体验受损消息速率、重复率全局配额、审核钩子

2.9 排行榜与赛季

失败模式触发影响面可探测信号兜底
榜单延迟写缓冲积压玩家看到的排名滞后缓冲队列长度降级直写、提示延迟
同分错序规则未定义边界玩家奖励争议同分名次抖动明确次级排序键
赛季重复结算任务重跑重复发奖同赛季多份结算赛季幂等键
缓存脏读失效失败单玩家名次错误缓存与源数据差异TTL + 主动失效

2.10 邮件与奖励

失败模式触发影响面可探测信号兜底
重复投递上游重试玩家收到多封邮件去重键冲突数幂等键、批次号
附件重复领取并发点击资产翻倍同邮件多次领取领取状态机、唯一约束
过期误删时区/宽限期错误玩家资产损失过期量与客诉宽限期、到期转补发
补偿风暴事故后全服补偿重复触发经济与邮件系统过载补偿批次激增审批、批次幂等、限速

2.11 支付与合规

失败模式触发影响面可探测信号兜底
回调伪造验签缺失资产损失验签失败日志强制验签、来源白名单
发货重复回调重试重复发货同订单多笔发货订单幂等键 + 唯一约束
漏单回调丢失玩家付费未到账渠道账单与订单差异主动对账、补单
退款不回收退款流程缺步骤资产套利退款单与资产变动不一致退款状态机、冻结优先
合规误判实名/时段规则错误玩家无法登录或超额拒绝率突增规则灰度、人工复核

2.12 平台服务

失败模式触发影响面可探测信号兜底
平台单点共用组件无冗余多款游戏同时不可用跨游戏错误率同升冗余、舱壁、降级开关
租户越权上下文丢失跨游戏数据泄露越权拒绝日志强制租户上下文、审计
平台变更破坏兼容接口升级未留窗口旧游戏无法调用调用失败率版本化、灰度、回滚
配额挤占单一游戏活动暴增其他游戏受影响分租户配额使用率配额与优先级

三、跨系统故障链

单点失败不可怕,可怕的是它沿着依赖链放大。下面几条是游戏服务端最常见的链路。

3.1 登录雪崩

票据服务变慢
  → 客户端超时重试
  → 网关连接数上涨
  → 账号服务被打满
  → 更多超时与重试

断链点在两处:客户端必须指数退避,网关必须限制单位时间的新建连接。只加机器通常追不上重试的放大速度。

3.2 重复发奖

结算任务超时
  → 调度器重跑
  → 发奖接口未做幂等
  → 同一玩家收到多份奖励
  → 经济指标异常

断链点只有一个:发奖接口的幂等键与唯一约束。下游对账只能发现,不能阻止。

3.3 补偿风暴

事故公告
  → 运营触发全服补偿
  → 邮件系统批量写入
  → 邮件库与推送过载
  → 其他系统延迟上升

断链点:补偿必须走审批与批次幂等,并且限速;不要用“再发一次”解决“可能没发到”。

3.4 赛季边界错位

赛季截止任务延迟
  → 旧榜仍在写入
  → 结算读到截止后的数据
  → 排名与奖励争议

断链点:截止时刻先冻结写入,再结算;冻结与结算都要幂等。

3.5 时区重置错误

重置任务按 UTC 执行
  → 与玩家所在时区不一致
  → 部分玩家日常提前/延后
  → 客诉与重复领取

断链点:重置窗口按产品规则显式计算,并在执行前校验时区配置。

四、最小可观测集

每个核心系统至少暴露下面六类信号,缺一项就意味着故障只能靠客诉发现。

类别例子用途
流量QPS、连接数、房间创建数判断突增与容量
延迟P50/P99/最大值,按接口分发现尾部恶化
错误分类错误码,不只看总数区分客户端错误与系统故障
饱和度队列长度、连接池占用、CPU预测即将过载
业务登录成功率、结算成功率、发货差异直接对应玩家体验
一致性对账差异、双写冲突、越权拒绝发现静默的数据错误

指标要带租户、游戏、分区维度,否则多游戏共用平台时无法判断影响面。

五、演练与复盘

5.1 演练的最小场景

不需要一上来就做混沌工程。先做三个可控实验:

  1. 依赖超时:给账号或支付接口注入固定延迟,观察重试与排队是否放大;
  2. 实例摘除:手动下线一个网关或房间节点,观察归属表与重连;
  3. 重复投递:把同一条结算或支付回调投递两次,验证幂等。

三个实验都能在测试环境完成,且能覆盖大部分高频故障。

5.2 复盘要回答的问题

  • 故障是如何被发现的?如果是客诉,说明可观测性有缺口;
  • 影响面为什么是这么大?是故障域设计问题,还是隔离失效;
  • 哪个环节本可以自动兜底,却没有;
  • 哪个契约没有被遵守,导致问题跨系统放大;
  • 下一次同类故障,系统应该有哪些不同。

复盘结论要落到具体改动:代码、配置、监控、流程,至少有一项。只写“加强监控”“提高意识”的复盘,下次还会发生。

六、常见错误

错误后果纠正
只统计错误总数无法区分客户端错误与系统故障按错误码分类
用平均值判断延迟尾部恶化被掩盖看 P99 与最大值
故障时先扩容可能放大重试与成本先限流、降级,再扩容
补偿当作兜底重复补偿制造新事故幂等 + 审批 + 批次
复盘只写现象同样问题重复出现每条结论对应改动与负责人
没有影响面口径无法判断优先级按玩家、房间、分片、游戏分级

七、一页纸模板

故障编号:INC-____
发现方式:监控 / 客诉 / 巡检        发现时间:____
影响面:____ 个玩家 / ____ 个房间 / ____ 个分片 / ____ 款游戏
直接原因:____
放大链路:____ → ____ → ____
断链点(本应生效的契约):____
临时处置:____(时间,负责人)
永久改动:____(代码 / 配置 / 监控 / 流程)
新增或修改的失败模式:____(回填本清单)
复审日期:____

清单到这里结束。它的价值不在于列全所有故障,而在于让团队在事故发生前,就把“怎么发现、影响多大、谁来兜底”写成可执行的条目,而不是等到会议上才第一次讨论。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「books」更多文章

  1. 《互联网产品的 AI 架构·平台化与治理》附录 C 平台化评审清单
  2. 《互联网产品的 AI 架构·平台化与治理》附录 B 能力目录与配额字段速查
  3. 《互联网产品的 AI 架构·平台化与治理》附录 A 治理角色与职责速查