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

《后端架构设计·分布式与数据一致性》1.2 故障模型:崩溃、丢包、分区与拜占庭

崩溃停止、崩溃恢复、消息丢失、网络分区与拜占庭故障,对调用方暴露的信号并不相同。本文用可复现的确定性网络逐项注入五类故障,配合持久化副本测试说明:订单系统默认按崩溃-恢复建模,是因为稳定存储加幂等重放能够收敛,而拜占庭需要另一套成本高得多的协议。

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

《后端架构设计·分布式与数据一致性》1.1 从单机到分布式:哪些问题真的变了

同一段订单预留逻辑,在进程内调用与跨节点调用下会暴露部分失败、响应丢失与墙上时钟错序。本文用可运行的 Go 双节点模拟器把调用结果分成 APPLIED、NOT_APPLIED、UNKNOWN 三类,并用测试说明未知状态下重试为什么必须依赖按订单号的幂等,而不是调用方的猜测。

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