1. 分布式事务概述

在微服务与事件驱动架构中,跨服务的数据一致性是核心挑战。本章从理论基石出发,逐步收敛到 Outbox 模式在压测场景中的定位。

1.1 CAP 理论:分布式系统的“不可能三角”

CAP 理论由 Eric Brewer 于 2000 年提出,指出分布式系统在 一致性(Consistency)、可用性(Availability) 和 分区容错性(Partition Tolerance) 三者中最多同时满足两项。

属性说明典型取舍场景
C — 一致性所有节点在同一时刻看到相同数据银行转账:必须强一致
A — 可用性每个请求都能获得非错误的响应电商首页:不可用即流失用户
P — 分区容错性系统在网络分区时仍能正常运行跨机房部署:分区是常态
压测启示: 在 Outbox + Kafka 方案中,我们优先保证 AP(可用性 + 分区容错性),通过异步重试与幂等消费实现最终一致性。压测时需重点观察分区恢复后的数据追赶行为。

1.2 BASE 理论与最终一致性

BASE 是对 CAP 中 AP 路线的实践总结,包含三个要素:

  • Basically Available(基本可用) — 允许部分功能降级,核心链路保持响应。
  • Soft State(软状态) — 允许数据中间状态存在,不要求实时一致。
  • Eventually Consistent(最终一致性) — 经过一定时间窗口后,所有副本数据达成一致。

最终一致性是 Outbox 模式的理论依据:业务操作先写入本地数据库(Outbox 表),再由异步进程可靠投递到 Kafka,下游消费者最终看到完整事件流。

1.3 常见分布式事务方案对比

以下从一致性强度、性能、代码侵入性、压测关注点四个维度对比主流方案:

方案一致性模型性能代码侵入性压测关注点
2PC(两阶段提交)强一致低(同步阻塞)高(需 XA 接口)协调者单点、锁超时
TCC(Try-Confirm/Cancel)强一致中高(需实现三阶段接口)空回滚、幂等、悬挂
Saga最终一致高(异步补偿)中(需定义补偿逻辑)补偿链路耗时、逆向流程
Outbox最终一致高(本地事务 + 异步投递)低(仅需写 Outbox 表)轮询延迟、Kafka 积压、幂等消费
选型建议: 对于高吞吐、低延迟的压测场景,Outbox 模式在一致性与性能之间取得了最佳平衡。本课程后续所有压测用例均基于 Outbox + Kafka 构建。

1.4 Outbox 模式核心流程

下图展示了 Outbox 模式在分布式事务中的完整数据流:

Outbox 模式核心流程 服务A(订单服务) 业务操作 + Outbox 写入 本地数据库 订单表 + Outbox 表 Outbox 轮询进程 定时 / CDC 拉取未发送事件 Kafka Broker 事件 Topic 服务B(库存服务) 消费事件更新库存 压测关键指标 • Outbox 表轮询延迟:从写入到投递 Kafka 的时间差 • Kafka 生产端吞吐:每秒投递事件数(TPS) • 消费端积压:Lag 增长速率与恢复时间 • 幂等去重:重复事件对下游状态的影响

1.5 从理论到压测:一致性模型的选择

在压测场景库设计中,不同一致性模型对应不同的故障注入策略:

  • 强一致场景(2PC/TCC):压测重点在协调者崩溃恢复、锁超时、全局回滚耗时。
  • 最终一致场景(Saga/Outbox):压测重点在异步补偿正确性、消息可靠性、数据对账。
常见误区: 很多团队在压测 Outbox 时只关注 Kafka 吞吐,忽略了 Outbox 表本身的轮询压力。当业务写入 TPS 超过轮询进程的处理能力时,Outbox 表会持续膨胀,导致数据库 IO 飙升和投递延迟剧增。这是本课程压测场景库第一个要覆盖的边界条件。

1.6 本章小结