ShardingSphere-JDBC 入门教程之九
大纲
- ShardingSphere-JDBC 入门教程之一、ShardingSphere-JDBC 入门教程之二、ShardingSphere-JDBC 入门教程之三
- ShardingSphere-JDBC 入门教程之四、ShardingSphere-JDBC 入门教程之五、ShardingSphere-JDBC 入门教程之六
- ShardingSphere-JDBC 入门教程之七、ShardingSphere-JDBC 入门教程之八、ShardingSphere-JDBC 入门教程之九
前言
学习资源
- ShardingSphere 官方项目(GitHub)
- ShardingSphere 官方网站(中文站点)
- ShardingSphere 官方文档(最新版本)
- ShardingSphere 官方文档(5.1.1 版本)
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 中支持有限,非主推方案。
