Zookeeper原理梳理

一,Zookeeper是什么

Zookeeper是一个高性能、高可用的分布式协调服务,提供数据的最终一致性保证。

高性能:

  • 简单的数据结构,采用树形结构存储数据
  • 数据量小,每个节点最多存储1m数据
  • follower和observer直接处理非事务请求
  • 全量数据都保存在内存中

高可用:

  • zookeeper是主从结构,只要超过半数的服务器能够提供服务,集群就能正常对外提供服务
  • 自动进行 Leader 选举

最终一致性:

  • 基于Zab协议,确保半数集群更新成功就认为更新成功,其他server会自动从leader同步数据

顺序一致性:

  • 每个事务请求,都会转发给 Leader 处理
  • 每个事务,会分配全局唯一的递增id(zxid,64位:epoch + 自增 id)

顺序一致性可以理解为读取的顺序和写入的顺序保持一致,先写入的数据先被读取;写入的过程中,事务ID小的先写入;

二,Zookeeper的架构

在这里插入图片描述
如上图,Zookeeper是一个C/S架构的分布式系统,Server是主从结构。
Server的角色分类:

  • leader,负责事务性操作(写、更新、删除)以及读
  • follower,负责读,参与投票,可能成为leader
  • observer,负责读,不参与投票,不可能成为leader,是为了不影响写性能的情况下提高读性能而存在

三,理解Zookeeper的关键

1,Zookeeper不是分布式存储系统,也不是分布式计算引擎,而是一个分布式服务协调者

2,Zookeeper的数据不是分布式存储,而是单机存储,所有Server都保存相同的完整的数据,follower的存在是为了高可用、负载均衡

3,Zookeeper不提供强一致性,提供最终一致性保证;Zookeeper不能保证读取到的数据一定是最新数据

4,Zab协议的两阶段作用:leader election阶段和Atomic Brodcast阶段

  • a) 集群中将选举出一个leader,其他的机器则称为follower,所有的写操作都被传送给leader,并通过brodcast将所有的更新告诉给follower。

  • b) 当leader崩溃或者leader失去大多数的follower时,需要重新选举出一个新的leader,让所有的服务器都恢复到一个正确的状态。

  • c) 当leader被选举出来,且大多数服务器完成了 和leader的状态同步后,leadder election 的过程就结束了,就将会进入到Atomic brodcast的过程。

  • d) Atomic Brodcast同步leader和follower之间的信息,保证leader和follower具有形同的系统状态。

5,Zookeeper所有事务性操作(写、更新、删除)都由leader负责,follower和observer将写请求转发给leader,这是其能保证顺序一致性的关键,也是能作为分布式锁即协助其他服务高可用的关键

四,Zookeeper的典型应用

1,统一命名服务

类似域名服务器,一个域名下面有多个ip;或者像是微服务,一个服务名下面有多台服务器提供相同服务
在这里插入图片描述

2,分布式锁

  • 独占锁,所有客户端抢占一个结点的创建,创建成功的拥有锁,抢占失败则等待;拥有锁的客户端执行完成后会删除锁,其他客户端监听到锁删除后,再次抢占锁。
  • 顺序锁,所有有锁需求的客户端在指定结点下创建节点,结点按序编号,编号小的拥有锁,拥有锁的客户端执行完成删除节点,其他客户端监听到后判断是否是自己拥有锁。

3,负载均衡
4,服务器动态上下线管理
5,集群管理
6,分布式队列

  • ①当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员到达,这种是同步队列。
    a)一个job由多个task组成,只有所有任务完成后,job才运行完成。
    b)可为job创建一个/job目录,然后在该目录下,为每个完成的task创建一个临时的Znode,一旦临时节点数目达到task总数,则表明job运行完成。
  • ②队列按照FIFO方式进行入队和出队操作,例如实现生产者和消费者模型。

7,统一配置
在这里插入图片描述
每个配置都是一个结点,结点修改后,所有监听的服务器同步更新。

五,小细节

1,leader如何保证节点的唯一性

leader在创建结点时会从截取父目录,以父目录为key从ConcurrentHashMap中读取Node,如果有,则以此对象为锁,然后创建子目录。

参考文档1
参考文档2

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小手追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值