当前位置:   article > 正文

从Paxos到Zookeeper:分布性一致性原理与实践(基础理论前提)

从Paxos到Zookeeper:分布性一致性原理与实践(基础理论前提)

CAP定理是分布式系统领域的一个经典定理。分布式系统在设计过程中,以CAP定理作为考虑因素,对于系统的一致性及可用性做出适当权衡。在此前提下,BASE理论应运而生,用于满足分布式系统对于高可用性及扩展性的要求。于此同时,分布式系统的一致性协议也在不断发展,衍生了例如两阶段提交算法(2PC)三阶段提交协议(3PC)以及Paxos算法

本文将对以上内容做出介绍。

本文目录

一. 前言

二. 从ACID到CAP/BASE

1. CAP理论

2. BASE理论

3. 小结

三. 一致性协议

1. 两阶段提交算法(2PC)

2. 三阶段提交协议(3PC)

3. Paxos算法

(1) 基本角色

(2) 基本阶段

(3) 决策达成

小结


区块链可以理解为一个分布式账本,记录了所有交易数据。共识机制的主要作用就是确保节点上所有节点上账本的数据保持一致,避免因为恶意分区导致的不一致。

一. 前言

计算机系统向网络化和微型化的发展日趋明显,传统的集中式处理模式越来越不能适应人们的需求。很多企业开始放弃原来的大型主机,改用小型机和普通PC服务器来搭建分布式计算机系统。

分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。

一个标准的分布式系统在没有任何业务逻辑约束的情况下,有如下特征:

  • 分布性:多台计算机在空间上随意分布、机器的分布情况随时变动
  • 对等性:分布式系统中的计算机没有主从之分(没有控制整个系统的主机、也没有被控制的从机)组成分布式系统的节点都是对等的。
  • 并发性:并发性非常常见,如何准确并协调分布式并发操作成为分布式架构与设计的最大挑战之一。
  • 缺乏全局时钟:没有一个准确的全局的时空控制来保证顺序。
  • 故障总会发生:系统设计时不放过任何异常情况。

二. 从ACID到CAP/BASE

ACID理论此处不再赘述,建议查询了解。

1. CAP理论

分布式系统设计过程中需要考虑CAP理论

CAP理论中指出在一个分布式系统中,不可能同时满足三个条件:

  • 一致性 - Consistency :所有节点在同一时间具有相同的数据视图,一次读操作要么返回最新的写操作结果,要么返回一个错误
  • 可用性 - Availability:每次请求都能收到非错误的相应,即使请求需要访问的节点有部分是故障的
  • 分区容忍性 - Partion Tolerance:系统在遭遇任意数量的信息丢失或者延迟的情况下仍能继续运行

由于分布式系统中分区容忍性必须满足,所以系统需要在一致性和可用性之间权衡。常见策略有CP和AP

2. BASE理论

BASE理论用于满足现代分布式系统对高可用性和可扩展性的需求:

通过基本可用、软状态和最终一致性原则,为分布式系统提供了一种在高可用性和一致性之间进行权衡的方法。与传统的ACID模型相比,BASE理论更适合于现代大规模分布式系统,特别是那些需要处理高并发和海量数据的场景。

  1. 基本可用(Basically Available)系统出现故障时,仍能保证核心功能的可用性,而不要求系统完全正常运行。某些功能可以降级、增加响应时间、或者部分不可用,但系统总体上仍能够提供服务。
  2. 软状态(Soft State)允许系统存在中间状态,数据的一致性不必实时保证。这与ACID中的强一致性形成对比。系统中的数据可以在不同节点之间不同步,并在后台逐步实现最终一致性。这种设计方式可以提高系统的可用性和性能。
  3. 最终一致性(Eventual Consistency):系统中所有数据在经过一段时间后最终会达到一致性。即系统不要求数据在任何时刻都保持一致,但保证没有新的更新操作发生后,所有节点上的数据最终会一致。最终一致性是弱一致性的一种形式,适用于高可用性和分布式系统。

BASE理论是分布式设计的一种指导原则,尤其适用于高可用性需求比较高的系统。BASE理论与传统的ACID(原子性、一致性、隔离性、持久性)特性相对立,强调通过牺牲强一致性来获得更高的可用性和扩展性。

 

3. 小结

现代型关系数据库中,大多都会采用同步和异步的方式来实现主备数据复制技术。

  • 同步方式中,数据的复制过程通常是更新事务的一部分,因此在事务完成后,主备数据库的数据就会达成一致。
  • 异步方式中,备库的更新往往会存在延时,取决于事务日志在主备数据库之中传输的时间长短,如果传输时间过长或者甚至在日志传输过程中出现异常导致无法及时将事务应用到备库上,那么从备库中读取的数据显然是留的,出现了数据不一致的情况。

但是不管是采用多次重试还是人为数据订正,关系型数据库还是能保证最终数据达到一致。

总的来说,BASE理论面向的是大型高可用扩展的分布式系统,和传统ACID的特性是相反的,完全不同于ACID的强一致性模型,而是提出通过牺牲强一致性来获得可用性,并允许数据在一段时间内是不一致的,但最终达到一致状态。但同时,实际的分布式场景中,不同业务单元和组件对数据一致性的要求是不同的,因此在具体的分布式架构设计过程中,ACID特性与BASE理论往往又会结合在一起使用。

三. 一致性协议

由于分布式系统在设计过程中往往会在系统的可用性和数据一致性间进行反复权衡,于是产生了一系列的一致性协议。其中最出名的有二阶段提交协议、三阶段提交协议和Paxos算法

  • 分布式系统中,每一个节点虽然都能够明确知道自己在进行事务进程中的结果,但却无法直接获取到其他分布式节点的操作结果。
  • 当一个事务操作需要跨越多个分布式节点的时候,为了保证事务处理的ACID特性,就需要引入一个成为“协调者”的组件来统一调度所有分布式节点的执行逻辑,这些被调度的分布式节点则称为“参与者”。
  • 协调者负责调度参与者的行为,并最终决定这些参与者是否要把事务真正提交。

1. 两阶段提交算法(2PC)

两节点算法能够使基于分布式系统架构下的所有节点在进行事务处理过程中能够保证原子性和一致性而设计的一种算法。

2PC(Two-Phase Commit)是一种简单且使用广泛的分布式事务协议,分为两个阶段:准备阶段和提交阶段

阶段1:准备阶段

1. 协调者向所有参与者发送“准备提交”请求

2. 每个参与者接收到请求后,执行本地事务,但不提交,记录日志并锁定资源,然后回复“准备就绪”或失败

阶段2:提交阶段

1. 协调者收到所有参与者的“准备就绪”响应后,向所有参与者发送“提交”命令。如果有任意一个参与者返回失败,则发送“回滚”命令。

2. 参与者接收到“提交”命令后,提交本地事务;接收到“回滚”命令后,回滚本地事务。

2PC的优缺点:

  • 优点:简单易实现,能够确保事务一致性。
  • 缺点:存在阻塞问题。如果协调者在提交阶段失败,参与者将一直等待,导致资源被锁定。此外,2PC不能很好的处理网络分区问题。任何一个节点的失败都会导致整个事务的失败。

2. 三阶段提交协议(3PC)

3PC是对2PC的改进,增加了一个阶段以减少阻塞和提升容错能力。分为三个阶段:准备阶段、预提交阶段和提交阶段。

阶段1:准备阶段:

1. 协调者向所有参与者发送“可以提交”请求。

2. 参与者接收到请求后,检查是否可以提交,并返回“准备就绪”或“失败”

阶段2:预提交阶段:

1. 如果所有参与者都返回“准备就绪”,协调者发送“预提交”请求。如果有任何一个参与者返回“失败”,则发送“回滚”请求

2. 参与者接收到“提交”命令后,提交本地事务;接收到“回滚”命令后,回滚本地事务。

阶段3:提交阶段:

1. 协调者收到所有参与者的“已预提交”响应后,发送“提交”请求。如果有任何一个参与者返回“失败”,则发送“回滚”请求。

2. 参与者接收到“提交”命令后,提交本地事务;接收到“回滚”命令后,回滚本地事务。

3PC的优缺点:

  • 优点:通过增加预提交阶段,减少了阻塞问题,提高了容错性和可恢复性。即使在协调失败的情况下,参与者也能根据日志决定继续提交还是回滚
  • 缺点:协议更加复杂,增加了通信开销。虽然提高了容错性,但在网络分区上仍存在局限性。

2PC和3PC都是用于分布式系统中实现事务一致性的协议。2PC结构简单,但存在阻塞问题和网络分区问题,3PC通过引入预提交阶段,减少了阻塞,提高了容错性,但增加了协议的复杂性和通信开销。根据具体的应用场景和系统需求,可以选择合适的协议来实现分布式事务的一致性。

3. Paxos算法

Paxos算法的核心在于多数派原则,即只要大多数(超过半数)的Accepters统一某个提案,该提案就可以被确定下来。确保大多数派的参与是保证算法正确性和容错性的关键

Paxos是一种分布式共识算法,用于存在故障的分布式系统中实现一致性。主要目标是确保多节点在不可信的网络环境中能够就某一值达成一致,即使有部分节点发生故障。Paxos算法的基本概念和工作原理如下:

(1) 基本角色

Paxos算法定义了三个主要角色:

  • 提议者(Proposer):提出某个值,并试图让这个值被所有节点接受
  • 接受者(Accaptor):参与投票,决定是否接受提议者提出的值
  • 学习者(Learner):最终学习被接受的值

(2) 基本阶段

Paxos算法可以分为两个主要阶段:

阶段1:Prepare阶段

  • 提议者选择一个提案编号,并向所有接受者发送Prepare请求
  • 每个接受者接收到Prepare请求后,比较提案编号与其已经处理的最大提案编号,如果当前提案编号较大,接受者会承诺不再接受编号较小的提案,并回复提议者其已接收的最高编号的提案(如果有)。

阶段2:Accept阶段:

  • 提议者在收到许多接受者的响应后,根据最高编号的提案确定一个值(如果没有填则使用自己的初始值),并向所有接受者发送Accept请求,包含提案编号和提案值。
  • 每个接受者接收到Accept请求后,如果其提案编号不小于其已承诺的最大提案编号,则接受该提案,并向提案者确认。

(3) 决策达成

  • 当提议者收到多数接受者的确认后,表示该值已经被接受,提议者可以通知所有学习者该值。
  • 学习者在接收到通知后,学习并记录该值。

Paxos算法的特点:

1. 容错性:Paxos算法能够容忍少量接受者节点的故障,只要多数接受者节点正常工作,系统就能达成共识。

2. 安全性:Paxos算法保证只有一个值会被最终决定,即不会出现分叉或矛盾的决策。

3. 活性:在理想网络条件下(无网络分区、无无限延迟),Paxos算法能够最终达成共识,但在实际应用中可能需要优化以提高活性。

小结

二阶段提交协议解决了分布式事务的原子性问题,多个参与者要么都执行成功,要么都执行失败

三阶段提交协议解决了诸如同步阻塞、无限期等待和“脑裂”等问题

Paxos算法引入了“过半”的概念,即少数服从多数的原则,同时,Paxos算法支持分布式节点角色之间的轮换,极大地避免了分布式单点的出现,因此Paxos既解决了无限期等待问题,也解决了“脑裂”问题,是目前来说最优秀的分布式一致性协议之一。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/984218
推荐阅读
相关标签
  

闽ICP备14008679号