ShardingSphere-JDBC 入门教程之九

大纲

前言

学习资源

ShardingSphere 分布式事务

ShardingSphere 官方所说的分布式事务支持,既包括 ShardingSphere-JDBC,也包括 ShardingSphere-Proxy。两者均支持 XA 分布式事务,其中:

  • ShardingSphere-JDBC 除了支持 XA 事务之外,还可通过集成 Seata 支持 BASE(基于 Seata AT 模式)事务,成熟度较高;
  • ShardingSphere-Proxy 支持 XA 事务为主,BASE 事务的支持能力有限,非官方主推方案。

BASE 事务是什么

BASE 是一种分布式事务一致性模型,属于理论层面的设计思想,其核心目标是在高并发和高可用场景下,用于解决强一致性事务在分布式系统中带来的性能和可用性问题,通过牺牲强一致性来换取系统的可扩展性与可用性。BASE 事务并非具体实现,而是一类事务处理范式,实际落地需要依赖具体的实现方案。Seata AT 模式是 BASE 模型的一种典型实现,通过对本地事务的增强与补偿机制,在保证最终一致性的前提下,实现跨服务、跨资源的事务协调。由于 BASE 属于理论模型,其实现方式可以多种多样,Seata AT 模式只是其中一个常见且成熟的实现方案。

ShardingSphere-JDBC

  • 支持分布式事务。
  • 支持的分布式事务类型:
    • XA 事务(通过数据库自身的 XA 协议)
    • BASE 式事务(柔性事务,例如柔性事务框架 TCC / AT 支持)
      • 通过集成 Seata,可以支持 BASE(基于 Seata AT 模式)事务
  • 特点:
    • 事务控制在应用端,ShardingSphere-JDBC 通过 JDBC 拦截 SQL、协调多数据源事务。
    • 可以精确控制事务边界(commit / rollback)。
  • 限制:
    • 对数据库和驱动要求较高,XA 事务依赖数据库对 XA 的支持。
    • 事务性能会受限于跨库通信开销。

ShardingSphere-Proxy

  • 支持的分布式事务类型:
    • 支持 XA 分布式事务(基于 Atomikos / Narayana)
    • 对 BASE(基于 Seata AT 模式)式事务支持有限,不是主推方案。
    • 默认是使用本地事务,需要显式配置 XA 分布式事务。
  • 特点:
    • 对应用来说完全透明,但分布式事务能力弱于 ShardingSphere-JDBC。
    • 如果在 ShardingSphere-Proxy 上执行跨库更新语句,事务可能无法完全回滚。
  • Atomikos / Narayana 的集成:
    • ShardingSphere-Proxy 内部集成了 Atomikos / Narayana,用于提供 XA 分布式事务支持。
    • 对应用侧完全透明,客户端仍使用标准 JDBC 事务接口,无需使用任何 Proxy 专用或第三方事务 API。
    • 是否启用 XA 事务由 ShardingSphere-Proxy 端配置决定,应用层的普通 JDBC 事务在 XA 模式下会被自动协调为分布式事务。
    • ShardingSphere-Proxy 对 XA 事务提供官方支持,属于正式能力;BASE(基于 Seata AT 模式)事务在 Proxy 中支持有限,非主推方案。

ShardingSphere-JDBC 使用

分布式事务使用案例