OceanBase的2PC(两阶段提交)协议在保证分布式事务原子性的同时,通过多项创新优化,大幅提升了性能与可用性。其核心思想是去中心化的协调者、利用Paxos日志保证一致性,以及针对单机事务的优化。
下图清晰地展示了OceanBase 2PC的完整流程、核心角色及关键优化点:

下面分阶段详细说明流程,并解释其与传统2PC的关键区别:
🔄 两阶段详细流程
-
PREPARE阶段
- 协调者:事务的发起分区自动成为协调者,向所有相关参与者分区发送
Prepare请求。 - 参与者:收到请求后,尝试在本地执行事务操作(写数据、加锁),并将Prepare状态信息写入基于Paxos协议复制的日志流(Log Stream) 中。只有当日志被多数派副本持久化后,才视为Prepare成功,并向协调者返回成功应答。这确保了即使节点故障,Prepare状态也不会丢失。
- 协调者:事务的发起分区自动成为协调者,向所有相关参与者分区发送
-
COMMIT阶段
- 协调者:收到所有参与者的成功应答后,事务结果便已确定。此时,协调者会立即向客户端返回“提交成功”,而无需等待第二阶段完成。随后,它再异步地向所有参与者发送
Commit请求。 - 参与者:收到
Commit请求后,释放事务占用的锁资源,提交日志,并清理事务上下文。
- 协调者:收到所有参与者的成功应答后,事务结果便已确定。此时,协调者会立即向客户端返回“提交成功”,而无需等待第二阶段完成。随后,它再异步地向所有参与者发送
如果在Prepare阶段有任何参与者失败,协调者将发起全局回滚(Abort)。
⚡ 核心优化与传统2PC的区别
OceanBase的优化主要体现在架构设计和流程精简上,具体对比如下:
| 对比维度 | 传统2PC | OceanBase 2PC |
|---|---|---|
| 协调者角色 | 独立的中心化节点(如事务管理器),易成单点瓶颈。 | 事务的发起分区自动担任,去中心化,无单点问题。 |
| 日志机制 | 各节点写本地Redo/Undo日志,协调者需额外写决策日志。 | 参与者将Prepare日志写入Paxos副本,利用分布式共识确保高可用,协调者无需写日志。 |
| 响应时机 | 客户端必须等待完整的两个阶段(2次RPC)结束后才能收到结果。 | Prepare成功后即可响应客户端(1次RPC延迟),Commit阶段异步进行。 |
| 故障恢复 | 协调者宕机可能导致事务“悬挂”,恢复流程复杂。 | 借助Paxos日志自动恢复,新协调者或参与者可查询日志确定事务状态,避免长时间阻塞。 |
| 单机事务优化 | 不区分。 | 单机多分区事务在Prepare后可立即提交;单分区事务直接降级为本地一阶段提交,完全跳过2PC。 |
💡 总结与优势
总而言之,OceanBase通过将分布式共识(Paxos)与事务提交(2PC)在内核深度集成,实现了 “日志即状态” 的优化。其核心优势在于:降低延迟(提前响应)、提升吞吐(去中心化与异步化)、保障高可用(基于Paxos的自动故障恢复)。