动物园管理员——ZooKeeper

Posted 菜鸟联盟NoobAssn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动物园管理员——ZooKeeper相关的知识,希望对你有一定的参考价值。

随着分布式架构的出现,越来越多的分布式应用会面临数据一致性的问题。很遗憾的是,在解决分布式数据一致性上,除了ZooKeeper之外,目前还没有一个成熟稳定且被大规模应用的解决方案。


——《从Paxos到ZooKeeper分布式一致性原理与实践》


推荐阅读时间:10分钟


分布式系统与数据一致性

分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。

由于分布式系统是由多个节点构成的,因此如何保证数据在各个节点上的一致性显得尤为重要。


ZooKeeper的核心就是保证分布式系统中数据的一致性,可以说围绕它的绝大部分功能都是基于此实现的。

ZooKeeper诞生于雅虎,为了管理分布在各个服务器节点上的以动物命名的分布式应用,而起名为“动物园管理员”。


几个关键概念

首先,介绍一下ZooKeeper中比较重要的几个概念。


ZNode

最核心的概念!ZooKeeper在内存中维护者一个树形层次结构,树中的节点称为ZNode,每个ZNode都可以存储数据。如下图:


对ZNode的访问具有原子性特点,即不会出现读取或更改ZNode中部分数据的情况。

ZNode有两种:临时节点和持久节点。临时节点会在客户端断开连接时被删除,而持久节点不会。此外,还有顺序节点,顺序节点会在创建上面的两种节点的基础上,给每个节点追加一个自增数字,该数字由其父节点维护。


Watches

客户端可以在节点上添加监控(watches),当节点状态发生变化时,通知该客户端并删除监控,即一个watches只能被触发一次。


ACL

每个ZNode都附带一个ACL(Access Control List)列表,ACL是权限控制列表,用于决定谁可以执行何种操作。

ACL的五种权限:

  • CREATE: 可以创建一个子节点

  • READ: 可以从节点获取数据并列出其子项。

  • WRITE: 可以设置节点的数据

  • DELETE: 可以删除一个子节点

  • ADMIN: 可以设置ACL权限


应用场景

介绍完概念,让我们看下围绕ZooKeeper的这些概念,产生了哪些应用场景。

  1. 配置中心

    由于ZooKeeper可以保证存储数据的一致性,所以可以将它作为公共参数配置中心,当某个配置信息发生变动时,还可以利用监控特性,及时通知客户端。

  2. 集群管理

    集群管理主要包括两部分:选举master、监控各个服务节点的状况(加入或断开)。

    每添加一个服务节点,就创建一个对应的临时ZNode。选举master可以通过选取序列号最小的临时ZNode实现。监控节点可以通过ZNode的监控功能实现。

  3. 分布式锁

    锁分为两种:排它锁和共享锁。

    对于排它锁,可以通过使多个客户端共同尝试创建同一个临时节点实现,如: /exclusive/lock 节点。由于一个节点只能创建一次,所以只会有一个节点创建成功,表示该节点获得了锁。同时由于是临时节点,当该客户端断开时,节点便会删除,意味着释放了锁。

    对于共享锁,则需要利用顺序节点的特性。每次读和写都创建一个顺序临时节点,当执行读请求时,若不存在序号比自己小的节点或者比自己小的节点中没有写请求时,则可以执行,否则等待;当执行写请求时,只有不存在比自己小的节点时,才可以执行,否则等待。

  4. 分布式队列

    ZooKeeper也可以实现消息队列!实现原理就是根据临时顺序节点特性实现。按节点顺序号由小到大依次消费。

  5. 命名服务

    比如,在dubbo中,不同服务节点提供的不同的服务可以在ZooKeeper中按相应目录结构创建,通过路径名即可识别相应服务。

ZooKeeper还有其他一些其他应用,感兴趣可以自行搜索。(我不会告诉你我也没怎么去查过)


深入:ZAB(选读)

原理和功能都已经讲完了,可是你知道ZooKeeper集群是如何保证各个ZooKeeper节点上的ZNode数据一致的吗?其实主要是依赖了ZooKeeper特有的ZAB协议。

ZAB ( ZooKeeper Atomic Broadcast , ZooKeeper 原子消息广播协议)是zookeeper数据一致性的核心算法。主要包括两个可无限重复的阶段:

  1. 领导者选举

    集群中所有的机器通过选举,产生一个leader,其他的节点都是follower。当超过半数的follower将其状态与leader同步,该阶段结束。

  2. 原子广播

    对于读请求,所有的节点都可以提供服务。对于写请求,只有leader节点提供服务,follower会将写请求转发给leader,由leader统一广播该请求。当半数以上的follower将修改持久化后,leader才会提交该更新,给客户端返回写入成功的响应。

当leader出现故障时,将重复上述阶段,当故障leader恢复时将变成follower。






当前浏览器不支持播放音乐或语音,请在微信或其他浏览器中播放 动物园管理员——ZooKeeper



如果觉得对你有帮助,麻烦点下赞关注,谢咯(o゚▽゚)o  



以上是关于动物园管理员——ZooKeeper的主要内容,如果未能解决你的问题,请参考以下文章

java 策展人(动物园管理员)

xml 连接到动物园管理员

HBase 动物园管理员

一起走进动物园管理员——ZooKeeper

一起走进动物园管理员——ZooKeeper

引导服务器与kafka中的动物园管理员?