
准备阶段:在准备阶段,协调者将通知事务参与者准备提交或取消事务,写本地的redo和undo日志,但不提交,然后进入表决过程。在表决过程中,参与者将告知协调者自己的决策:同意(事务参与者本地作业执行成功)或取消(本地作业执行故障)
提交阶段:在该阶段,协调者将基于第一个阶段的投票结果进行决策:提交或取消。当且仅当所有的参与者同意提交事务,协调者才通知所有的参与者提交事务,否则协调者将通知所有的参与者取消事务。参与者在接收到协调者发来的消息后将执行相应的操作。
2PC存在的问题
三阶段提交协议是两阶段提交协议的改良版。是在协调者和参与者中都引入超时机制,并且把两阶段提交协议的第一个阶段分成了两步。因此,三阶段提交协议包含询问、锁资源、提交三个步骤。

两阶段提交协议存在的问题是,协调者在某些时刻如果失败了,整个事务就会阻塞。
三阶段提交分为三个阶段
CanCommit,协调者的流程(该流程与两阶段提交协议类似)
PreCommit:协调者将通知事务参与者准备提交或取消事务,写本地的redo和undo日志,但不提交。协调者的流程(与两阶段提交协议相比,多了一个PRECOMMIT状态)
DoCommit:在该阶段,协调者协议流程如下
三阶段提交的缺陷:相对于2PC,3PC主要解决单点故障问题,并减少阻塞,因为一旦参与者无法及时收到来自协调者的信息,他会默认执行COMMIT。而不会一直持有事务资源并处于阻塞状态。但是这种机制也会导致数据一致性问题,因为,由于网络原因,协调者发送的ABORT响应没有及时被参与者接收,那么参与者在等待超时之后执行了COMMIT操作。这样就和其他接到ABORT命令并执行回滚的参与者之间存在数据不一致的情况
无论是二阶段提交还是三阶段提交都无法彻底解决分布式的一致性问题。
与补偿模式不同,最大努力通知模式本质上是一种通知类的实现方案。

最大努力通知模式的基本思路是通知发送方在完成业务处理后向通知接收方发送通知消息。通知消息允许丢失,所以当消息的接收方没有成功消费消息时,消息的发送方还需要进行重复发送直到消费者消费成功或达到某种发送终止条件。一般,消息发送方可以设置复杂的通知规则,如采用15s、3m、10m、30m、1h、2h、6h、15h等阶梯式时间的通知方式。
在最大努力通知模式中,通知接收方也可以使用主动方所提供的查询和对账接口获取数据,用于恢复通知失败所导致的业务数据。
最大努力通知模式在通知类场景应用广泛,以支付宝为例,通过回调商户提供的回调接口,通过多次通知、查询对账等手段完成交易业务平台间的商户通知。最大努力通知模式适合于对业务最终一致性的时间敏感度比较低的场景,一般用于类似支付宝与商户集成类跨企业的业务活动。
最大努力通知包含如下组件