分布式事物理解

我的未来我决定 提交于 2020-02-29 08:43:35

1 XA/JTA 协议

这种分布式事物都要求数据库提拱支持,也就是常说的XA。 XA一般有二阶断提交和三阶断提交两种。
JTA是JAVA是针对XA开发的一套接口,目前有一些开源软件有JTA进行实现。比如:atomiko。
第一步:向两个数据执行SQL语句

第二步:JTA执行预提交


第三步: 预提交都成功就执行commit,只要有一个失败就执行rollback。

为什么会有三阶断?
降低失败的概率:因为同时commit,如果因为网络问题,或者tomcat本身挂掉了,那么三阶断的commit就不会执行,当然要会有一个问题,三阶断的commit也失败了怎么办?所以说它的最终一致性不是100%,只能99.999%,对于公司够用了。剩下的可以允许人工处理。

2 TCC

代表 tcc-transaction。
tcc是针对服务,不针对数据库。目的一样,最终D一致性。TCC的try阶断相当于一个软状态。对于库存,相当于冻结状态。TCC的要求是每个要参与分布式的服务都需要实现一个TCC的接口,提供try,confirm,cancel方法。也有一个事物协调器,类似JTA。由它来执行confirm,cancel方法。是不是与JTA很像。

3 AT

典型代表seata。 这种分布式事物对数据库,服务都没有额外要求。但是它要单独部署一个事物协调器。它主要是解决微服务之间的分布式事物。如果涉及到外部应用就要用TCC,因为外部应用无法控制别人的数据库。所以说AT其实与XA类似。 第一步: 执行SQL

第二步: 全部执行完后,通知协调器。协调器发布commit。如果有一个commit失败,那么终步,对失败的服务发布undo指令,进行补偿。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!