深入理解分布式事务2PC、3PC、TCC补偿协议

一. 分布式事务:

随着微服务的兴起,越来越多的微服务都拥有自己的数据库,而微服务之间的事务问题也成为了必须解决的问题。

二. XA协议:

XA协议是Oracle Tuxedo系统提出的基于数据库层面对于分布式事务的解决方案,它包括2PC和3PC阶段提交。

三. 2PC、3PC阶段提交:

 2PC提交:①协调者向所有参与者询问“你们是否可以完成本次事务?”即对参与者的事务进行本地数据库执行, 确认能否执行,并且不
         进行commit操作。
         ②如果所有参与者返回"没问题",那协调者通知所有参与者进行提交操作,并且将提交后的消息ACK返回给协调者
         
  注意:2PC阶段提交只有协调者设置超时时间。

 3PC提交:①:发消息询问当前所有参与者是否有阻塞、无法释放资源等情况,如果没有进行第②操作
         ②:事务询问操作
         ③:提交/取消
         
注意:3PC对于协调者(Coordinator)和参与者(Partcipant)都设置了超时时间。而2PC只有协调者才拥有超时机制。
这解决了一个什么问题呢?这个优化点,主要是避免了参与者在长时间无法与协调者节点通讯(协调者挂掉了)的情况下
法释放资源的问题,因为参与者自身拥有超时机制会在超时后,自动进行本地commit从而进行释放资源。而这种机制也侧
面降低了整个事务的阻塞   时间和范围。

四.TCC补偿事务

TCC事务补偿分为三步:Try阶段:主要是对业务系统做检测及资源预留。
                  Confirm阶段:确认执行业务操作。
                  Cancel阶段:取消执行业务操作。

我的理解是TCC属于业务上的分段提交,Try,confirm,cancel都是对应的一段业务逻辑的操作,先预留资源,预留成功后进行确认,不成功就取消,例如转账先冻结资金,进行一系列的余额各方面的检查,发现符合条件就对账户对应的资金状态改为冻结,确认阶段修改状态为扣除,取消的话就把冻结的资金加回原账户,其对应的数据库的操作每段都是一个完整的事物。
TCC与XA协议直接的区别在于它是写在业务层面的,而XA是数据库层面的,不同数据库之间的事务是特别耗费数据库资源的

你可能感兴趣的:(分布式事务一致性解决案例,面试)