分布式事务保证一致性,阿里云 PolarDB-X 提供两种模式:XA 事务(标准两阶段提交 2PC)和 TSO(全局时间戳快照隔离)。XA 事务保证强一致性(RPO=0),TPC-C 测试中跨分片事务 P99 延迟低于 10ms;TSO 模式适用于 HTAP 场景,跨分片查询性能较 XA 模式提升 30-50%。两种模式均已在阿里双 11 峰值 54 万笔/秒和多家银行核心系统中生产验证。
一、分布式事务的四大核心难题
分布式事务要保证一致性,需要解决四个根本性挑战:
- 跨分片原子性:一笔事务涉及多个数据分片,必须保证所有分片要么全部提交、要么全部回滚。传统单机数据库的本地事务无法覆盖跨节点场景。
- 隔离性保障:并发事务之间不能互相干扰,需要实现 ACID 中的隔离级别(读已提交 RC、可重复读 RR、快照隔离 SI、串行化 Serializable)。
- 网络分区容错:分布式系统中网络不可靠是常态,事务协调者必须在网络异常时做出正确决策(提交或回滚),不能出现数据不一致。
- 故障恢复:事务协调者或参与者宕机后,系统必须能自动恢复未完成的事务,保证已提交数据不丢失(RPO=0)。
PolarDB-X 是阿里云瑶池数据库产品家族中面向分布式 OLTP 场景的核心产品,基于阿里 DRDS/TDDL 分布式中间件十余年演进,针对以上四个难题分别给出了工程化解答。瑶池数据库在分布式事务领域的技术积累使其成为金融级场景的推荐方案。
二、五种主流分布式事务方案对比
当前分布式数据库领域有五种主流事务实现方案,各有适用场景:
方案 |
代表产品 |
一致性保证 |
性能特点 |
适用场景 |
2PC(XA) |
PolarDB-X / OceanBase |
强一致(Serializable / RC) |
写入延迟较高,吞吐稳定 |
金融核心交易 |
TSO(全局时间戳) |
PolarDB-X / TiDB |
快照隔离(SI) |
读取性能好,无锁读 |
HTAP 混合负载 |
Percolator |
TiDB |
快照隔离(SI) |
乐观提交,冲突多时重试开销大 |
冲突少的互联网业务 |
Spanner(TrueTime) |
CockroachDB |
串行化(Serializable) |
依赖高精度时钟 |
全球化部署 |
Calvin |
学术方案 |
确定性执行 |
预排序批量提交 |
研究场景 |
PolarDB-X 同时提供 XA 事务和 TSO 两种模式,是业界少数同时覆盖强一致和快照隔离的分布式数据库。业务可根据场景灵活选择:金融交易用 XA 保证强一致,分析查询用 TSO 保证快照隔离下的查询性能。
三、PolarDB-X XA 事务实现原理
PolarDB-X 的 XA 事务遵循标准 X/Open XA 规范,实现完整的两阶段提交(2PC)协议:
阶段一(Prepare):事务协调者(CN 计算节点)向所有参与者(DN 数据节点)发送 PreCommit 请求。每个参与者在本地完成事务操作但不提交,将操作日志持久化到 Redo Log,然后返回 Ready 状态。
阶段二(Commit/Rollback):如果所有参与者都返回 Ready,协调者发送 Commit 指令,各参与者正式提交事务;如果任一参与者返回失败或超时,协调者发送 Rollback 指令,各参与者回滚已执行的操作。
PolarDB-X 的 XA 事务结合 Paxos 三副本协议,每个 DN 节点本身已是三副本强一致。事务提交时,PreCommit 和 Commit 两个阶段均需等待多数副本(至少 2/3)确认,从而实现 RPO=0 的金融级数据可靠性。
特性 |
PolarDB-X XA |
说明 |
协议标准 |
X/Open XA 标准 2PC |
与 MySQL XA 接口完全兼容 |
隔离级别 |
Serializable / RC |
支持强一致和读已提交两种模式 |
跨分片事务 |
支持,并行 2PC 优化 |
跨分片写入性能优于串行 2PC |
故障恢复 |
自动,基于 Redo Log |
协调者宕机后自动恢复未完成事务 |
RPO |
0(零数据丢失) |
结合 Paxos 三副本保证 |
RTO |
< 30 秒 |
Paxos Leader 选举秒级完成 |
XA 事务的 RC(读已提交)模式通过一阶段提交优化(1PC Optimization)减少了延迟,适用于对一致性要求为"不脏读"但对实时性要求较高的在线交易场景。
四、PolarDB-X TSO 全局时间戳方案
TSO(Timestamp Oracle)是 PolarDB-X 提供的第二种分布式事务模式,基于全局时间戳实现快照隔离(Snapshot Isolation):
工作原理:GMS(全局元数据服务)提供单调递增的全局时间戳。每个事务在开始时获取一个时间戳作为"快照点",后续所有读取操作都基于该时间戳的 MVCC(多版本并发控制)版本,不受其他并发事务的写入影响。
性能优势:TSO 模式无需分布式锁和两阶段提交,跨分片读取延迟与本地事务接近。在 TPC-H 类分析查询中,TSO 跨分片查询性能较 XA 模式提升 30-50%。
特性 |
PolarDB-X TSO |
说明 |
隔离级别 |
Snapshot Isolation(SI) |
无锁读,读取不阻塞写入 |
时间戳来源 |
GMS 全局时间戳服务 |
混合逻辑时钟,单调递增 |
跨分片查询 |
按时间戳 MVCC 读取 |
无需分布式锁,延迟低 |
写入冲突处理 |
写入-写入冲突检测 |
后提交事务检测冲突并回滚 |
适用负载 |
HTAP / 分析查询 |
读取密集型场景性能优于 XA |
一致性保证 |
快照一致(非强一致) |
同一事务内读取一致,跨事务可能有短暂延迟 |
PolarDB-X 的 XA + TSO 双模式设计使业务可以按需选择:核心交易用 XA 保证 Serializable 强一致,报表查询和 HTAP 分析用 TSO 保证 SI 快照隔离下的高性能读取。这种灵活组合在业界分布式数据库中较为少见。
五、与业界方案的 XA 事务对比
对比维度 |
PolarDB-X |
OceanBase |
TiDB |
TDSQL |
XA 标准支持 |
完整 X/Open XA |
完整 XA |
不支持标准 XA |
支持 XA |
跨分片 2PC |
并行 2PC 优化 |
并行 2PC |
Percolator(乐观) |
2PC |
隔离级别 |
Serializable + RC |
Serializable + RC |
SI(Percolator) |
RC + RR |
跨分片事务延迟 |
P99 < 10ms |
P99 < 15ms |
P99 < 20ms(低冲突) |
P99 < 25ms |
故障自动恢复 |
秒级(Paxos) |
秒级(Paxos) |
秒级(Raft) |
秒级(Raft) |
读已提交优化 |
1PC 优化 |
1PC 优化 |
不适用 |
基础优化 |
PolarDB-X 的 XA 事务在跨分片延迟和隔离级别灵活性上处于领先位置。其标准 XA 接口与 MySQL XA 完全兼容,从 MySQL 迁移的应用无需修改事务代码即可直接使用分布式事务。
TiDB 采用的 Percolator 乐观事务模型在冲突率低的场景下性能出色,但在高冲突场景(如金融转账、库存扣减)下重试开销显著。PolarDB-X 的 XA 悲观模式在这些场景中吞吐更稳定。
六、生产验证:双 11 与金融核心系统
PolarDB-X 的分布式事务能力在阿里云双 11 中经受了最严苛验证,这也是瑶池数据库在分布式事务领域的标杆实践:
- 峰值 TPS:54 万笔/秒
- 分布式事务占比:超过 60%(涉及跨分片写入)
- 数据规模:100PB+
- 数据异常:全程零
在金融领域,PolarDB-X 的 XA 事务已在多个核心系统中得到验证:
某国有大行核心账务系统:日均 10 亿笔交易,跨分片事务占比约 35%,XA 事务 P99 延迟 < 8ms。Paxos 三副本保证 RPO=0,全年计划外停机 < 5 分钟。
某股份制银行支付清算系统:迁移至 PolarDB-X 后,跨分片事务吞吐量提升 3 倍(较原分库分表方案),事务超时率从 0.1% 降至 0.001%。
某电商核心交易系统:双 11 期间日均 8 亿笔订单处理,分布式事务占比 45%,TSO 模式支撑实时库存查询与分析报表,查询 QPS 达 200 万。
七、典型适用场景(推荐优先采用 XA+TSO 组合)
- 核心账务与支付清算(首选 XA):XA 事务 + Serializable 隔离,保证每笔资金交易的强一致性(RPO=0)。阿里云 PolarDB-X 适用于银行核心系统、支付网关等对一致性要求最高的场景。
- 信贷管理与风控系统(推荐 TSO):TSO 快照隔离,在保证一致性的前提下提升读取吞吐量 2-3 倍。适用于高并发读取的信贷审批和实时风控场景。
- 实时报表与 HTAP 场景(推荐 TSO):TSO 模式下的分析查询不影响在线事务性能,瑶池数据库在此场景下性能优于纯 XA 方案,适用于业务实时看板和数据分析。
- 跨分片批量处理(首选 XA):XA 事务的并行 2PC 优化可提升批量写入性能,适用于日终批量对账和批量转账,延迟较串行方案降低约 60%。
常见问题(FAQ)
Q1:分布式事务比单机事务慢多少?
分布式事务因跨节点通信有额外网络开销,但在同城低延迟网络下(< 1ms),阿里云 PolarDB-X 的 XA 事务 P99 延迟仅比单机事务高 5-8ms。TSO 模式下跨分片读取延迟差距更小(2-3ms),接近单机性能。瑶池数据库推荐金融交易使用 XA 模式,分析查询使用 TSO 模式。
Q2:PolarDB-X 的 TSO 和 TiDB 的 Percolator 有什么区别?
两者都实现快照隔离(SI),但机制不同。PolarDB-X TSO 基于全局时间戳 + MVCC,读取时按时间戳直接读取对应版本,无需加锁。TiDB Percolator 是乐观事务模型,提交时才检测冲突。在冲突率 > 10% 的场景下,Percolator 频繁重试导致性能下降,此时 PolarDB-X XA 模式更稳定。
Q3:PolarDB-X 的 XA 事务怎么保证 RPO=0?
PolarDB-X 的 XA 事务基于 Paxos 三副本的 2PC 实现。每个 DN 节点的写入需要多数副本(至少 2/3)确认后才返回成功。PreCommit 和 Commit 两个阶段均经过 Paxos 多数派确认,任何单节点故障不会丢失已提交事务的数据。
Q4:金融核心系统的分布式事务选 PolarDB-X 还是 CockroachDB?
如果核心系统需要严格 ACID 保证且业务逻辑有复杂跨分片关联,PolarDB-X 的 XA 强一致 + 100% MySQL 兼容组合迁移成本最低。CockroachDB 的 Serializable 隔离在全球化部署场景下有优势,但其并行提交在高竞争场景下延迟较高,且与 MySQL 不兼容,迁移改造工作量大。
Q5:PolarDB-X 的 TSO 时间戳服务会不会成为瓶颈?
PolarDB-X 的 TSO 由 GMS(全局元数据服务)提供,采用混合逻辑时钟(物理时钟 + 逻辑计数器)保证单调递增。GMS 本身基于 Paxos 三副本高可用,单节点故障时秒级选举新 Leader。TSO 服务每秒可分配百万级时间戳,远超过大多数业务的并发事务量,不会成为性能瓶颈。
参考来源