分布式下的数据一致性问题(2PC算法)

背景

对于一个将数据副本分布在不同的分布式节点上的系统来说,如果对第一个节点的数据进行了更新操作并且更新成功后,却没有是的第二个节点上的数据得到相应的更新,于是在对第二个节点的数据进行读取操作时,获取的依然是旧数据(或者称为脏数据),这就是典型的分布式数据不一致的情况。

为了解决分布式一致性问题,在长期的探索中,涌现出了一大批经典的一致性协议和算法,其中最著名的就是二阶段提交协议、三阶段提交协议和Paxos算法。

2PC

2PC,是Two-Phase Commit的缩写,即二阶段提交,是计算机网络尤其是在数据库领域内,为了使基于分布式系统架构下的所有节点在事务处理过程中能够保持原子性和一致性而设计的一种算法。通常,二阶段提交协议也被认为是一种一致性协议,用来保证分布式系统数据的一致性。目前,绝大部分的关系型数据库都是采用二阶段提交协议来完成分布式事务处理的,利用该协议能够非常方便的完成所有分布式事务参与者的协调,统一决定事务的提交或者回滚,从而能够有效的保证分布式数据的一致性,因此,二阶段提交协议被广泛地应用在许多分布式系统中。

2PC原理如下图所示
在这里插入图片描述

优缺点

二阶段提交协议的优点:原理简单,实现方便。
二阶段提交协议的缺点:同步阻塞、单点问题、脑裂、太过保守。
如果一个管理集群中,同时出现2个Leader或者多个Leader,则称为脑裂现象

缺点描述
  • 同步阻塞
    二阶段提交协议存在的最明显也是最大的一个问题就是同步阻塞,这会极大地限制分布式系统的性能。在二阶段提交的执行过程中,所有参与该事务操作的逻辑都处于阻塞状态,也就是说,各个参与者在等待其他参与者响应的过程中,将无法进行其他任何操作。

  • 单点问题
    协调者的角色在整个二阶段的提交协议中起到了非常重要的作用。一旦协调者出现问题,那么整个二阶段提交流程将无法运转。

  • 太过保守
    如果在协调者指示参与者进行事务提交询问的过程中,参与者出现故障而导致协调者始终无法获取到所有参与者的响应信息的话,这时协调者只能依靠其自身的超时机制来判断是否需要中断事务,这样的策略显得比较保守。换句话说,二阶段提交协议没有设计较为完善的容错机制,任意一个节点的失败都会导致整个事务的失败。

发布了39 篇原创文章 · 获赞 15 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/sinat_35667067/article/details/104195935