两阶段提交协议

两阶段提交协议可以很好得解决分布式事务问题,它可以使用 XA 来实现,XA 它包含两个部分:事务管理器和本地资源管理器。其中本地资源管理器往往由数据库实现,比如 Oracle、DB2 这些商业数据库都实现了 XA 接口,而事务管理器作为全局的协调者,负责各个本地资源的提交和回滚。
第一阶段
预先锁定资源,预先校验数据库 缓存中间件是否正常
第二阶段
提交事务或者回滚

两阶段提交协议存在问题:1、同步阻塞问题。 2、单点故障。 3、数据不一致。

TCC 方案(两阶段补偿方案)

TCC 方案的全称是:Try、Confirm、Cancel。
Try 阶段:对各个服务的资源做检测以及对资源进行锁定或者预留。
Confirm 阶段:在各个服务中执行实际的操作。
Cancel 阶段:如果任何一个服务的业务方法执行出错,那么这里就需要进行补偿动作。补偿动作具体来说,就是对已经执行成功的业务逻辑的回滚操作。
TCC 方案严重依赖回滚和补偿代码,最终的结果是:回滚代码逻辑复杂,业务代码很难维护。所以,TCC 方案的使用场景较少,但是也有使用的场景。

三阶段提交协议 3PC

协调者、参与者都引入了超时机制;三阶段 CanCommit、PreCommit(其中一个超时或者执行失败,则TM发起中断)和doCommit
优点 :引入超时机制,降低了协调者与参与者之间的阻塞范围;
缺点:在参与者接收到preCommit之后,如果出现网络分区,那么该参与者节点会继续执行事务的提交,而其他节点会执行中断事务,最终会造成数据的不一致。

seata

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。