大数据学习——2PC算法
分布式下数据一致性问题
对于一个将数据副本分布在不同得分布式下的系统来说,如果对一个节点的数据进行更新,但是其他节点的数据却没有进行相应的更新,于是在读取其他节点的数据时,便不是最新的数据,即脏数据,这就是典型的数据不一直问题。
为解决这个问题,涌出了大批的算法和协议,其中较为经典的就是二次提交,三次提交,以及Paxos算法。
2PC概念
2PC是Two-Phaso-Commit的缩写,即二阶段提交,是计算机网络尤其是数据库领域内,为了使基于分布式系统架构下的所有节点在进行事务处理过程中,能够保持事务的原子性和一致性设计的一种算法。
二阶段提交协议被认为是一种一致性协议,用来保证分布式系统数据一致性,绝大部分的关系型数据库都采用二阶段提交协议来完成事务的处理。
2PC提交过程
阶段一:提交事务请求+执行事务
1.事务询问:协调者向所有的参与者发起事务内容,询问是否可以执行事务的提交,并开始等待各参与者的响应。
2. 执行事务:各参与者节点执行事务操作
3. 各参与者向协调者反馈事务询问响应:成功返回yes,失败返回no
该阶段在形式上近似于协调者组织参与者对一次事务进行操作的投票表态过程,因此二阶段提交协议也被称为:“投票阶段”。
阶段二:事务提交
通常有两种情况:
一、协调这从所有的参与者得到的反馈都是yes
1.发送提交请求
2.事务提交
3.反馈事提交结果
4.完成事务
二、任何一个参与者返回了no反馈,则中断事务
1.发送回滚请求
2.回滚事务
3.反馈回滚结果
4.中断事务
总结
简单来说,二阶段提交将一个事务的处理过程分为投票和执行两个过程,其核心是对每个事务都采用先尝试,后提交的处理方式。
2PC优缺点
-
优点
原理简单,实现方便 -
缺点
同步阻塞:各个参与者在等待其他参与者响应的过程中,将无法进行其他任何操作,性能较低
单点问题:协调者只有1个,一旦出现问题,整个协议无法运转
太过保守:任何一个参与者出现问题,都会发生回滚