这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
《游戏服务端架构·规模化、全球化与成本》8.2 主备、双活与故障切换
《群岛纪元》的一次主库故障让全球同服停了二十分钟,《裂隙战场》的房间服则靠重建而不是切换活了下来。本节比较主备、双活与多活的代价,拆解检测、仲裁、提升、回切四步,讨论脑裂、fencing token 与数据损失边界,并用可运行的 Go 状态机演示切换判定与旧主写入拦截。
posts
这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
《群岛纪元》的一次主库故障让全球同服停了二十分钟,《裂隙战场》的房间服则靠重建而不是切换活了下来。本节比较主备、双活与多活的代价,拆解检测、仲裁、提升、回切四步,讨论脑裂、fencing token 与数据损失边界,并用可运行的 Go 状态机演示切换判定与旧主写入拦截。
卷二《推理性能与成本工程》全目录:13 章 39 节,从延迟与吞吐的度量出发,经调度、上下文、输出、缓存、压缩替代、离线批处理、容量、归因、对照实验,走到质量联合优化、规模化稳定性与收口;附三条阅读路径、章节产出物与读完应能回答的十二个问题。
迁移的终点不是新路径上线,而是旧路径被安全删除。本节给出流量、错误、数据一致与观察期四类退出判据,把回滚资产检查、宣布结束、宽限期与旧路径删除写成状态机函数,并说明每条判据的边界与反例:指标刚好达标算不算过,回滚资产存在但过期算不算就绪,以及删除后无法回滚的代价。
前言交代卷二的结构与用法:13 章如何从度量走到优化与收口,ai-lab 的 src/perf 模块地图,三级可运行性与代码块约定,数字口径与版本边界,章间依赖与三条阅读路径,以及每章留给团队的练习和自检清单,并说明哪些结论不能直接搬到生产。
上线前按六类治理动作逐项检查:拆分与边界、契约与兼容、观测与 SLO、混沌与发布、租户与安全、平台与成本。每项给出要留下的证据、通过条件、失败后的回退动作、责任人与复核周期,并附发布类型矩阵、一页式评审表、发布后 24 小时复核与证据留存要求。
卷三附录 C:把单主复制切换、跨分片下单、重复消费、锁过期、时钟回拨、对账收敛六类场景写成可执行验证,每类给出前置条件、注入手段、观测信号、判定不变量、通过标准与回滚方式,并附上线前二十条检查、三态判定口径、演练顺序、数字口径与执行记录模板。
卷一回答了 AI 能力的边界在哪,卷二回答同样边界下怎样更便宜更快。这篇序从一次账单超支讲起,说明为什么性能与成本必须一起设计,拆解成本失控的五个放大器与三份预算,交代两卷的分工、实验工程 ai-lab 的延续方式、数字来源,以及卷二明确不承诺的事情。
《泡泡工坊》的支付订单曾被误删,《群岛纪元》的世界状态在赛季末回档过一次。本节按账号支付、玩家资产、世界状态、日志四级划分备份对象,推导 RPO 与备份频率的关系,给出恢复演练的校验项与确定性抽样方法,并用可运行的 Go 夹具演示计划评审、恢复报告判定与抽样复现。
把卷四的治理组件放到 Go 1.26 与 Java 21 两种运行时里做结构对照:配置与开关、指标与上下文、限流与并发、健康检查与优雅停机、金丝雀状态机与策略求值,说明哪些能力来自语言、哪些来自框架,并明确 Java 代码为未在本机运行的示例。
卷三附录 B:只做结构对照,不排名。覆盖 goroutine 与虚拟线程的调度和阻塞语义、CompletableFuture 与 context 的取消传播、ReentrantLock 与 sync.Mutex 的重入差异、Clock 与 time.Time 的单调时钟、ConcurrentHashMap 与 sync.Map 的适用边界,以及分布式 ID、租约、重试的库生态差异。
双写不是把同一份数据写两遍就结束,真正决定成败的是写入顺序、次写失败后的降级、双读比对口径,以及兼容窗口何时关闭。本节把顺序、差异率、窗口状态与到期决策写成纯函数,用可复现的样本回答两个问题:数据到底差多少,旧路径什么时候可以删,以及删除之前还需要哪些证据。
《群岛纪元》两个服合并,公告发出十分钟就收到重名、公会名与排行榜投诉;《泡泡工坊》小服合并后邮件附件重复、好友列表指向不存在的角色。本节列出合服的全部冲突面,给出确定性 ID 映射、分批迁移、提交门禁与回滚边界,并讨论玩家在停服窗口里应当看到什么。
把卷四 13 章的判据压缩成可查表:拆分触发条件与退出条件、契约兼容矩阵、服务发现与网关参数、配置与开关分类、SLI 与错误预算、混沌演练、发布阶段、租户隔离、平台能力与成本归因,每张表都给出阈值来源、证据要求、失败回退动作与正文对应章节,便于评审时逐项核对。
卷三附录 A:用判据、反例与业务映射三种口径整理线性一致、顺序一致、因果一致、读己之写、单调读和最终一致,说明崩溃停止、崩溃恢复、消息丢失、重复、分区与拜占庭六类故障语义,纠正 CAP 与 PACELC 的常见误读,并给出订单、库存、支付不变量到最弱一致性模型的对照表。
《裂隙战场》跨服赛的结算单重复回传,玩家领到两份奖励;《群岛纪元》的活动积分带回时被上限截断,客服说不清差额去了哪里。本节划清主服与跨服的资产边界,给出只读、冻结、带回三种归属模式,以及幂等回传、补偿队列与对账差异的处理规则,并说明补偿队列为何必须按结算单去重。
崩溃、ANR 与卡顿不是同一种数据:崩溃能在进程内捕获,ANR 只能下次启动补报,OOM 击杀只能推断,卡顿必须按帧采样。本节给出三类比率的分母口径、采集 SDK 的初始化时序与失败降级,并用可运行模型校验字段最小化与崩溃循环的分级上传策略。
《裂隙战场》跨区排位首周出现票据挂起、扩容失败与重复报名三起事故。本节把跨服报名拆成只读快照、冻结额度与有期限票据,给出赛区划分的硬软约束、票据四态机、失败补偿边界,并用可运行的 Go 夹具演示签发、锁定、消费、作废与过期扫描,解释扩容失败为何要快速失败而不是重试。
绞杀者替换的关键不是一次删掉旧代码,而是让新旧路径同时存在,并按用户、端与功能分桶逐步放量。本节把路由比例、白名单与 holdback、确定性哈希、接管进度和回退写成可测试的纯函数,让每一次请求都能解释自己为什么走新路径或旧路径,也说明如何判断迁移是否真正完成。
《泡泡工坊》一次支付回调超时,渠道扣了款、游戏侧却没发货;《群岛纪元》的跨服结算单与角色账本差了三笔。本节划出必须对账的四类异步结果,给出差异分类、补偿预算与转人工边界,并用可运行的 Go 夹具演示差异分类、批次断点续跑、单实例选主与幂等重放。
从一份永远排不上期的技术债清单出发,把债务治理拆成条目字段、严重度与影响面、偿还排期、逾期标记与季度节奏五部分,给出可运行的 TypeScript 模块与测试。文中说明优先级分数、容量约束、逾期判据与季度摘要,并解释为什么台账不能变成许愿池。