一个事务操作需要跨越多个分布式节点的时候为了保持事务处理的acid特性,需要有一个协调者的组件来统一调度所有的分布式节点的执行逻辑这个协调者需要做两项工莋,一是负责协调参与者的行为二是最终决定参与者是否要把最终的事务进行真正的提交,基于这个思想衍生出二阶提交和三阶提交兩种协议。
第一阶段:提交事务请求(投票阶段)
- 将事务内容发送给参与者并询问是否可以进行事务提交
- 参与者执行事务,将执行内容計入事务日志
- 参与者向协调者返回执行结果
第二阶段:执行事务提交
因为第一阶段会产生两种结果执行成功,或者执行失败所以这个階段包含两种可能。
3pc是在2pc的基础上进行了改进提出了三段提交协议
- 事务询问,询问是否可以执行事务提交操作等待参与者的反应
- 事务嘚参与者向协调者进行相应,反馈yes进入预备状态,否则反馈no
由于阶段一同样会有两种结果所以此阶段包含两种可能
执行事务预提交(返回的结果都为yes)
- 各参与者向协调者反馈事务执行的相应
该阶段将真正的将事务进行提交,会存在以下两种可能
需要注意的是一但进入階段三,可能会出现一下两种故障
- 协调者跟参与者网络不同
无论出现那种故障,最终都会导致参与者无法收到协调者的命令针对这种異常,参与者在等待超时之后继续进行事务提交。
发布了3 篇原创文章 · 获赞 0 · 访问量 186