前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ZooKeeper快速入门系列(3) | Zookeeper的内部原理(六大原理)

ZooKeeper快速入门系列(3) | Zookeeper的内部原理(六大原理)

作者头像
不温卜火
发布2020-10-28 15:19:51
4210
发布2020-10-28 15:19:51
举报
文章被收录于专栏:不温卜火

经过上一篇博文的简单介绍,相信大家对ZooKeeper有了更深一步的了解,那么,此篇博文,开始讲述Zookeeper的内部原理。

1. 选举机制(重点)

过程详解: (1)服务器1启动,发起一次选举。服务器1投自己一票。此时服务器1票数一票,不够半数以上(3票),选举无法完成,服务器1状态保持为LOOKING; (2)服务器2启动,再发起一次选举。服务器1和2分别投自己一票并交换选票信息:此时服务器1发现服务器2的ID比自己目前投票推举的(服务器1)大,更改选票为推举服务器2。此时服务器1票数0票,服务器2票数2票,没有半数以上结果,选举无法完成,服务器1,2状态保持LOOKING (3)服务器3启动,发起一次选举。此时服务器1和2都会更改选票为服务器3。此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。此时服务器3的票数已经超过半数,服务器3当选Leader。服务器1,2更改状态为FOLLOWING,服务器3更改状态为LEADING; (4)服务器4启动,发起一次选举。此时服务器1,2,3已经不是LOOKING状态,不会更改选票信息。交换选票信息结果:服务器3为3票,服务器4为1票。此时服务器4服从多数,更改选票信息为服务器3,并更改状态为FOLLOWING; (5)服务器5启动,同4一样当小弟。

2. 节点类型

2.1 Znode有两种类型:

短暂(ephemeral):客户端和服务器端断开连接后,创建的节点自动删除 持久(persistent):客户端和服务器端断开连接后,创建的节点不删除

2.2 Znode有四种形式的目录节点(默认是persistent )

  1. 持久化目录节点(PERSISTENT) 客户端与zookeeper断开连接后,该节点依旧存在
  2. 持久化顺序编号目录节点(PERSISTENT_SEQUENTIAL) 客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
  3. 临时目录节点(EPHEMERAL) 客户端与zookeeper断开连接后,该节点被删除
  4. 临时顺序编号目录节点(EPHEMERAL_SEQUENTIAL) 客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

说明:创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护 注意:在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序

4. 监听器原理(重点)

1.监听原理详解:

2. 常见的监听:

  • 1. 监听节点数据的变化:get path [watch]
  • 2. 监听子节点增减的变化:ls path [watch]

5. Paxos算法

  Paxos算法一种基于消息传递且具有高度容错特性的一致性算法。   分布式系统中的节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing)。基于消息传递通信模型的分布式系统,不可避免的会发生以下错误:进程可能会慢、被杀死或者重启,消息可能会延迟、丢失、重复,在基础 Paxos 场景中,先不考虑可能出现消息篡改即拜占庭错误的情况。Paxos 算法解决的问题是在一个可能发生上述异常的分布式系统中如何就某个值达成一致,保证不论发生以上任何异常,都不会破坏决议的一致性。

5.1 图形解释

  在一个Paxos系统中,首先将所有节点划分为Proposers,Acceptors,和Learners。(每个节点都可以身兼数职)

一个完整的Paxos算法流程分为三个阶段: 1. Preposer阶段

  • 1.Proposer向Acceptors发出Prepare请求Promise(承诺)
  • 2.Acceptors针对收到的Prepare请求进行Promise承诺

2. Accept阶段

  • Proposer收到多数Acceptors承诺的Promise后,向Accepter发出Propose请求
  • 2.Acceptors针对收到的Propose请求进行Accept处理

2.Learn阶段 Proposer将形成的决议发送给所有Learners

5.2 Paxos算法流程中的每条消息描述如下

  1. Prepare: Proposer生成全局唯一且递增的Proposal ID (可使用时间戳加Server ID),向所有Acceptors发送Prepare请求,这里无需携带提案内容,只携带Proposal ID即可。
  2. Promise: Acceptors收到Prepare请求后,做出“两个承诺,一个应答”。 两个承诺: a. 不再接受Proposal ID小于等于(注意:这里是<= )当前请求的Prepare请求。 b. 不再接受Proposal ID小于(注意:这里是< )当前请求的Propose请求。 一个应答: c. 不违背以前做出的承诺下,回复已经Accept过的提案中Proposal ID最大的那个提案的Value和Proposal ID,没有则返回空值。
  3. Propose: Proposer 收到多数Acceptors的Promise应答后,从应答中选择Proposal ID最大的提案的Value,作为本次要发起的提案。如果所有应答的提案Value均为空值,则可以自己随意决定提案Value。然后携带当前Proposal ID,向所有Acceptors发送Propose请求。
  4. Accept: Acceptor收到Propose请求后,在不违背自己之前做出的承诺下,接受并持久化当前Proposal ID和提案Value。
  5. Learn: Proposer收到多数Acceptors的Accept后,决议形成,将形成的决议发送给所有Learners。

下面针对上述描述做三种情况的推演举例:为了简化流程,我们这里不设置Learner。

  • 情况1:
  • 情况2:

  Paxos算法缺陷:在网络复杂的情况下,一个应用Paxos算法的分布式系统,可能很久无法收敛,甚至陷入活锁的情况。

  • 情况3:

  造成这种情况的原因是系统中有一个以上的Proposer,多个Proposers相互争夺Acceptors,造成迟迟无法达成一致的情况。针对这种情况,一种改进的Paxos算法被提出:从系统中选出一个节点作为Leader,只有Leader能够发起提案。这样,一次Paxos流程中只有一个Proposer,不会出现活锁的情况,此时只会出现例子中第一种情况。

6. 写数据流程

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/05/01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 选举机制(重点)
  • 2. 节点类型
    • 2.1 Znode有两种类型:
      • 2.2 Znode有四种形式的目录节点(默认是persistent )
      • 4. 监听器原理(重点)
      • 5. Paxos算法
        • 5.1 图形解释
          • 5.2 Paxos算法流程中的每条消息描述如下
          • 6. 写数据流程
          相关产品与服务
          云服务器
          云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档