分布式事务之二阶段提交和三阶段提交
先介绍两个概念:
TM(Transaction Manager):事务管理器
RM(Resource Manager):资源管理器
两阶段提交
给定两个服务,订单服务和支付服务之间的调用:
两阶段提交的第一阶段
1:事务开始,先由TM向每个服务发起请求用来获取执行状态,事务代码开始执行,锁定资源,但不提交
2:如果事务A在执行时出现异常,会返回执行状态(异常),如果执行正常,事务A执行会返回执行状态(正常);事务A同理
两阶段提交的第二阶段
3:如果上述"2"返回的是全部"正常",TM在向每个服务发起请求通知它们进行提交;
如果上述"2"返回的有一个是"异常",TM在向每个服务发起请求通知它们进行回滚。
三阶段提交
三阶段提交与二阶段提交相比,在两阶段提交的第一阶段前增加了询问的过程;
因为在事务执行时是锁定资源的,可能出现网络不通导致资源阻塞。
三阶段提交的第一阶段
0-1:TM在向每个服务发起请求询问网络是否正常
0-2:如果返回的是全部"正常",TM在执行事务操作;
如果返回的有一个是"异常",TM不在执行。
三阶段提交的第二阶段为二阶段提交的第一阶段
1:事务开始,先由TM向每个服务发起请求用来获取执行状态,事务代码开始执行,锁定资源,但不提交
2:如果事务A在执行时出现异常,会返回执行状态(异常),如果执行正常,事务A执行会返回执行状态(正常);事务A同理
三阶段提交的第三阶段为二阶段提交的第二阶段
3:如果上述"2"返回的是全部"正常",TM在向每个服务发起请求通知它们进行提交;
如果上述"2"返回的有一个是"异常",TM在向每个服务发起请求通知它们进行回滚。