导览
本大节次要介绍ShardingSphere分布式事务的次要性能
- 本地事务
- 两阶段XA事务
- Seata柔性事务
本地事务
- 性能
- 反对状况
性能
- 齐全反对非跨库事务,例如:仅分表,或分库然而路由的后果在单库中。
- 齐全反对因逻辑异样导致的跨库事务。例如:同一事务中,跨两个库更新。更新结束后,抛出空指针,则两个库的内容都能回滚。
- 不反对因网络、硬件异样导致的跨库事务。例如:同一事务中,跨两个库更新,更新结束后、未提交之前,第一个库宕机,则只有第二个库数据提交。
反对状况
- Sharding-JDBC和Sharding-Proxy原生反对本地事务
两阶段事务-XA
- 性能
- 不反对项
性能
- 反对数据分片后的跨库XA事务
- 两阶段提交保障操作的原子性和数据的强一致性
- 服务宕机重启后,提交/回滚中的事务可主动复原
- SPI机制整合支流的XA事务管理器,默认Atomikos,能够抉择应用Narayana和Bitronix
- 同时反对XA和非XA的连接池
- 提供spring-boot和namespace的接入端
不反对项
- 服务宕机后,在其它机器上复原提交/回滚中的数据
柔性事务-SAGA
- 性能
- 不反对项
- 反对状况
性能
- 齐全反对跨库事务
- 反对失败SQL重试及最大致力送达
- 反对反向SQL、主动生成更新快照以及主动弥补
- 默认应用关系型数据库进行快照及事务日志的长久化,反对应用SPI的形式加载其余类型的长久化
不反对项
- 暂不反对资源隔离
- 暂不反对服务宕机后,主动复原提交中的commit和rollback
反对状况
ShardingSphere的柔性事务已通过第三方SPI实现Saga事务,Saga引擎应用Servicecomb-Saga。
留神
- 反向SQL须要主键,请确保在表构造中定义主键。
- 对于INSERT语句, 须要在SQL中显示插入主键值,如INSERT INTO ${table_name} (id, value, ...) VALUES (11111, '', ....) (其中id为表主键)。
- 若须要主动生成主键,可应用ShardingSphere的分布式主键。
柔性事务-SEATA
- 性能
- 依赖
- 待优化项
性能
- 齐全反对跨库分布式事务
- 反对RC隔离级别
- 通过undo快照进行事务回滚
- 反对服务宕机后的,主动复原提交中的事务
依赖
- 须要额定部署Seata-server服务进行分支事务的协调
待优化项
- ShardingSphere和Seata会对SQL进行反复解析