分布式事物:
XA/JTA规范(XA是一个规范,JTA是java根据XA实现的)
两阶段提交,首先预提交给协调器,然后通过协调器(类似于zk)进行提交、回滚操作; 一般分布式事物无法100%解决ACID,最多99.9%解决;
三阶段提交,四阶段提交...
=> 解决方案:日志记录 可以把commit 失败的情况(很少) 进行补偿
JTA: 开源框架atomikos、weblogic
atomikos中两阶段提交最后commit的底层实现:
两个事物分别有一个唯一的事物id,然后进行两次预提交,最后再提交,回滚
JTA的不足:
效率低下(CAP)满足了CP
BASE理论(最终一直性与补偿机制):
基本可用:允许部分损失
软状态:下单 操作和送券操作可以不同时满足(送券操作允许延迟)
最终一致性:经过一段时间之后,下单 和 送券都同时满足
柔性事物:
1.最终一致性,最大努力通知(不行,再提供查询的接口)
2.TCC(try(预留,锁定)-confirm(确认,提交)-cancel(回滚))两阶段补偿型方案
XA/JTA与TCC的区别:
1.XA/JTA是资源型的分布式事物(锁了很多表)
2.TCC是业务层的分布式事物(分阶段的提交事务=>锁定资源)
(失败重试...)
幂等性:
支付宝tcc,相当于是一个协调器,自动的提交与取消操作
3.基于Rocket Mq
...