答:通知回滚。
2. 全部prepare后,某个RM崩溃怎么处理?
答:5.7以前崩溃的那个RM会丢失事务,导致别人都提交了,他被回滚了。5.7之后修复了,重连后还能继续提交。
- commit时,某个RM崩溃了怎么办?
答:RM恢复之后重试,要是重试还是失败就要发送告警,人工进行干预。
XA协议存在的问题
- 同步阻塞问题
全局事务内部包含了多个独立的事务分支,这一组事务分支,这一组事务分支要不都成功,要不都失败。各个事务分支的ACID特性构成了全局事务的ACID特性。那么mysql的效率也会降低
2. 单点故障
TM是单点的,一旦TM发生故障,参与者RM会一直阻塞下去。尤其再第二阶段,TM发生故障,那么所有的RM都还处于锁定资源的状态中,而无法完成事务操作。成熟的XA框架需要考虑TM的高可用性。
- 数据不一致
在提交阶段的时候,TM向RM发送commit请求后,发生了局部网络异常或者在发送commit请求的时候TM故障了,会导致部分RM收到commit请求并执行,而部分RM未收到commit请求则无法进行事务提交,就会造成数据不一致的情况。
支持XA的框架
XA方面的框架,比较推荐Atomikos和narayana
二、柔性事务
如果将实现了ACID的事务要素的事务称为刚性事务的话,那么基于BASE理论的事务则称为柔性事务。
BASE:
-
Basically Available (基本可用)
-
Soft state(柔性状态) 允许系统状态更新有一定的延时
-
Eventually consistent(最终一致性)
柔性事务常见模式
1. TCC
TCC模式将每个服务的业务操作分为两个阶段。第一个阶段检查并预留相关资源(Try),