2pc和3pc的区别是:1.3pc比2pc多了一个can commit阶段,减少了不必要的资源浪费;2. 引入超时机制,同时在协调者和参与者中都引入超时机制。其中,引入超时机制。同时在协调者和参与者中都引入超时机制。
一、2pc和3pc的区别
1.3pc比2pc多了一个can commit阶段,减少了不必要的资源浪费。因为2pc在名列前茅阶段会占用资源,而3pc在这个阶段不占用资源,只是校验一下sql,如果不能执行,就直接返回,减少了资源占用。
2.引入超时机制。同时在协调者和参与者中都引入超时机制。
2pc:只有协调者有超时机制,超时后,发送回滚指令。
3pc:协调者和参与者都有超时机制。
协调者超时: can commit,pre commit中,如果收不到参与者的反馈,则协调者向参与者发送中断指令。
参与者超时: pre commit阶段,参与者进行中断; do commit阶段,参与者进行提交。
两阶段提交(2PC)
两阶段提交又称2PC(two-phase commit protocol),2pc是一个非常经典的强一致、中心化的原子提交协议。这里所说的中心化是指协议中有两类节点:一个是中心化协调者节点(coordinator)和N个参与者节点(partcipant)。
三阶段提交(3PC)
三阶段提交又称3PC,其在两阶段提交的基础上增加了CanCommit阶段,并引入了超时机制。一旦事务参与者迟迟没有收到协调者的Commit请求,就会自动进行本地commit,这样相对有效地解决了协调者单点故障的问题。
延伸阅读:
二、事务的基本概念
就是一个程序执行单元,里面的操作要么全部执行成功,要么全部执行失败,不允许只成功一半另外一半执行失败的事情发生。例如一段事务代码做了两次数据库更新操作,那么这两次数据库操作要么全部执行成功,要么全部回滚。
事务有4个非常重要的特性,即我们常说的(ACID)。
Atomicity(原子性):是说事务是一个不可分割的整体,所有操作要么全做,要么全不做;只要事务中有一个操作出错,回滚到事务开始前的状态的话,那么之前已经执行的所有操作都是无效的,都应该回滚到开始前的状态。
Consistency(一致性):是说事务执行前后,数据从一个状态到另一个状态必须是一致的,比如A向B转账( A、B的总金额就是一个一致性状态),不可能出现A扣了钱,B却没收到的情况发生。
Isolation(隔离性): 多个并发事务之间相互隔离,不能互相干扰。关于事务的隔离性,可能不是特别好理解,这里的并发事务是指两个事务操作了同一份数据的情况;而对于并发事务操作同一份数据的隔离性问题,则是要求不能出现脏读、幻读的情况,即事务A不能读取事务B还没有提交的数据,或者在事务A读取数据进行更新操作时,不允许事务B率先更新掉这条数据。而为了解决这个问题,常用的手段就是加锁了,对于数据库来说就是通过数据库的相关锁机制来保证。
Durablity(持久性):事务完成后,对数据库的更改是永久保存的,不能回滚。
以上就是关于2pc和3pc的区别到底是什么的内容希望对大家有帮助。