做医药商城网站的公司吗,机票售票网站开发,多合一网站源码,帝国cms 网站搬家3阶段提交协议#xff08;3pc#xff09;
1 简介
三阶段提交协议是一个强一致、中心化的原子提交协议。解决了分布式事务、副本容错等分布式问题。其核心思想是将2PC的二阶段提交协议的“准备阶段”一分为二#xff0c;形成了由CanCommit、PreCommit、DoCommit三个阶段组成…3阶段提交协议3pc
1 简介
三阶段提交协议是一个强一致、中心化的原子提交协议。解决了分布式事务、副本容错等分布式问题。其核心思想是将2PC的二阶段提交协议的“准备阶段”一分为二形成了由CanCommit、PreCommit、DoCommit三个阶段组成的事务处理协议。
一、阶段一CanCommit事务询问
协调者向所有的参与者发送一个包含事务内容的CanCommit请求询问是否可以执行事务提交操作。 参与者根据自身的状态判断是否可以执行事务提交并返回响应给协调者。
二、阶段二PreCommit准备提交
协调者在接收到所有参与者的CanCommit响应后进行决策。如果所有参与者都返回可以提交则进入PreCommit阶段。 协调者向所有参与者发送PreCommit请求通知参与者准备提交事务。 参与者收到PreCommit请求后会执行事务操作但此时事务并未真正提交。参与者会记录当前事务的日志以便在后续阶段进行恢复。
三、阶段三DoCommit执行提交
在PreCommit阶段结束后协调者再次向所有参与者发送DoCommit请求通知参与者真正提交事务。 参与者收到DoCommit请求后会正式提交事务并释放相关资源。 2 相比2pc的提升
三阶段提交相较于二阶段提交它增加了两点修改一是增加了CanCommit阶段把整个协商过程扩展到三个阶段来协商二是增加了超时机制。两个修改分别解决了问题呢第一个减少了事务资源的锁定范围这是CanCommit阶段来实现的CanCommit阶段它可以排除掉一些因为网络原因还有因为一些自身的问题不能参与不能完成本次全局事务的参与者把它排除掉之后才会锁走事务资源的范围。另一个它解决的问题是降低了同步阻塞参与者在等待协调者指令超时之后他会执行默认的操作。比方说第二阶段参与者在等待协调者的指令超时之后他会默认执行中断本次事务的操作也就是说中断本地的分支事务。第三阶段参与者未能在超时时间内接受到协调者的指令那么他会默认执行Commit操作。因为进入到第三阶段的话本次全局事务提交的可能性已经非常大了因为我们经过第一阶段网络原因的排除以及参与者自身问题的排除经过第二阶段参与者也确实可以执行本次分支事务。
3 3pc问题
1.增加了一轮消息增加了复杂度和协商效率。一般在生产环境中很少用3pc一般都是使用2pc像seta分布式框架以及数据库XA协议都是基于2pc算法。
2.数据不一致超时机制导致。如果在DoCommit阶段协调者或参与者出现故障导致无法完成事务提交参与者会在等待超时后根据之前的PreCommit阶段记录的事务日志进行恢复操作。