posts

《后端架构设计·分布式与数据一致性》 · 全书目录与章节索引(45 篇)

《后端架构设计》卷三全 45 篇:以 Go 订单系统 arch-lab 为主线,从部分失败、时钟与因果讲到复制、共识、分片、一致性模型、分布式事务、outbox、幂等对账、ID 与锁、调度和多活容灾,最后完成一次跨分片下单的一致性验证与可运行测试。

《后端架构设计》是一套四卷本:卷一《架构基础与边界》、卷二《高性能与高可用》、卷三《分布式与数据一致性》、卷四《演进与治理》。本页是卷三的完整目录,共 45 篇。

卷二把单机边界内的性能、过载和故障处理完了,但它留下一个更硬的问题:当订单、库存、支付不再共享同一个数据库、同一个时钟、同一次事务,系统靠什么保证“不会超卖、不会重复扣款、不会丢单”?卷三回答的就是这个问题。它不把 CAP 再讲一遍,而是把每个结论落到 arch-lab 的一个组件、一次故障注入或一张带退出条件的决策表上。

全书概览

项目内容
书稿《后端架构设计·分布式与数据一致性》
篇数45 篇(13 章 × 3 节 + 序、前言、目录、附录 A–C)
主线项目arch-lab:Go 1.26 订单交易系统
技术栈Go 1.26.0 主线;Java 21 结构对照
运行级别L1 为主;第 7、8、13 章至少各一个 L2 进程内场景;L3/L4 只讨论,不承诺实跑
阅读方式从目录与学习路径 进入顺序通读,或按下方路径跳读
上级专题书稿专题
相关专题分布式系统 · 架构设计

三条阅读路径

路径 A:顺序通读(约 38 小时)

按 13 章顺序读。第 1–2 章建立部分失败、故障模型、时钟与因果的基本判断;第 3–5 章进入复制、共识和分片;第 6 章把一致性模型翻译成业务不变量;第 7–9 章处理事务、可靠消息、幂等与对账;第 10–12 章讨论 ID、锁、调度和多活;第 13 章完成跨分片下单的端到端验证。

路径 B:跨库改造驱动(约 12 小时)

手上正有一次分库分表或跨服务事务改造时,按这个顺序读:1.1 → 1.2 → 5.1 → 6.3 → 7.2 → 8.1 → 8.2 → 9.2 → 13.1 → 13.2。先确认失败模型和分片键,再选事务与消息方案,最后用对账和不变量验收。

路径 C:线上一致性问题驱动(约 6 小时)

遇到超卖、重复扣款、订单状态倒退、切换丢单时,先查症状表,再读对应章节:超卖读 6.3 和 10.2,重复扣款读 8.2 和 9.1,状态倒退读 2.1 和 3.3,切换丢单读 3.3 和 12.3,消息重复读 8.2 和 8.3,锁失效读 10.2 和 10.3。

全书目录

前置与附录

篇文章核心内容
序序三个一致性事故、卷二留下的假设、四个立场与四卷分工
前言前言卷三新增组件、L1–L4、代码标记、S1/S2/S3 场景与数字口径
目录目录与学习路径13 章依赖图、三条路径、症状表、章节速览与读完标准
附 A附录 A 一致性模型与故障语义速查一致性强弱、故障语义、CAP 误读与不变量映射
附 B附录 B Go/Java 分布式组件对照虚拟线程、并发容器、时钟、锁与重试生态的结构差异
附 C附录 C 分布式一致性验证清单六类场景的注入、观测、判定与回滚,上线前二十条检查

第一部分:基础与模型(第 1–2 章)

节文章核心内容
1.1从单机到分布式:哪些问题真的变了部分失败、网络延迟、并发与无共享时钟;双节点模拟器
1.2故障模型:崩溃、丢包、分区与拜占庭可注入的确定性网络与故障分类,为什么默认崩溃-恢复
1.3远程调用的八个假设与端到端原则假设逐条拆解、重试放大实验与端到端可靠性
2.1物理时钟、NTP 与时钟漂移的可见后果墙上时钟与单调时钟、回拨与最后写入获胜的丢数据
2.2逻辑时钟与向量时钟:因果关系怎么编码Lamport 时钟、向量时钟、并发检测与合并
2.3混合逻辑时钟与版本向量在 arch-lab 的落地HLC 实现、订单事件的版本向量与并发修改检测

第二部分:复制、共识与分片(第 3–5 章)

节文章核心内容
3.1单主复制:复制日志、位点与读己之写复制日志、提交/应用位点、会话令牌与读己之写
3.2多主与无主复制:冲突检测与合并多主冲突、CRDT 合并与 R+W>N 的读写重叠
3.3复制延迟、故障切换与数据丢失窗口异步复制滞后、未复制尾部与 RPO 计算
4.1共识问题与 Raft 的角色、任期、日志安全性与活性、三种角色、任期与日志匹配
4.2选主、日志复制与提交规则的可运行实现确定性消息传递的迷你 Raft 与分区测试
4.3成员变更、快照与线性一致读成员变更、日志压缩、ReadIndex 与安全边界
5.1分片键、热点与一致性哈希分片键约束、虚拟节点、热点与迁移比例
5.2再平衡:迁移、双写与客户端路由迁移状态机、双写双读、路由版本与回滚
5.3请求路由、元数据与扩容期间的错误预算元数据传播、陈旧路由与扩容窗口的错误预算

第三部分:一致性与事务(第 6–7 章)

节文章核心内容
6.1线性一致、顺序一致与因果一致三种模型的形式定义与历史记录检查器
6.2会话保证:读己之写、单调读与一致前缀会话令牌、版本水位与粘性路由
6.3从一致性模型到业务不变量不超卖、状态单向、不重复扣款与最弱模型
7.12PC 与 3PC:准备、提交与协调者故障两阶段提交、参与者日志、阻塞与恢复
7.2Saga:补偿、语义锁与不可补偿步骤编排式 Saga、补偿顺序、语义锁与步骤前移
7.3TCC、本地消息表与事务状态的可见性空回滚、悬挂、幂等与中间态查询

第四部分:可靠交付与对账(第 8–9 章)

节文章核心内容
8.1事务性 Outbox:同库写入与投递保证同库同事务、relay 位点与提交后崩溃
8.2消费端幂等、去重表与恰好一次的真实边界去重键、写入时机与 effect-once
8.3消息顺序、重放与死信的对账闭环分区内顺序、重放位点、死信分类与对账收敛
9.1幂等键设计:作用域、生命周期与存储键作用域、生成责任、TTL 与并发同键
9.2对账系统:T+1、实时与差异分类全量与流式对账、差异分类与处置
9.3冲正、补偿与资金类操作的最终一致幂等冲正、部分成功、悬挂与不变量

第五部分:协调与容灾(第 10–12 章)

节文章核心内容
10.1分布式 ID:Snowflake、号段与时钟回拨位分配、号段双缓冲与回拨处理
10.2分布式锁:租约、fencing token 与 Redis 边界租约续约、fencing token 与主从切换边界
10.3锁失效后的正确性:从互斥到幂等版本号、条件更新与锁失效时仍成立的不变量
11.1调度模型:轮询、租约与领导者选举三种归属方式、重复触发与恢复时间
11.2任务分片、幂等重跑与进度检查点分片键、检查点与崩溃续跑
11.3延迟任务、时间轮与错过触发的补偿时间轮、持久化延迟任务与 misfire 补偿
12.1多活拓扑:单元化、双活与就近接入单元化边界、路由、数据归属与影响范围
12.2数据同步与冲突:双向复制、回环与归属回环检测、版本向量与归属单元
12.3容灾切换:RTO/RPO、演练与回切RTO/RPO 测算、切换决策与回切顺序

第六部分:综合实验(第 13 章)

节文章核心内容
13.1订单系统的分布式改造:从单库到分片按用户分片、跨分片查询、全局 ID 与迁移双写
13.2一次跨库下单的一致性验证outbox + Saga、故障注入与不变量/对账收敛
13.3进入卷四:演进与治理未证明假设、治理成本与交给卷四的问题清单

与站内专题的关系

卷三与 分布式系统 专题是“书稿 + 专题”的关系,不是替代关系。专题文章负责概念地图和历史脉络,卷三负责订单系统里的可运行实现与故障判定。例如:

arch-lab 在卷三新增什么

卷三不重画领域边界,只在 internal/platform/ 下增加分布式能力:

组新增组件对应章节
时间与因果物理/逻辑/混合时钟、版本向量第 2 章
复制与共识复制日志、仲裁读写、迷你 Raft第 3–4 章
分片与路由一致性哈希、迁移状态机、路由表第 5 章
事务与交付2PC、Saga、TCC、outbox/inbox第 7–8 章
幂等与对账幂等键、去重表、差异分类第 9 章
协调Snowflake/号段、租约锁、调度器第 10–11 章
多活单元路由、双向复制、切换状态机第 12 章

这些组件仍然通过端口接入领域层;Order 聚合不知道复制、消息和锁的存在。代码分 L1–L4 四级,卷三以 L1 为主,第 7、8、13 章各有一个 L2 进程内端到端场景;L3/L4 只写清需要什么真实环境,不伪造多节点实测。

读完标准

读完卷三,你应该能独立回答下面六个问题:

  1. 给定一次跨库下单,失败可能发生在哪些点,每个点的可见状态是什么?
  2. 为什么“加锁”不能替代幂等?锁过期后靠什么保证不变量?
  3. 单主异步复制切主时,最多会丢多少数据?这个窗口怎么算、怎么缩?
  4. Raft 的选举安全性和日志匹配分别排除了哪种错误?
  5. 分片迁移期间,读请求应该走旧路由、新路由还是双读?什么时候可以切干净?
  6. 对账发现差异后,哪些能自动修复,哪些必须人工,修复本身如何幂等?

如果只能背出 CAP、BASE、2PC 的定义,却回答不了这六个问题,说明还停留在名词层。卷三的每篇都要求至少一个可运行片段或一张带判据的表,就是为了把回答逼到可验证的层面。

版本与验证

卷三结束后,卷四《演进与治理》接手:微服务拆分、通信与契约演进、服务发现、网关与 BFF、配置与开关、可观测性、SLO 与错误预算、混沌演练、发布工程、多租户、平台工程与成本治理。

全部文章 Books game Java Indie golang 客户端开发 Minigame Saas rust Python
books

《后端架构设计·分布式与数据一致性》附录 C 分布式一致性验证清单

卷三附录 C:把单主复制切换、跨分片下单、重复消费、锁过期、时钟回拨、对账收敛六类场景写成可执行验证,每类给出前置条件、注入手段、观测信号、判定不变量、通过标准与回滚方式,并附上线前二十条检查、三态判定口径、演练顺序、数字口径与执行记录模板。

13 分钟阅读
书稿 后端架构 Go
books

《后端架构设计·分布式与数据一致性》附录 A 一致性模型与故障语义速查

卷三附录 A:用判据、反例与业务映射三种口径整理线性一致、顺序一致、因果一致、读己之写、单调读和最终一致,说明崩溃停止、崩溃恢复、消息丢失、重复、分区与拜占庭六类故障语义,纠正 CAP 与 PACELC 的常见误读,并给出订单、库存、支付不变量到最弱一致性模型的对照表。

16 分钟阅读
书稿 后端架构 Go
books

《后端架构设计·分布式与数据一致性》13.3 进入卷四:演进与治理

卷三的 L2 实验只能证明状态机和故障处理,不能证明共识性能、跨单元冲突率、演练覆盖和组织成本。本节把四类未证明假设整理成带责任、指标、阈值、窗口和截止日期的交接表,并给出一个 Go 校验器,拒绝没有验收口径、缺少截止日期或把未证明项标成已接受的清单。

8 分钟阅读
书稿 后端架构 Go
books

《后端架构设计·分布式与数据一致性》12.3 容灾切换:RTO/RPO、演练与回切

从一次只读降级后没人敢回切的订单故障出发,把 RTO 拆成依赖图上的关键路径、把 RPO 拆成已确认序号与副本序号的差,给出可运行的状态机、RPO 计算与 RTO 关键路径 Go 实现,附本机测试输出、演练脚本、验收表与回切前置条件,并明确跨机房数字必须由真实演练校准。

9 分钟阅读
书稿 后端架构 Go
books

《后端架构设计·分布式与数据一致性》12.2 数据同步与冲突:双向复制、回环与归属

从订单支付状态在两个机房互相覆盖的具体故障出发,说明双向复制为什么必须先解决回环与归属,再谈冲突合并;给出带路径回环检测、归属校验和版本向量判定的 Go 副本实现,用本机测试覆盖 A 到 B 再回 A 的回环、重复投递、非归属写入、陈旧事件与并发版本,并附冲突处置决策表。

8 分钟阅读
书稿 后端架构 Go
books

《后端架构设计·分布式与数据一致性》12.1 多活拓扑:单元化、双活与就近接入

从一个单元故障却拖垮全局订单入口的场景出发,拆解单元化、同城双活与异地多活的隔离边界,给出带容量校验和故障影响计算的 Go 拓扑模型,用三组可运行测试对比单单元故障、双单元同时故障与仅备用单元故障时的写入阻塞、读到旧数据和冗余损失,并附拓扑选型决策表与退出条件。

8 分钟阅读
书稿 后端架构 Go
books

《后端架构设计·分布式与数据一致性》10.3 锁失效后的正确性:从互斥到幂等

锁会过期、会丢、会被主从切换绕过,但库存不超卖、订单状态单向推进、支付回调只生效一次仍然可以成立。本节把这三条不变量写成可运行的 Go 条件更新与幂等代码,在完全不用分布式锁的 200 并发下实测成功预占恰好 50 次、库存不为负,并给出锁、版本号与幂等键的职责切分。

8 分钟阅读
书稿 后端架构 Go
books

《后端架构设计·分布式与数据一致性》10.2 分布式锁:租约、fencing token 与 Redis 边界

结算任务在租约过期后仍继续写库存,是分布式锁最常见的生产事故。本节用可运行的 Go 租约管理器与 fencing token 存储复现两个持有者同时写入,实测陈旧 token 被拒绝、无 fencing 时迟到写入覆盖新值,并给出 Redis 主从切换、Redlock 与进程暂停下的安全边界。

9 分钟阅读
书稿 后端架构 Go
books

《后端架构设计·分布式与数据一致性》10.1 分布式 ID:Snowflake、号段与时钟回拨

订单号生成器看似只需时间戳加机器号,真实故障却来自时钟回拨、机器号重复和单毫秒序列溢出。本节用可运行的 Go 实现拆解 Snowflake 的位分配与回拨策略,再给出号段模式的双缓冲与数据库故障恢复,并用并发测试验证唯一性、单调性与重启后的续号行为。

9 分钟阅读
书稿 后端架构 Go
books

《后端架构设计·分布式与数据一致性》9.2 对账系统:T+1、实时与差异分类

以订单支付流水与渠道账单对账为例,对比 T+1 全量与实时流式对账在覆盖、时效和成本上的取舍,给出按订单号与方向匹配、再按金额和状态分类的 Go 对账器,用九组表驱动用例展示漏单、单边、金额、重复和宽限期状态差异如何进入不同处置队列,并说明自动与人工处置的退出条件。

9 分钟阅读
书稿 后端架构 Go
books

《后端架构设计·分布式与数据一致性》8.3 消息顺序、重放与死信的对账闭环

从订单事件乱序导致状态回退或重复发货出发,说明分区内顺序、跨分区无序与业务因果的区别,用版本号把乱序变成可重试的冲突,区分可重试错误与毒消息,给出死信分类、重放位点与对账修复的 Go 实现,并实测乱序重试收敛、重试预算耗尽进死信、重放幂等与对账修复被死信吞掉的状态,附原始输出与判据。

9 分钟阅读
书稿 后端架构 Go
books

《后端架构设计·分布式与数据一致性》8.2 消费端幂等、去重表与恰好一次的真实边界

从支付回调重复导致余额加两次的故障出发,拆开“副作用已发生、确认未发出”的窗口,说明去重表必须与副作用同库同事务、键要带生产者作用域、保留期要覆盖重放窗口;给出可运行的 Go 实现,并实测确认丢失后的重投、朴素处理的双倍入账、去重记录过期后的重复应用,以及先标记后副作用导致的丢消息。

8 分钟阅读
书稿 后端架构 Go