《游戏服务端架构·核心系统与契约》12.3 平台 SLA 与产品团队的契约
平台与产品团队真正会争吵的是事故之后:99.9% 的可用性按哪条链路算,平台发版造成的失败算谁的预算,延迟 SLA 的分母要不要包含失败请求。本文把可用性、延迟、吞吐与恢复时间拆成可计算条款,给出错误预算、燃烧率与违约判定的 Go 实现,并说明变更通知、灰度窗口和回滚承诺怎么写进契约。
tag
平台与产品团队真正会争吵的是事故之后:99.9% 的可用性按哪条链路算,平台发版造成的失败算谁的预算,延迟 SLA 的分母要不要包含失败请求。本文把可用性、延迟、吞吐与恢复时间拆成可计算条款,给出错误预算、燃烧率与违约判定的 Go 实现,并说明变更通知、灰度窗口和回滚承诺怎么写进契约。
北辰三款产品共用 northstar-platform 后,最先吵起来的不是技术选型,而是边界:哪些能力该收进平台、平台交付的是能力还是数据、玩法规则能不能顺手放进去。本文用复用度、合规、故障影响面和团队归属四条判据划边界,并给出能力注册表与依赖方向校验的可运行实现,解释平台为什么会退化成第二个游戏服。
《泡泡工坊》一名未成年人用家长账号充值后,家长要求退款;同一时间实名服务超时,三款游戏各自判断,出现了“这个服能玩、那个服不能玩”。本节区分合规判定与执行,说明实名年龄带、可玩时段、单笔与月度限额的输入与可信度,给出数据最小化、留存与删除传导的边界,并附可运行的 Go 判定服务片段。
《群岛纪元》一名玩家被渠道强制退款时,游戏内金币早已转给其他角色;财务对账又发现三笔渠道已扣款、内部却没有订单。本节说明退款状态机、资产回收顺序、渠道账单与内部订单的匹配键,给出漏单、重复、金额不符、状态不同步的分类与冲正/复核/挂账边界,并附可运行的 Go 对账分类片段。
《泡泡工坊》上线首日,支付渠道重复回调让同一笔 6 元订单发了两次货,客服只能按截图手工补单。本节拆解下单、回调、验签、发货与通知的状态机,比较同步发货和先记账后异步发货,说明订单号与渠道单号的绑定、事件去重与发货重试的边界,并给出可运行的 Go 回调处理与幂等发货片段。
一键领取看似只是循环调用单封领取,真正的问题是部分成功如何表达、失败要不要回滚、补偿怎样避免重复,以及红点计数怎样和邮件列表保持一致。《裂隙战场》的赛季结算、《群岛纪元》的全服补偿、《泡泡工坊》的日常奖励,都需要同一套批量语义。本节给出批量领取结果模型、补偿幂等键与审计日志,以及由同一份列表派生的红点聚合。
邮件正文可以永久可读,附件却是有归属、有期限的资产。《裂隙战场》的赛季奖励、《群岛纪元》的联盟补给、《泡泡工坊》的限时礼包,都要回答领取是否原子、过期后归谁、背包满时怎么办。本节给出附件状态机、过期扫描与宽限期、三种结算策略,并附可运行的领取幂等与流拍结算代码。
榜单是读多写少的典型:整榜、分页和“我的排名”会被反复刷新。本节比较整榜缓存、分页缓存和个人名次缓存的收益与失效成本,讨论缓存版本落后时玩家看到的名次偏差,给出热点榜的降级、有界缓存与惊群处理策略,并实现一个带版本失效、过期兜底和统计计数的读模型。
《裂隙战场》《群岛纪元》《泡泡工坊》的榜单需求并不相同。本节把榜单拆成受众、分区、分段和同分排序四个维度,比较有序集合、最大堆与分桶计数的更新成本,说明只展示 Top N 时如何保留精确名次,并给出一个带分段策略、确定性排序和输入校验的可运行榜单模型。
《裂隙战场》《群岛纪元》《泡泡工坊》的聊天频道在扇出、隔离和治理上完全不同。本节比较世界、战区、公会与私聊四种频道的路由边界,说明令牌桶、跨频道去重和全局桶如何拦住刷屏,并讨论发送前、发送后与异步复核三种审核位置及误封申诉,附可运行的频道路由与审核钩子实现。
《群岛纪元》的公会仓库要同时面对会长、官员、成员三种角色,以及多人同时取物、权限变更和解散清算。本节把角色还原为权限位,比较硬编码角色、权限位和策略引擎三种方案,给出 Begin/Commit 票券式并发契约与可运行的仓库事务实现,并讨论解散和合并时资产如何不丢不重。
《裂隙战场》《群岛纪元》《泡泡工坊》对好友、关注和黑名单的需求并不相同。本节把关系链还原为有向边加不变量,比较双写事务、异步回写和读时合成三种方案,说明 A 加 B 时另一侧如何更新、失败时能否不对称,并给出可运行的有向关系存储与账号删除清理边界。
《群岛纪元》全球同服后,每日重置到底按 UTC、服务器时区还是玩家本地时区切,直接决定公平性与运营成本。本节比较三种口径,讨论重置窗口键、错过补做、崩溃重试的幂等,以及赛季切换时归档、结算和未领取奖励的兜底,并给出可运行的 dailyreset 包。
《群岛纪元》的击杀任务、《泡泡工坊》的点击任务和《裂隙战场》的结算任务,对进度可信度的要求并不相同。本节对比客户端上报与服务端订阅两种模型,讨论事件去重键、任务链前置、门控回填与并发完成幂等,并给出可运行的 questprogress 包与边界。
《裂隙战场》《群岛纪元》《泡泡工坊》都要回答属性从哪里来、按什么顺序合成、哪些成长迁移必须拒绝。本节把基础、装备、buff、赛季四层拆开,讨论整数化合成、快照指纹、实时与懒计算的分界,并给出带非法迁移测试的 growthfsm 可运行包与边界。
《群岛纪元》的工作室用脚本刷矿、在交易所拉价,等运营发现时银币已经扩散。本节把经济风控拆成来源暴增、价格异常、集中转移三类可观测信号,说明价格指数的用途与局限、处置阶梯和误伤申诉,并给出基于滑动窗口、可完整运行的 Go 告警包与阈值标定口径。
《群岛纪元》的玩家交易曾出现扣了银币却没收到物品、掉线后双方各持一份货的情况。本节把交易拆成锁定、校验、交换、解冻四个状态,说明冻结余额与可用余额的区别、重复提交和并发冲突的处理、跨服托管的边界,并给出可运行的 Go 托管状态机与失败模式兜底。
《群岛纪元》一次活动配置把奖励放大十倍,团队却只能看到余额异常,查不出是哪条产出路径、发给了谁、是否已流入玩家交易。本节结合三款产品的货币分层,比较单表余额、双分录账本与事件溯源,说明来源标签、对账频率和差异处置,并给出可运行的 Go 双分录账本与失败模式。
客服申诉、作弊复核和经济异常,最终都要落到同一份战斗日志上。本节对比原始输入、裁决事件和结果摘要三层日志的体积与保留期,分析“重演模拟”和“重读记录”两种回放路线的成本、可信度与适用场景,并给出哈希链校验、回放摘要比对和按操作者查询的可运行代码。
《裂隙战场》的 30 Hz 对抗、《群岛纪元》的异步战报和《泡泡工坊》的轻量对局,对战斗进程的要求完全不同。本节用 tick 预算、战斗时长、回放要求和团队运维能力四组约束,对比房间内计算、独立战斗服与托管算力三种模型的延迟、成本与故障域,并给出崩溃恢复语义和可运行的选型函数。