2PC与3PC区别

这里并不介绍2PC,3PC,只讲思考与区别

3PC准备阶段协调者发了些什么

如何判断是否可以提交不同的算法有不同的机制,但主要作用是确定Cohort具备基本的完成Commit条件,并不会执行事务操作

3PC和2PC在阶段上的区别

2PC是 提交事务请求 以及 执行事务提交

3PC将2PC的提交事务请求分成了CanCommit以及PreCommit
(不是某些网上说的“3PC的CanCommit阶段其实和2PC的准备阶段很像”,就是一部分而已)

3PC和2PC上超时判断的区别

2PC上只有协调者有超时判断
比如:在第二阶段事务提交时,协调者等待参与者反馈超时,会中断事务,因此被认为“保守”

3PC上参与者和协调者都有超时的判断
比如,对于参与者来说:在第三阶段doCommit时,参与者等待协调者发出commit或者abort响应超时,就执行了commit(概率事件,因为preCommit收到了Ack,认为大概率能够commit,因此解决了2PC“保守”的问题)

3PC和2PC的区别

对于协调者(Coordinator)和参与者(Cohort)都设置了超时机制(在2PC中,只有协调者拥有超时机制,即如果在一定时间内没有收到cohort的消息则默认失败)。
这个解决了2PC中:
保守,阻塞,单点故障的问题

2PC的准备阶段和提交阶段之间,插入预提交阶段,使3PC拥有CanCommit、PreCommit、DoCommit三个阶段。说白了,PreCommit是一个缓冲,保证了在最后提交阶段之前各参与节点的状态是一致的。
这个解决了2PC中:
保守

事务的预提交和提交的区别

这个还不是很理解,感觉就像sql里面的commit,没有commit也可以执行,但是并不会真正的改变表内容

refer

https://zh.wikipedia.org/wiki/%E4%BA%8C%E9%98%B6%E6%AE%B5%E6%8F%90%E4%BA%A4
https://zh.wikipedia.org/wiki/%E4%B8%89%E9%98%B6%E6%AE%B5%E6%8F%90%E4%BA%A4
http://csruiliu.github.io/blog/2016/05/30/intro_3PC/
http://www.hollischuang.com/archives/681

你可能感兴趣的:(2PC与3PC区别)