本卷要解决的问题
卷四接着卷三的交接表往下问:当系统已经拆开、已经跨库、已经多活,组织靠什么让每一次变更都可预期、可回滚、可追责? 卷三把一致性机制讲到了可运行,但它留下四类未证明项:真实共识性能、跨单元冲突率、演练覆盖和组织成本。卷四不重新讲 Raft、Saga 和对账,而是处理这些机制之外的变量。
具体拆成四个问题:
- 拆到哪:什么条件下值得把模块拆成服务,拆完的边界怎么验证,拆错了怎么退;
- 怎么连:同步与异步如何组合,契约如何演进,实例上下线时流量如何找到正确的副本;
- 怎么运营:配置、开关、遥测、SLO、混沌与发布如何形成闭环,而不是各自一堆工具;
- 谁来付:多租户隔离、平台能力、成本归集如何落到团队和责任。
卷一解决“边界画在哪”,卷二解决“边界内的代价怎么付”,卷三解决“边界被跨过去之后还剩什么保证”,卷四解决“边界和保证都要持续演进时,组织怎么不被自己拖垮”。
全书结构:13 章分四段
13 章按“先定边界与通信,再建运行时治理,然后管变更与风险,最后落到组织与成本”分成四段。
| 段 | 主题块 | 章节 | 回答的问题 | 本段产出 |
|---|---|---|---|---|
| 一、边界与通信 | 拆分、契约、发现、网关 | 第 1–4 章 | 拆不拆?拆完怎么连? | 拆分评分卡、契约门禁、注册表、BFF 与级联模型 |
| 二、运行时治理 | 配置开关、可观测性、SLO | 第 5–7 章 | 运行时怎么改?怎么看见?怎么定好坏? | 配置同步、语义约定、错误预算门禁 |
| 三、变更与风险 | 混沌、发布、多租户安全 | 第 8–10 章 | 怎么验证?怎么发?怎么隔离? | 演练状态机、金丝雀控制器、租户与身份策略 |
| 四、组织与成本 | 平台工程、成本治理、综合 | 第 11–13 章 | 谁来提供能力?谁来付钱?整套怎么走? | 黄金路径、成本模型、四卷路线图 |
13 章不是 13 个工具的安装指南。每一章都往 arch-lab 里加一个可运行或可检查的治理组件;第 13 章把这些组件装进同一次拆分与发布,并用 SLO 门禁和混沌演练验收。
章节依赖图
第 1 章 拆分判据(触发条件 / 粒度 / 演练)
│
├──► 第 2 章 契约演进(同步异步 / schema / 消费者契约)
│ │
│ └──► 第 3 章 服务发现与负载均衡(注册 / P2C / 网格)
│ │
│ └──► 第 4 章 网关与 BFF(路由 / 聚合 / 级联)
│
├──► 第 5 章 配置与开关(分层 / 生命周期 / 同步)
│ │
│ └──► 第 6 章 可观测性(语义 / 采样 / 诊断)
│ │
│ └──► 第 7 章 SLO 与错误预算(SLI / 门禁 / 依赖)
│
├──► 第 8 章 混沌演练(注入 / 稳态 / 游戏日)
│ │
│ └──► 第 9 章 发布工程(制品 / 金丝雀 / 迁移)
│
├──► 第 10 章 多租户与安全(隔离 / 身份 / 审计)
│
├──► 第 11 章 平台工程(能力 / 黄金路径 / 度量)
│ │
│ └──► 第 12 章 成本治理(归因 / 容量 / 预算)
│
└──► 第 13 章 综合(两服务 / 带门禁发布 / 四卷路线图)
这张图表达阅读顺序,不是代码依赖。第 3、4 章可以和第 5、6 章互换;第 7 章最好在第 6 章之后;第 8、9 章依赖第 7 章的门禁定义;第 13 章要求前十二章的组件都已就位。
分章篇目与速览
下面按章列出全部 39 篇正文。每章先给两三句话的定位和产出,再给三节链接。
第 1 章 微服务拆分
拆分不是一个“要不要上微服务”的口号,而是一组可验证的触发条件:变更频率是否互相拖累、是否需要独立扩缩容、是否需要故障与合规隔离。本章先给判据和反例,再把粒度落到业务能力、数据所有权与变更频率,最后用订单域做一次带共享数据与回退路径的拆分演练。
产出:拆分就绪度评分卡、依赖图、两服务拆分演练。
第 2 章 通信与契约演进
拆开之后,第一道裂缝是契约。本章比较同步 RPC 与异步事件的组合,给出 schema 兼容性检查器,并用消费者驱动契约把“provider 改字段、consumer 炸掉”挡在发布之前。
产出:同步/异步决策矩阵、schema 兼容检查器、契约门禁。
第 3 章 服务发现与负载均衡
实例会上下线,网络会抖动,重试会放大。本章实现带 TTL 与健康状态的注册表、P2C 负载均衡与重试预算,再讨论服务网格的收益边界:Sidecar 与 xDS 带来统一治理,也带来配置冲突和运维成本。
产出:注册表、负载均衡器、xDS 路由冲突检查。
第 4 章 网关与 BFF
网关是流量的入口,也是故障的放大器。本章处理路由、认证与租户限流,讲 BFF 如何按端聚合与裁剪契约,最后用超时预算和连接池模型解释一次网关级联故障。
产出:边缘路由、BFF 聚合、级联故障模拟。
第 5 章 配置、开关与运行时治理
配置错误和代码错误一样能打挂系统。本章做配置分层、版本与灰度,给功能开关定义类型与生命周期,最后处理动态配置的一致性:推送与轮询的取舍、版本水位与回滚。
产出:分层配置、开关债报告、配置同步。
第 6 章 可观测性
没有统一语义的遥测数据只是三堆日志。本章先统一日志、指标与追踪的字段约定,再讨论采样与上下文传播的成本,最后用一次跨服务排障复盘把信号串成诊断路径。
产出:语义约定校验器、采样器、诊断排序。
第 7 章 SLO 与错误预算
SLO 不是给 dashboard 看的数字,而是发布与冻结的决策依据。本章定义 SLI 与窗口,计算错误预算与燃尽率,再处理多服务依赖下的预算分配,避免所有服务都“达标”而用户仍然不满。
产出:SLI 计算、预算门禁、依赖预算。
第 8 章 混沌演练
混沌不是随机杀机器。本章把故障注入分成进程、网络、依赖与区域四层,用稳态假设和爆炸半径约束实验,最后用游戏日把演练结果变成可回归的修复项。
产出:分层注入器、演练状态机、游戏日报告。
第 9 章 发布工程
发布是治理动作最密集的时刻。本章从制品摘要与不可变环境讲起,实现金丝雀状态机与自动回滚,最后处理数据库变更与发布协同的 expand-contract 顺序。
产出:制品校验、金丝雀控制器、迁移阶段检查。
第 10 章 多租户与安全边界
多租户把“隔离”从部署问题变成数据与身份问题。本章比较租户隔离级别与分区键,实现服务身份与最小权限求值,最后处理密钥轮换、审计与合规边界。
产出:租户策略、授权求值、密钥审计。
第 11 章 平台工程
平台不是一组工具的集合,而是一个有用户、有能力边界、有采纳指标的产品。本章讲平台即产品的边界、黄金路径与自助服务,以及如何度量采纳率和反悔成本。
产出:能力目录、黄金路径状态机、采纳度量。
第 12 章 成本治理
成本是架构决策的滞后指标。本章做标签归因与未分摊桶、预留/弹性/闲置的成本模型,最后把预算、评审与责任落到团队,避免“月底看账单”式治理。
产出:成本分摊、容量模型、预算规则。
第 13 章 综合演进实验
最后三节把前面的治理组件装进同一次演进:把模块化单体拆成两服务,用 SLO 门禁和混沌演练做一次发布,最后整理四卷的路线图与仍未证明的假设。
产出:两服务端到端、带门禁的发布、四卷路线图。
前置与附录
本卷共 45 篇:1 篇序、1 篇前言、1 篇目录、39 篇正文、3 篇附录。前置材料给立场与用法,附录用于查表和验收。
| 篇目 | 作用 | 什么时候读 |
|---|---|---|
| 序 | 三个治理事故、卷三交接的未证明项、四个立场 | 第一次打开本卷时 |
| 前言 | 结构、arch-lab 组件、L1–L4 分级、固定场景 G1–G3、数字口径 | 读正文前 |
| 目录 | 本篇,查章节、依赖与阅读路径 | 随时回查 |
| 附录 A 演进与治理速查 | 拆分、SLO、开关、发布、成本的判据表 | 读第 1、7、9 章时对照 |
| 附录 B Go/Java 21 治理组件对照 | 并发、配置、指标、限流与发布工具的结构对照 | 读第 3、5、6 章时对照 |
| 附录 C 上线治理检查清单 | 拆分、契约、SLO、演练、发布、成本的 24 条检查 | 第 13 章之后使用 |
三条阅读路径
路径 A:顺序通读
适合第一次系统补演进与治理、准备架构评审或平台建设的读者。按四段推进,不跳章。
| 阶段 | 章节 | 建议投入 | 读完应该能做什么 |
|---|---|---|---|
| 边界与通信 | 第 1–4 章 | 10–12 小时 | 判断该不该拆、设计契约门禁与网关边界 |
| 运行时治理 | 第 5–7 章 | 8–10 小时 | 管住配置与开关、统一遥测、定义 SLO |
| 变更与风险 | 第 8–10 章 | 8–10 小时 | 设计演练、渐进式发布与租户隔离 |
| 组织与成本 | 第 11–13 章 | 7–9 小时 | 设计平台能力、成本归因并完成综合实验 |
总计约 33–41 小时。代码量比卷三分散,建议至少跑通第 1 章的拆分演练、第 7 章的错误预算门禁和第 9 章的金丝雀状态机。
路径 B:拆分与发布驱动
适合手上正有一次“单体拆服务”或“发布经常回滚”任务的读者。
- 1.1 三个触发条件 与 1.2 拆分粒度 ;
- 1.3 订单域拆分演练 ;
- 2.2 契约版本演进 与 2.3 契约门禁 ;
- 4.3 网关失败模式 ;
- 7.2 错误预算门禁 与 9.2 金丝雀与自动回滚 ;
- 9.3 expand-contract ;
- 13.1 两服务拆分 与 13.2 带门禁的发布 。
第 1 步和第 6 步不能跳。先证明拆分收益大于分布式成本,再证明数据库变更能在旧版本仍在线时完成。
路径 C:线上治理驱动
适合已经有一堆告警、开关和账单问题的读者。先读 7.1 SLI 定义 ,统一“好坏”的口径,再查下面的症状表跳章。每跳一章,先看“常见错误与边界”。
症状到章节对照表
| 症状 | 先读 | 再读 |
|---|---|---|
| 拆完调用链暴涨、发布互相拖累 | 1.1 拆分触发条件 | 1.2 拆分粒度 |
| provider 改字段打挂 consumer | 2.2 契约版本 | 2.3 契约门禁 |
| 实例上下线导致 5xx 抖动 | 3.1 注册与健康 | 3.2 重试预算 |
| 网关一慢全站慢 | 4.3 网关失败模式 | 4.1 边缘网关 |
| 配置推错、开关没人敢关 | 5.1 配置分层 | 5.2 开关债 |
| 排障时三套系统对不上 trace | 6.1 语义约定 | 6.3 从信号到诊断 |
| SLO 都达标但用户仍抱怨 | 7.1 SLI 定义 | 7.3 依赖预算 |
| 演练不敢做、做了伤生产 | 8.1 注入层次 | 8.2 稳态与止损 |
| 金丝雀看不出问题、回滚不干净 | 9.2 金丝雀 | 9.1 不可变制品 |
| 数据库变更与代码发布互相卡 | 9.3 expand-contract | 9.2 渐进式发布 |
| 跨租户数据泄漏 | 10.1 租户隔离 | 10.2 服务身份 |
| 平台没人用、工单还是那么多 | 11.1 平台边界 | 11.2 黄金路径 |
| 账单暴涨但不知道谁用的 | 12.1 成本归因 | 12.3 成本机制 |
arch-lab 在卷四扩展了什么
卷四不改领域模型,仍在 CREATED → INVENTORY_RESERVED → PAID → FULFILLED 状态机上做文章;新增的是“运行与演进”能力,放在 internal/platform/ 与 internal/evolve/ 下。
| 组 | 新增组件 | 目录 | 首次出现 |
|---|---|---|---|
| 拆分 | 就绪度评分卡、依赖图、两服务路由 | internal/platform/split | 第 1 章 |
| 契约 | schema 兼容检查、消费者契约 | internal/platform/contract | 第 2 章 |
| 发现 | 注册表、P2C、xDS 配置检查 | internal/platform/discovery | 第 3 章 |
| 网关 | 边缘路由、BFF、级联模拟 | internal/platform/gateway | 第 4 章 |
| 配置 | 分层配置、开关、动态同步 | internal/platform/config | 第 5 章 |
| 观测 | 语义约定、采样、诊断排序 | internal/platform/obs | 第 6 章 |
| SLO | SLI 窗口、错误预算、发布门禁 | internal/platform/slo | 第 7 章 |
| 混沌 | 分层注入、演练状态机、游戏日 | internal/platform/chaos | 第 8 章 |
| 发布 | 制品校验、金丝雀、expand-contract | internal/platform/release | 第 9 章 |
| 租户 | 隔离策略、授权、密钥审计 | internal/platform/tenant | 第 10 章 |
| 平台 | 能力目录、黄金路径、采纳度量 | internal/platform/idp | 第 11 章 |
| 成本 | 归因、容量模型、预算规则 | internal/platform/cost | 第 12 章 |
| 综合 | 两服务端到端、带门禁发布、路线图 | internal/evolve | 第 13 章 |
代码仍分四级:L1 纯逻辑、L2 进程内端到端、L3 真实依赖、L4 多环境与故障注入。卷四以 L1 为主;第 1、4、7、9、13 章各有一个 L2 场景;L3/L4 只写清需要什么环境,不伪造云上实测。
数字口径:实测、目标与示例
| 类型 | 写法 | 用途 |
|---|---|---|
| 实测值 | 附命令、机器、输入规模与运行次数 | 证明某次运行的结果 |
| 目标值 | 写成 SLO 或设计约束,例如“发布回滚目标 ≤ 5 分钟” | 设计约束,不是测量结果 |
| 示例值 | 用于算式或配置形状,例如“假设每租户 100 QPS” | 说明计算过程 |
几条纪律:
- 本机 Go 测试的数字必须能由文章里的代码复现;
- SLO、RTO、成本这类数字,没有真实流量或账单时只写目标值与算式;
- 不把“行业常见做法”写成“实测最佳值”;
- 没有真正接入的云服务、网格或追踪后端,一律写“需真实环境”;
- 第 13 章的综合实验是场景验收,不等于生产容量或生产故障率。
六个常见误区
第一,把“拆服务”当成架构升级。拆分只改变边界,不自动带来自治;没有契约、观测和发布能力,拆完只是把单体的复杂度复制成网络复杂度。第 1 章先给触发条件。
第二,把契约当成文档。契约是运行时约束,必须有兼容性检查和消费者验证,否则文档更新得再及时也挡不住一次字段改名。第 2 章把检查放进 CI。
第三,把服务发现当成“加个注册中心”。注册、健康检查、摘流、重试预算是同一条链路;只做注册不做摘流,会把故障实例留在流量里。第 3 章处理生命周期。
第四,把 SLO 当成 dashboard。SLO 的价值在于触发发布冻结、预算评审和优先级排序;只展示不决策,等于没有。第 7 章把预算接进门禁。
第五,把混沌演练当成故障表演。没有稳态假设、爆炸半径和止损条件的注入,只是制造事故。第 8 章先定义“什么算失败”。
第六,把成本治理当成财务动作。成本是架构、容量和发布决策的结果;没有归因和单位经济,只能月底砍预算。第 12 章把成本接到团队与决策。
读完本卷的标准
不是“看完 45 篇”,而是能独立产出下面五样东西:
- 一份拆分决策记录:触发条件、收益、分布式成本、回退路径与验收指标;
- 一套契约门禁:schema 兼容规则、消费者验证与弃用窗口;
- 一张 SLO 与错误预算表:SLI、窗口、目标、燃尽率、发布冻结条件;
- 一份混沌演练方案:稳态假设、注入层、爆炸半径、止损与回归项;
- 一份成本与平台账单:归因口径、单位经济、黄金路径与采纳指标。
如果这五样能写出来,四卷的内容才算连成一条线:从边界到性能,从一致性到治理。
从哪开始
第一次读,从1.1 微服务拆分不是默认答案 开始,按顺序走到第 13 章。手上有发布或成本问题,直接用症状表跳转;要做拆分,先读第 1 章,再回到第 2、9、13 章。
全书完整篇目见书架 ,或按顺序从 1.1 走到 13.3。
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。