说mycat的事务支持之前,先说说XA协议,即分布式事务。指的是TM(事务管理器)和RM(资源管理器)之间的接口,定义了一些以ax_,xa_开头的接口函数。如下:
从这些函数的定义大致可以看出XA协议做的工作。整个XA协议主要基于二阶段提交的概念。这个概念很好理解,当TM接到一个全局事务请求的时候,TM会把请求告知注册在它身上的所有RM,当所有RM准备就绪后,再执行commit操作。在这个过程中,如果某个RMcommit失败了,那么TM会进行协调,一可以回滚其它所有RM上的事务,二是等这个失败的RM恢复后,重新进行commit。
TM是用日志来记录XA事务的状态的,且日志必须存储的很可靠。当然,真个XA协议,就是建立在可靠的TM和RM之上。
而mycat的事务支持是弱XA的,事务内的SQL在各自分片上执行并且返回状态码,如果某个分片上的返回码为error,mycat就认为本次事务失败了,此时将会一次回滚事务所涉及到的所有分片。反之,如果所有的分片都返回成功的返回码,则当AP(应用程序)提交事务的时候,mycat会同时向事务涉及的所有分片发送提交事务的命令。
之所以说是弱XA,是因为在二阶段提交的工程中,若commit时某个节点出错了,只能回滚,而不会等其恢复后再次提交。
关于XA中特别重要的日志存储,mycat未来计划以zookeeper作为XA事务的日志存储手段,依靠zookeeper的可靠性,从而实现了TM角色的可靠性。
动力节点在线课程涵盖零基础入门,高级进阶,在职提升三大主力内容,覆盖Java从入门到就业提升的全体系学习内容。全部Java视频教程免费观看,相关学习资料免费下载!对于火爆技术,每周一定时更新!如果想了解更多相关技术,可以到动力节点在线免费观看Mycat读写分离视频教程学习哦!
代码小兵57603-29 17:54
代码小兵69606-07 17:03
代码小兵22104-13 18:12
代码小兵22104-20 20:22