CalcGuide · 技术博客主页 / 一页纸学习计划
🟠

一致性、分布式事务与消息异步

分类:工程技术 · 路径:docs/topics/consistency-and-messaging/README.md

#system-design#consistency#cap#saga#kafka#event-sourcing

用 CAP / PACELC、2PC / Saga / Outbox / CDC、Kafka / 事件溯源处理跨服务一致与异步

父主题

系统设计:从容量估算到一致性与可观测

子主题(0)

一致性、分布式事务与消息异步

0. 元信息

1. 学习路线

CAP 定理 + PACELC 扩展
  → 一致性级别(线性 / 顺序 / 因果 / 最终)
  → 分布式事务(2PC / 3PC / XA)
  → Saga 模式(Orchestration / Choreography)
  → Outbox 模式与 CDC(Debezium / Canal)
  → 消息系统(Kafka / RabbitMQ / Pulsar / NATS)
  → 事件溯源(Event Sourcing)与 CQRS
  → 死信队列与重试
  → 幂等设计(Idempotency Key / 唯一索引 / 状态机)

每一步都落到一个具体业务(订单 / 库存 / feed),写代码 + 跑故障注入。

2. 阶段周数分配

精简子主题不固定周数。按 §3 顺序完成。

3. 九阶段表

阶段核心知识实践产出学会标准
1CAP / PACELC一致性矩阵能为订单 / 库存 / feed 选对级别
2一致性级别Quorum / 读修复能用 N / R / W 推导可用性
32PC / XA失败演练能解释阻塞 / 脑裂 / 协调者挂
4Saga 编排编排代码能画状态机 + 写补偿
5Saga 编舞事件链能解释为什么少用中央协调
6Outbox + CDC投递代码能解释为什么不丢消息
7Kafka / RabbitMQ生产/消费代码能解释 partition 与顺序
8事件溯源 / CQRS物化视图能解释审计与重放
9幂等与死信幂等代码 + DLQ能解释「至少一次」与「恰好一次」

4. 第一周任务

精简版省略固定日程。先完成阶段 1~4:CAP 矩阵 + 一致性级别 + 2PC 失败演练 + Saga 编排最小可用版本。

5. 阶段通用验收

精简版省略;每个产出保留状态机图、代码、故障注入记录、版本。

6. 最终验收

精简版省略;以 §3 第 9 阶段和 §9.4 问题口述检查为准。

7. 综合项目

精简版省略;成果并入父主题秒杀系统(库存预热 + Redis 原子扣减 + 异步下单 + 消息驱动)。

本主题贡献

交付物清单

  1. consistency/cap_matrix.md:订单 CP / 秒杀库存 AP + Outbox / feed 最终一致 三档决策表 + 真实组件选型;
  2. saga/order_saga.{py|go|java}:编排式 Saga 完整可跑,含状态机 + 补偿动作(含补偿也挂的兜底);
  3. outbox/:业务表 + outbox 表 + Debezium 配置 + 投递 SQL;以及 CDC 断网演练恢复后至少一次 (at-least-once) 不丢的证据,含 offset 与 outbox 状态对照;
  4. mq/kafka_idem.{py|go|java} + bench/idempotent.md:Kafka 生产消费 + Idempotency Key + 死信 DLQ,含 partition rebalance 时 ≥ 1 次不丢的证据。

验收标准

8. 推荐资料

精简版省略;使用 §9.3 和 §9.6 Source。

9. 学习资料汇聚(v0.3 自包含)

9.1 背景与动机

2000 年 Eric Brewer 在 PODC keynote 提出 CAP 猜想,2002 年 Gilbert 和 Lynch 给证明。12 年后 Brewer 自己重写「CAP Twelve Years Later」并提出 PACELC,修正了”三选二”误读。Amazon 2007 年披露 Dynamo,把最终一致 + Quorum + 读修复写进工业实践。Google 2012 年 Spanner 用 TrueTime + 2PC 实现全球强一致,把分布式事务推到工程极限。

事务模式上,1987 年 Garcia-Molina 和 Salem 在 PODS 提 Saga;2007 年 Pat Helland 在「Life Beyond Distributed Transactions」里把消息驱动的事务写进工业界。2014~2018 年 CQRS / Event Sourcing 在微服务浪潮中复活。Kafka 2011 年开源后成为事实标准消息总线,今天几乎所有「跨服务异步」都跑在它上面。

9.2 概念地图

flowchart TB
  CAP[CAP / PACELC] --> Level[一致性级别]
  Level --> Strong[线性/顺序一致]
  Level --> Causal[因果一致]
  Level --> Eventual[最终一致]
  Strong --> Spanner[Spanner/CockroachDB]
  Eventual --> Dynamo[Dynamo/Cassandra]
  TX[分布式事务] --> TwoPC[2PC/XA]
  TX --> Saga[Saga]
  Saga --> Orchestration[编排]
  Saga --> Choreography[编舞]
  Saga --> Outbox[Outbox + CDC]
  MQ[消息与异步] --> Kafka[Kafka/RabbitMQ]
  Kafka --> Idempotent[幂等设计]
  Kafka --> DLQ[死信队列]
  CQRS[CQRS + Event Sourcing] --> Audit[审计与重放]
  CQRS --> Read[读模型物化]

关系说明:CAP 决定业务可走强一致还是最终一致;事务模式解决跨服务一致;消息系统是 Saga 与事件溯源的血脉;幂等与死信是「消息可靠」的最后一道关。

9.3 基础知识讲解

9.3.1 论文 / 规范

9.3.2 书

9.3.3 博客 / 文档

9.3.4 人物

9.3.5 方法

9.4 经典问题与经典案例

问题为什么重要最简答案
订单应该 CP 还是 AP业务边界订单 CP;秒杀库存 AP + Outbox
一致性级别怎么选强一致 vs 最终一致强一致代价高,最终一致要可补偿
2PC 为什么少用协调者挂会阻塞用 Saga + Outbox 替代
Saga 编排 vs 编舞协调方不同单团队选编排;多团队选编舞
Outbox 为什么可靠单库事务原子业务表 + outbox 表同事务;CDC 投递
消息为什么会丢异步语义不清至少一次 + 幂等 + 死信
消息为什么会重至少一次语义Idempotency Key / 唯一索引 / 状态机
死信队列怎么用消费失败兜底失败入 DLQ;监控 DLQ 长度;告警
Kafka partition 与顺序业务顺序保证key 选业务主键;partition 数 ≥ 最大并发
事件溯源如何重放状态修复与审计物化视图 + 快照 + 按时间戳回放
幂等怎么实现重试安全数据库唯一索引 / 状态机 / 业务键
Saga 补偿失败怎么办补偿也挂幂等 + 重试 + 死信 + 人工介入

9.5 学习难点

9.6 技术标准与接口

9.6.1 Entity

名称版本组织状态 / 可访问性
CAP 定理Gilbert-Lynch 2002PODC / IEEE经典定理;论文公开
PACELCBrewer 2012InfoQ扩展框架;公开
SagaGarcia-Molina & Salem 1987PODS经典论文;公开
Outbox 模式工业实践模式;公开
CQRSGreg Young 2010CQRS 社区模式;公开
Event SourcingFowler 2005martinfowler.com模式;公开
Apache Kafka3.xApacheGA;Apache-2.0
RabbitMQ3.xPivotal / VMwareGA;Apache-2.0
Debezium2.xRed Hat / 社区GA;Apache-2.0
Apache Pulsar3.xApacheGA;Apache-2.0
NATS2.xSynadiaGA;Apache-2.0

9.6.2 Scope

9.6.3 Structure

9.6.4 Ecosystem

9.6.5 Depth Tiers

层级能力一致性 / 消息主题可观察标准
L0知道存在知道 CAP / Saga / Outbox / Kafka
L1看得懂示例能读 Saga 编排代码、Kafka 生产消费代码
L2能正确调用能写 Saga 编排、Outbox 投递、Kafka 生产消费
L3能解释与排错能为业务选对一致性级别,写消息不丢
L4能设计与扩展能设计跨服务事务、设计事件溯源系统

本计划目标:L3

9.6.6 Source

10. 常见误区

11. 所有知识点分类(统一规则)

  1. 编程语言
  2. 数据结构与算法
  3. 计算机基础
  4. 工程技术
  5. Web 与后端
  6. 前端与客户端
  7. 数据与人工智能
  8. 项目与职业能力
  9. 安全与可靠性

本计划归属:工程技术 主 + 计算机基础 辅。

直接依赖(2)

查看知识图谱