01-Zookeeper概览

2019-08-06  本文已影响0人  花神子

概要

功能与特性

数据结构

zookeeper提供了类似Linux文件系统一样的数据结构。每一个节点对应一个Znode节点,每一个Znode节点都可以存储1MB(默认)的数据。客户端对zk的操作就是对Znode节点的操作。

znode

图中的每个节点称为一个znode,znode 是被它所在的路径唯一标识:Server1 这个 znode 的标识为 /NameService/Server1, 每个znode由3部分组成(Znode:包含ACL权限控制、修改/访问时间、最后一次操作的事务Id(zxid)等等):

数据结构特点

每一个Znode节点又根据节点的生命周期类型分为4种节点。

结构特点

Zookeeper 这种数据结构有如下这些特点

  1. 每个子目录项如 NameService 都被称作为 znode,这个 znode 是被它所在的路径唯一标识,如 Server1 这个 znode 的标识为 /NameService/Server1

  2. znode 可以有子节点目录,并且每个 znode 可以存储数据,注意 EPHEMERAL 类型的目录节点不能有子节点目录

  3. znode 是有版本的,每个 znode 中存储的数据可以有多个版本,也就是一个访问路径中可以存储多份数据

  4. znode 可以是临时节点,一旦创建这个 znode 的客户端与服务器失去联系,这个 znode 也将自动删除,Zookeeper 的客户端和服务器通信采用长连接方式,每个客户端和服务器通过心跳来保持连接,这个连接状态称为 session,如果 znode 是临时节点,这个 session 失效,znode 也就删除了

  5. znode 的目录名可以自动编号,如 App1 已经存在,再创建的话,将会自动命名为 App2

  6. znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个是 Zookeeper 的核心特性,Zookeeper 的很多功能都是基于这个特性实现的,后面在典型的应用场景中会有实例介绍

监听机制

Zookeeper 这种数据结构特点第七条提及znode 可以被监控,即zookeeper除了提供对Znode节点的处理能力,还提供了对节点的变更进行监听通知的能力。

zookeeper事件监听

监听机制的步骤如下:

  1. 任何session(session1,session2)都可以对自己感兴趣的znode监听。
  2. 当znode通过session1对节点进行了修改。
  3. session1,session2都会收到znode的变更事件通知。

节点常见的事件通知有:

一次监听事件,只会被触发一次,如果想要监听到znode的第二次变更,需要重新注册监听。

使用场景

注册中心

zookeeper用得比较多的地方可能是,微服务的集群管理与服务注册与发现。

分布式锁

zookeeper-分布式锁

高性能高可用强一致性保障

zookeeper-集群

高性能,我们通常想到的是通过集群部署来突破单机的性能瓶颈。对于zk来说,就是通过部署多个节点共同对外提供服务,来提供读的高性能。

数据一致性(zab协议-原子广播协议)

通过集群的部署,根据CAP原理,这样,可能导致同一个数据在不同节点上的数据不一致。zookeeper通过zab原子广播协议来保证数据在每一个节点上的一致性。原子广播协议(类似2PC提交协议)大概分为3个步骤。

zab协议-原子广播协议

需要说明的是,zookeeper对数据一致性的要求是:

可用性-leader选举(zab协议-崩溃恢复协议)

leader选举

当集群初始化或Follower无法联系上Leader节点的时候,每个Follower开始进入选举模式。选举步骤如下:

  1. Follower节点第一次投票先投自己,然后将自己的选票广播给剩余的Follower节点。
  2. Follower节点接收到其他的选票。
  3. 选票比较:比较自己的与接收的选票的投票更有。
  4. 如果资金的选票不是最优选票,变更自己的选票,投最优选票的节点。
  5. 统计自己收到的选票,如果某个节点获得了过半的节点的投票。确认该节点为新的Leader节点。
  6. 确认Leader节点后,每个节点变更自己的角色。完成投票选举。
  7. 选举原则:谁的数据最新,谁就有优先被选为Leader的资格。

举个例子,假如现在zk集群有5个节点,然后挂掉了2个节点。剩余节点S3,S4,S6开始进行选举,他们的最大事务ID分别是6,2,6。定义投票结构为(投票的节点ID,被投节点ID,被投节点最大事务ID)。

leader选举
  1. 初始状态,S3,S4,S5分别投自己,并带上自己的最大事务ID。
  2. S3,S4,S5分别对自己收到的2票与自己的1票做比较。
  3. S5发现自己的是最优投票,不变更投票,S3,S4发现S5的投票是最优解,更改投票。
  4. S3,S4广播自己变更的投票。
  5. 最后大家都确认了S5是Leader,S5节点状态变更为Leader节点,S3,S4变更为Follower节点。

数据的持久化

数据的持久化

参考:
1
2

上一篇 下一篇

猜你喜欢

热点阅读