什么是分布式事务?
分布式事务就是指事务的参与者、支持事务的服务器、资源服务器(数据库)以及事务管理器分别位于不同的分布式系统的不同节点之上,在微服务后,事务有可能会跨库,必定需要分布式事务的支持。
XA是什么?
XA是一个协议,用于资源管理器 既(数据库) 和 事务管理器(事务管理框架)的 协作。数据库厂商通过实现XA协议 来使应用可以通过事务管理器实现分布式事务。事务管理器通过XA协议提供的函数来操作数据库。XA协议基于二阶段提交,因此XA协议提供的函数主要有:
1)xa_open,xa_close:建立和关闭与资源管理器(数据库)的连接。
2)xa_start,xa_end:开始和结束一个本地事务。
3)xa_prepare,xa_commit,xa_rollback:预提交、提交和回滚一个本地事务。
4)xa_recover:回滚一个已进行预提交的事务。
5)ax_开头的函数使资源管理器可以动态地在事务管理器中进行注册,并可以对XID(TRANSACTION IDS)进行操作。
6)ax_reg,ax_unreg;允许一个资源管理器在一个TMS(TRANSACTION MANAGER SERVER)中动态注册或撤消注册。
数据库表分库后,业务场景下的单库本地事务可能变成跨库分布式事务。虽然非常推崇可以通过合适的分库规则让操作的数据在同库下,继续保证单库本地事务,但不是所有场景下都能适用。如果这些场景对事务的一致性有要求,就不得不解决分布式事务的“麻烦”。sharding-jdbc 目前只只支持弱事务和柔性事务
弱事务
弱事务是把自动提交设置为false,被路由的所有的数据库链接执行完sql后 统一在一个一个的执行commit操作 。因此 在sql执行失败的时候,可以全部回滚,但是当在commit 的时候出现异常,那么这个提交异常的分片链接将执行失败 ,其他的链接的将提交成功,这就导致数据不一致,因此是弱XA。