这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
《游戏服务端架构·核心系统与契约》8.1 好友、黑名单与关系一致性
《裂隙战场》《群岛纪元》《泡泡工坊》对好友、关注和黑名单的需求并不相同。本节把关系链还原为有向边加不变量,比较双写事务、异步回写和读时合成三种方案,说明 A 加 B 时另一侧如何更新、失败时能否不对称,并给出可运行的有向关系存储与账号删除清理边界。
posts
这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
《裂隙战场》《群岛纪元》《泡泡工坊》对好友、关注和黑名单的需求并不相同。本节把关系链还原为有向边加不变量,比较双写事务、异步回写和读时合成三种方案,说明 A 加 B 时另一侧如何更新、失败时能否不对称,并给出可运行的有向关系存储与账号删除清理边界。
从 arch-lab 订单系统一次错误率告警查不到数据的事故切入,说明日志、指标与追踪为什么需要同一套属性 schema,给出按名字、类型、基数与敏感度校验语义约定的 Go 实现,并用 4 条事件和 8 类违规跑出本机可复现的拒绝率与稳定排序。
「回声」把可用性写进合同后,团队仍靠感觉判断能不能发布。本节把 SLI、SLO 与错误预算拆成可计算的承诺,给出成功率、错误预算与燃烧率的纯函数实现和测试,并复盘一次月底冲刺烧完错误预算却照常上线、最终触发真实客户赔付与合同口径争议的完整故障。
插件沙箱的目标不是让插件跑不起来,而是让它在越权时被拒绝、在崩溃时被隔离。本节从一次插件读取全盘文件、拖垮首页的事故出发,给出权限、作用域与配额的三层模型,用可运行的 TypeScript 模块实现最小授权审计、失败隔离与熔断,并说明每个阈值为什么必须按插件配置。
「回声」的月度计算账单多出 12 万元,成本看板却只有一个总额,六个星期没人说清是哪条链路。本节把闲置回收拆成证据、负责人和护栏三个条件,让预算成为上线前的布尔判断,给出预算准入与回收金额的 Go 实现和测试,并复盘一次只报总额、回收脚本误删季度任务的事故。
「回声」把 1 TB 存储和 1 TB 带宽当成同一个成本项,直到冷归档的取回费超过省下的存储费。本节拆开存量与流量两种计费方式,给出热、温、冷分层与带宽单价的 Go 实现和测试,并把存储费、取回费、请求费与回源费放进同一次回放,复盘缓存键带时间戳导致回源翻三倍的事故。
「回声」的月度云账单涨到 86 万元(案例假设值)时,团队才发现“每单成本”可以有四个分母。本节把单位经济模型拆成成本聚合与分母校验两步,给出以整数分为单位的 Go 实现和测试,并复盘一次用支付订单数当分母、把免费流量成本摊进付费订单导致的定价误判。
把十八亿行订单从单库迁到三十二分片集群时,「回声」团队用双读比对兜底,却在回填中途改了分片数、没有版本化路由,导致新旧集群各按一套规则分布,双读回退把错误全部掩盖。本节拆解迁移五个阶段的准入条件,并给出批次区间规划与覆盖校验的 Go 实现和测试。
从扩容时客户端仍按旧元数据把订单写进旧分片的具体故障出发,说明路由版本传播、陈旧路由失效与重试收敛,给出带版本保护和权威解析的 Go 路由实现,并用 1000 万请求窗口实测错误预算、解析失败率与熔断阈值之间的数量关系,附可复现测试输出与扩容决策表。
订单历史涨到十八亿行后,「回声」把三十天前的数据一律搬到对象存储,结果客服查询四十五天前的争议订单要等八秒,归档任务还因为先删后验丢过一批记录。本节说明冷热判据为什么必须同时看访问频率与合规保留期,并给出带闭区间边界和非法策略校验的 Go 实现与测试。
「回声」的订单表涨到三亿行后,团队在 user_id、order_id 与商户维度之间反复摇摆。本节把分片键选择拆成查询命中率、热点风险与扩容成本三个判断,给出稳定路由函数与键校验的实现和测试,并复盘一次分片数从 16 改到 32 却未版本化路由、导致历史订单全部读错片的故障。
从订单迁移时“先停写再搬数据”的错误直觉出发,把再平衡拆成快照、双写、回填、校验、切换五个阶段,给出可重入的 Go 迁移状态机与版本条件写入,并用 100 个订单键实测迁移中断后的续跑、双写不丢更新、回填未完成时拒绝切换,以及回滚后写回源分片的完整路径,附原始测试输出与阶段判据。
从一个大促当天误开降级开关、导致全站无法下单的事故写起,说明降级为什么必须分档、每一档牺牲什么;给出按利用率选择 normal、soft、hard、reject 四档的 Go 实现、边界测试与真实运行输出,并讨论降级与排队如何配合保护后端。
从一场提前排期却仍然打垮系统的直播带货写起,说明弹性扩容的瓶颈不是决策而是冷启动,预热必须按分钟计算;给出容量测算与每分钟预热比例的 Go 实现、参数校验测试和真实运行输出,并讨论扩容速度跟不上时提前决策的边界,以及预留实例的成本取舍和依赖初始化风暴。
从订单按 order_id 还是 user_id 分片的具体取舍出发,说明分片键的业务约束与热点识别,给出带虚拟节点的一致性哈希 Go 实现,并用 10 万个订单键实测分布均匀性、虚拟节点降偏斜与 4→5 扩容的迁移比例,附可复现命令、原始输出与扩容判据。
从一个整点开抢的闪购活动写起,拆解热点流量突发、可预测、来源集中这三个特征,说明为什么单点阈值会被日常波动误触发;给出基线加 Z 分数的 Go 实现、严格大于阈值的边界测试与真实运行输出,并讨论样本窗口、常量基线、基线污染和告警分级的取舍。
插件化不是把代码拆出去,而是先定义宿主与插件的契约边界。本节从三个宿主版本同时在线、插件清单失控的现场出发,给出插件 id、版本、宿主 API 区间与能力声明的校验模型,用可运行的 TypeScript 模块完成协议校验、兼容判定与责任划分,并说明哪些关注点必须留在宿主。
「回声」的智能回复超时后,前端自动重试三次,把一次故障拖成半小时;同一时刻审核调用也超时,发布按钮却仍然可点。本节把 AI 能力按可缺、可弱、必须阻塞分级,明确每种信号下的动作与用户文案,并用可运行的 TypeScript 把策略校验和批量编排固定下来。
五份架构决策记录模板覆盖技术选型、事件契约、一致性、迁移与治理场景,每份含背景、选项对比、结论与验证条件。本文提供五份架构决策记录模板,覆盖技术选型、事件契约、一致性、迁移与治理五大场景。附纯 JDK 实现的 ADR 完整性校验器与状态转换验证器,确保决策在代码变更前落盘并形成可追溯的决策历史记录链。
六十条事件驱动领域术语,覆盖事件基础、Kafka 生态、一致性模型、流处理与治理五个维度,附中英对照、一句话定义与易混词辨析,可作为设计评审的共同语言参考与快速查阅手册及团队培训材料,覆盖事件驱动系统设计与评审的全链路共同语言需求。