ZooKeeper学习之它能干什么?

最近在学习ZooKeeper(以后都用ZK代称),为了验证自己的学习,希望对ZK相关的知识进行整理,一方面检验学习成果,一方面进行笔记整理。

        一般而言,我们学习一件东西的动机是这个东西对我们有用,不管是当前立即能带来效用还是长远看能带来好的收获。学习ZK也一样,首先要明白学习它干嘛?我们在开发中能用ZK做些什么?通过使用ZK能带来哪些便利?能解决哪些开发中的痛点?在我的今后的开发中要不要用它?这些问题需要我们搞清楚,这样才能提高我们的开发效率,才能真正发挥ZK的优点。

(1)ZK是什么?

        ZK最早是由雅虎研究院的一个研究小组研发的,当时他们面对的问题是在其内部的大型分布式系统都需要一个分布式协调的一个系统,早起的开发的系统往往都由单点问题,为了保证一致性往往只有一个主节点去完成整个系统的一致性功能。后来,雅虎的开发人员就试着去开发一个通用的无单点问题的分布式协调框架,这样一来,开发人员就可以把精力放在业务逻辑的开发上来,而不用过多关注系统的协调问题。所以,总的来说,ZK是一个分布式的、开源的、分布式应用程序协调服务。

(2)利用ZK能做些什么工作?

        光说它是一个分布式应用程序协调服务可能不是那么明显,读到这儿可能仍然会有疑惑,到底是个什么东西。接下来通过ZK可以具体实现的功能,配合ZK的典型使用场景来说明它到底能干什么。

  • 数据发布/订阅

        数据发布/订阅系统,典型的就是所谓的配置中心,通过配置中心可以对系统中的配置信息进行修改和推送。应用系统发布者可以把数据发布到ZK的一个或者一些列的节点上,而信息的订阅者可以进行订阅,通过对这些节点的数据进行监听,从而达到配置的动态更新等服务,实现配置信息的集中式管理和数据的动态更新。在我工作过程中,一些小的动态的配置信息就是通过ZK进行动态配置的,一个例子就是系统管理员信息,通过这些配置,可以在管理员变更的时候,不重启机器,达到管理员信息的动态变更。

  • 负载均衡

        负载均衡是用来对多个计算机、网络连接、cpu、磁盘等资源进行分配的负载,主要是为了达到资源的最大化利用、最大化吞吐、最小化响应时间和避免某些服务器过载。通过利用ZK集群可以实现动态的DNS域名解析服务,每个应用自己解析ip和port,我们可以将DNS信息配置在ZK中的节点之上,然后应用通过在节点注册watcher来动态监听域名配置,这样在域名ip动态变化是可以监听到,及时进行信息更新。这种一般在公司内部开发时使用,这样可以避免过多的本地host绑定,让你的PE去动态维护就好了,开发只关注自己的业务逻辑即可。

  • 命名服务

        命名服务也是在分布式系统中常用的一种公共服务,而利用ZK可以实现一套分布式的全局唯一ID的分配机制。ZK的几点中有一种特殊的节点--顺序节点。这种节点在创建完成以后,ZK会自动在其名字后面加上节点的顺序,ZK可以保证在分布式系统中,名字的顺序性,其机制就是利用ZK的一致性来保证并发访问时的节点的唯一性。

  • 分布式协调/通知

       分布式协调/通知服务是分布式系统中的重要一环,将不同的分布式的组建有机的结合在一起。通过引入协调者,可以让分布式协调的职责从应用分离,可以减小系统之间的耦合性,提高系统的可扩展性。这种功能的实现比较简单,主要是利用ZK的watcher机制,通过监听节点的变化,从而感知相应的通知信息,然后作出不同的响应处理。

  • 集群管理

       集群管理的功能应用较多,可以通过ZK实现集群机器运行状态搜集、集群机器的工作状态、机器的上下线等操作。在我工作总,主要利用ZK实现状态搜集、任务的上下线、机器机器工作状态搜集等,这些实现也相对简单,利用ZK的节点监听的功能就可以很好的实现。

  • master选举

        ZK节点的创建有一个特点就是:如果同时有多个客户端请求创建同一个节点,那么最终只会有一个客户端的请求会创建成功,利用这个特点,当需要进行master选举时,只需要都进行创建请求即可,请求成功的为master。我在工作中,在master不需要本人控制时就利用这个机制去创建。这里创建的节点不可控,由zk决定,如果你希望可控,可以再创建一个固定节点,把希望成为leader的节点信息写入,当出发选举时,多一步判断操作即可。

  • 分布式锁

        同样利用上面的特性,需要锁时就向特定目录发起创建节点请求即可,不需要是就删除该节点。

  • 分布式队列

        分布式队列的实现利用ZK的顺序节点,在队列节点下创建顺序节点,在取数据时,首先获得所有子节点,然后确定自己即诶单序号在子节点中的顺序,如果自己不是最小的子节点,那么就等待,同时向比自己小的最后一个节点注册watcher,接收到watcher通知后重复上述步骤即可。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章