ZooKeeper学习笔记一 一致性协议

莫道桑榆晚,为霞尚满天。这篇文章主要讲述ZooKeeper学习笔记一 一致性协议相关的知识,希望能为你提供帮助。
本文学习内容来自:《从Paxos到ZooKeeper分布式一致性原理与实践》 电子工业出版社
分布式架构分布式的特点:

  • 对等性
  • 并发性
  • 缺乏全局时钟
分布式环境的问题
  • 通信异常
  • 网络分区
  • 三态
  • 节点故障
从ACID到CAP/BASEACID
原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability)
分布式事务
分布式是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于分布式系统的不同节点之上。通常一个分布式事务中会涉及对多个数据源或业务系统的操作。
一个分布式事务可以看作是由多个分布式的操作序列组成的。分布式也可以被定义为一种嵌套型的事务,同时也就具有了ACID事务特性。但由于在分布式事务中,各个子事务的执行是分布式的,因此要实现一种能够保证ACID特性的分布式事务处理系统就显得格外复杂。
CAP定理
2000年7月,由Eric Brewer教授提出CAP猜想。
CAP理论告诉我们,一个分布式系统不可能同时满足一致性(C:Consistency)、可用性(A:Availability)和分区容错性(P:Partition tolerance)这三个基本需求,最多只能同时满足其中的两项。
BASE理论
BASE 是 Basically Available 基本可用、Soft state(弱状态)和Eventually consistent(最终一致性)的缩写。
一致性协议为了解决一致性问题,在长期的探索研究过程中,涌现出一批经典的一致性协议和算法,其中最著名的就是二阶段提交协议、三阶段提交协议和Paxos算法。
2PC2PC,是Two-Phase Commit的缩写,即二阶段提交,是计算机网络尤其是在数据库领域内,为了使基于分布式系统架构下的所有节点在进行事务处理过程中能够保持原子性和一致性而设计的一种算法。通常,二阶段提交协议也被认为是一种一致性协议,用来保证分布式系统数据的一致性。目前,绝大部分的关系型数据库都是采用二阶段提交协议来完成分布式事务处理的,利用该协议能够非常方便地完成所有分布式事务参与者的协调,统一决定事务的提交或回滚,从而能够有效地保证分布式数据一致性,因此二阶段提交协议被广泛地应用在许多分布式系统中。
2PC协议说明
阶段一 提交事务请求
  1. 事务询问
  2. 执行事务
  3. 各参与者向协调者反馈事务询问的响应
阶段二:执行事务提交
  1. 发送提交请求
  2. 事务提交
  3. 反馈事务提交结果
  4. 完成事务
【ZooKeeper学习笔记一 一致性协议】中断事务
  1. 发送回滚请求
  2. 事务回滚
  3. 反馈事务回滚结果
  4. 中断事务
优点:原理简单,实现方便
缺点:同步阻塞、单点问题、脑裂、太过保守
3PCThree-Phase Commit的缩写,即三阶段提交,是2PC的改进版,其将二阶段提交协议的提交事务请求过程一分为二,形成了由CanCommit 、PreCommit和do Commit三个阶段组成的事务处理协议。
阶段一:CanCommit
阶段二:PreCommit
阶段三:doCommit
Paxos 算法Paxos算法是莱斯利·兰伯特(Leslie Lamport)于1990年提出的一种基于消息传递且有高度容错特性的一致性算法,是目前公认的解决分布式一致性问题最有效的算法之一。
Paxos 算法的核心是一个一致性算法。
问题描述
假设有一组可以提出提案的进程集合,那么对于一个一致性算法来说需要保证以下几点:
  • 在这些被提出的提案中,只有一个会被选定
  • 如果没有提案被提出,那么就不会有被选定的提案
  • 当一个提案被选定后,进程应该可以获取被选定的提案信息
对于一致性来说,安全性需求如下:
  • 只有被提出的提案才能被选定
  • 只能有一个值被选定
  • 如果某个进程认为某个提案被选定了,那么这个提案必须是真的被选定的那个。
在Paxos算法中,有三种参与角色,我们用Propser、Acceptor和Learner来表示 。 在具体的实现中,一个进程可能充当不止一种角色。假设不同参与者之间可以通过收发消息来进行通信,那么:
  • 每个参与者以任意的速度执行,可能会因为出错而停止,也可能会重启。同时,即使一个提案被选定后,所有的参与者也都有可能失败或重启,因此除非那些失败或重启的参与者可以记录某些信息,否则将无法确定最终的值。
  • 消息在传输过程中可能会出现不可预知的延迟,也可能会重复或丢失,但是消息不会被损坏,即消息内容不会被篡改。
(暂时算法核心我理解不了,先不写了,理解以后再来补上。)



    推荐阅读