分布式事务:在分布式系统中一次操作需要由多个服务协同完成,这种由不同的服务之间通过网络协同完成的事务称为分布式事务。
七种:2PC,3PC,TCC,Saga,本地事务表,MQ事务消息,最大努力通知。
1 2PC
两阶段提交,将事物的提交过程分为资源准备阶段和资源提交阶段,并且由十五协调者来协调事物参与者,如果准备阶段所有事物参与者都预留资源成功,则进行第二阶段的资源提交,否则事务协调者回滚资源。
2 3PC:
3PC,三阶段提交协议,是二阶段提交协议的改进版本,三阶段提交有两个改动点:
(1)在协调者和参与者中都引入超时机制
(2)在第一阶段和第二阶段中插入一个准备阶段,保证了在最后提交阶段之前各参与节点的状态是一致的。
所以3PC会分为3个阶段,CanCommit 准备阶段、PreCommit 预提交阶段、DoCommit 提交阶段。
3 TCC:Try Confirm Cancel,是应用层的两段提交,对代码侵入性强
4 Saga事务:核心思想是将长事务拆分成多个本地短事务并依次正常提交,如果所有短事务均执行成功,那么分布式事务提交;如果出现某个参与者执行本地事务失败,使分布式事务回到最初的状态。Saga事务协议如下:
(1)每个Saga事务由一系列幂等的有序子事务(sub-transaction)Ti组成。
(2)每个Ti都有对应的幂等补偿动作Ci,补偿动作用于撤销Ti造成的结果。
5 本地消息表:将分布式事务拆分成本地事务进行处理,角色:事务主动发起方和事务被动发起方。事务主动发起方需要额外新建事务消息表,并在本地事务中完成事务处理和记录事务消息,并轮询事务消息表的事务发送事务消息,事务被动方基于消息中间件消费事务消息表中的事务。这样可以避免以下两种情况导致的数据不一致性:业务处理成功、事务消息发送失败;业务处理失败,消息发送成功。
6 MQ事务消息的执行流程:基于MQ的分布式事务方案本质上是对本地消息表的封装,整体流程与本地消息表一致,唯一不同的就是将本地消息表存在了MQ内部,而不是业务数据库中。
7 最大努力通知:最大努力通知也称为定期校对,是对MQ事务方案的进一步优化。它在事务主动方增加了消息校对的接口,如果事务被动方没有接收到主动方发送的消息,此时可以调用事务主动方提供的消息校对的接口主动获取。
在可靠消息事务中,事务主动方需要将消息发送出去,并且让接收方成功接收消息,这种可靠性发送是由事务主动方保证的;但是最大努力通知,事务主动方仅仅是尽最大努力(重试,轮询....)将事务发送给事务接收方,所以存在事务被动方接收不到消息的情况,此时需要事务被动方主动调用事务主动方的消息校对接口查询业务消息并消费,这种通知的可靠性是由事务被动方保证的。
所以最大努力通知适用于业务通知类型,例如微信交易的结果,就是通过最大努力通知方式通知各个商户,既有回调通知,也有交易查询接口。
参考:https://blog.csdn.net/a745233700/article/details/122402303
标签:阶段,事务,七种,消息,提交,主动,分布式 From: https://www.cnblogs.com/xing54321/p/17149845.html