Zookeeper 相关知识

Zookeeper 相关知识

概述

​ Zookeeper 为分布式应用提供协调服务,如名称服务、配置管理、同步、组服务。Zookeeper 使用类似文件系统目录树结构的数据模型。分布式应用可以使用 Zookeeper 类似于文件系统的层级名称空间来相互协调,名称空间由 Znode 数据组成。Zookeeper 的数据模型虽然与文件系统相似,但它并不是设计用来作为存储使用的,为了保证高效、低延时 Zookeeper 的数据被保存在内存中。
​ Zookeeper 自身也是分布式应用,可以配置 Zookeeper 集群以提供协调服务。客户端与 Zookeeper 服务端之间通过心跳维持 tcp 连接,当连接被关闭时客户端会建立与其他服务端的连接。

数据模型

​ Zookeeper 提供的数据模型与文件系统非常类似,一个名称(在 Zookeeper 中被称为 Znode)就是用斜线(/)分割的路径,每个路径唯一的标识一个名称。每个 Znode 既可以有数据又可以有下级 Znode,每个 Znode 维护自己的节点状态信息包含数据修改版本号、访问权限、时间戳,Znode 数据每次变化都会致使版本号增加。
​ 除了普通的 Znode 外还有一种随会话存在的临时节点,当会话结束时属于会话的临时节点会被自动删除。
​ Zookeeper 具有对某个 Znode 观察的功能,当被观察的 Znode 被修改时观察者会被触发并移除(也就是说如果要一直观察着节点需要每次被触发后再次设置观察),客户端会收到 Zookeeper 服务端的通知。在设置了对节点的观察后如果客户端到服务端的连接断开,客户端会收到客户端本地的通知(会触发观察者)。

Zookeeper 中信息示例,kafka 使用的 zookeeper

服务保证

  • 顺序一致性
    来自相同各户端的操作将被顺序执行。
  • 操作原子性
    操作只有成功或失败,不存在其他情况。
  • 单系统镜像
    客户端连接任意服务端看到相同的服务状态。
  • 高可靠
    更新操作一旦完成,它将被保存至下次更新覆盖。

API 接口操作

 
  1. create #创建 Znode
  2. delete #删除 Znode
  3. exists #测试是否存在 Znode
  4. get data #读取 Znode 数据
  5. set data #写入数据到 Znode
  6. get children #获取 Znode 子节点
  7. sync #等待数据被分散完成

Zookeeper 实现

Zookeeper 服务架构图

Zookeeper 组件图

​ “replicated database”在内存中包含整个数据树结构,更新操作被应用在内存数据库之前会被写入本地磁盘,供恢复使用。客户端只会连接到一台服务端,客户端只读操作服务由被连接的服务端提供,更新操作(写入数据、修改 Znode 状态)需要通过一致协议处理。客户端所有的写请求会被转发至 leader,follower 接收 leader 提议以实现消息一致。

Zookeeper 用例

1. 名称服务、配置服务、组成员关系服务

这三项服务可以由 Zookeeper 直接提供。
名称管理:在某个地方集中的存储所需使用的信息

2. Barriers(屏障服务)

​ 分布式系统使用屏障来阻塞处理直到满足条件,在 Zookeeper 中通过判断约定的 Znode 是否存在可以实现屏障服务。

3. Double Barriers(双重屏障服务)

​ 双重屏障用来保证多个客户端同步的进入、退出某一计算操作。

4. Queues(队列)

​ 在 Zookeeper 中使用约定的 Znode 在作为队列,每个客户端在该节点创建临时有序(设置节点属性为临时、有序)节点,Zookeeper 会保证该节点下的子节点序号单调增加,需要读队列时只需要取子节点中序号最小的节点即可。

5. Locks(锁)

​ 在 Zookeeper 中使用约定的节点 LOCK 作为锁,每个客户端在该节点创建临时有序(设置节点属性为临时、有序)节点 lock_N。创建成功后获取锁节点的字节点,如果 lock_N 序号最小则当前客户端获得锁,否则在比 N 小的第一个节点添加 exists watch (避免触发惊群)。当 watch 被触发后再继续获取 LOCK 子节点、判断最小序号操作。

6. Two-phased Commit(两阶段提交)

​ 两阶段提交是在多路写的情况下,保证数据一致性而设计的协议。
两阶段提交的含义,时序流程图解释

状态机实现图解释

7. Leader Election(主从选举)

推荐文章

[1] http://www.cnblogs.com/wuxl360/p/5817471.html
[2] http://www.cnblogs.com/wuxl360/p/5817489.html
[3] http://www.cnblogs.com/wuxl360/p/5817524.html
[4] http://www.cnblogs.com/wuxl360/p/5817540.html
[5] http://www.cnblogs.com/wuxl360/p/5817549.html
[6] http://www.cnblogs.com/wuxl360/p/5817550.html
[7] http://www.cnblogs.com/wuxl360/p/5817646.html
[8] http://www.cnblogs.com/wuxl360/p/5817648.html
[9] http://kazoo.readthedocs.io/en/latest/
[10] http://zookeeper.apache.org/doc/r3.4.10/

本文参考文章

[1] http://zookeeper.apache.org/doc/r3.4.10/zookeeperOver.html
[2] http://zookeeper.apache.org/doc/r3.4.10/recipes.html
[3] http://blog.chinaunix.net/uid-27105712-id-3274863.html

 

    

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值