初识ZooKeeper

     本篇博文先对ZooKeeper进行一个初步的较少,ZooKeeper是什么、ZooKeeper的由来及其基本概念,从宏观上对ZooKeeper有个认识。


     一、ZooKeeper是什么


     ZooKeeper是一个开放源代码的分布式协调服务,由知名互联网公司雅虎创建,是Google Chubby的开源实现。ZooKeeper的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。


     ZooKeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。


     二、ZooKeeper的设计目标


     ZooKeeper致力于提供一个高性能、高可用,且具有严格顺序访问控制能力(主要是写操作)的严格顺序性的分布式协调服务。它的设计目标如下:


     1.简单的数据模型

     ZK使得分布式程序能够通过一个共享的、树形结构的名字空间来进行相互协调。与文件系统不同的是,ZK将全量的数据存储在内存中,以此来提高服务吞吐。减少延迟的目的。


     2.构建集群

     组成ZK集群的每台服务器都会在内存中维护当前的服务器状态,并且每台机器之间都保持着通信,只要集群中存在超过一半的机器能够正常工作,那么整个集群就能够正常对外服务。

     ZK的客户端程序和集群中任意一台机器共同创建一个TCP连接,而一旦客户端和某台服务器之间的连接断开,客户端会自动连接到集群中的其他机器。


     3.顺序访问

     对于来自客户端的每个更新请求,ZK都会分配一个全局唯一的递增编号,这个编号反映了所有事务操作的先后顺序,应用程序可以使用ZK的这个特性来实现更高同步原语。


     4.高性能

     由于ZK将全量数据存储在内存中,并直接服务与客户端的所有非事务请求,因此它尤其适用于以读操作为主的应用场景,而且性能很好。


     三、如何协调各个服务


     在了解了ZK的基本概念,以及设计目标之后,我们来看看ZooKeeper如何协调各个服务的呢?


     首先,它做了一致性的同步。


  

                                               图一  ZooKeeper集群


     比如说,我们搭建了一个ZooKeeper的集群,里面有5台机器,然后5台机器会根据一个选举算法选出一个Leader,那么其他节点就是Follower,这里的ZooKeeper没有Master/Slaver模式,每台机器都有可能被选举成为Leader,选举出Leader之后,就会和各个服务器之间建立一个有效的长连接,保证各个节点的通信正常,当某个节点收到修改的操作时,就会把请求转发到Leader上,Leader内有处理机制,它会操作修改,并同步修改到所有Server的节点上。当ZooKeeper的节点搭建好之后,就可以启动很多个客户端,除了Leader之外的节点都可以被客户端连接,Client有任何的修改的操作,都会被同步到Server上,由Leader统一同步到各个节点之中。一旦我们选举的Leader挂了,将会进行Leader的重新选举,选举了新的Leader之后也会重新建立连接,选举的时间很短,大概200毫秒左右就可以完成一次选举。


    其次,实现协同性操作。


                           

                                           图二   ZooKeeper的目录结构


     ZooKeeper维护了一个类似于文件系统的数据结构,有根目录,根目录下有若干个子目录,每个子目录都被称为Znode,每个Znode可以存储数据。在ZooKeeper中Znode分为两类,持久节点和临时节点。所谓持久节点就是指一旦这个ZNode被创建了,除非主动进行ZNode的移除操作,否则这个ZNode将一直保存在ZooKeeper上。而临时节点就不一样了,它的生命周期和客户端会话绑定,一旦客户端会话失效,那么每个客户端创建的所有临时节点都会被移除。另外,ZK还允许用户为每个节点添加一个特殊的属性:SEQUENTIAL,一点节点被标记上这个属性,那么在这个节点被创建的时候,ZK会自动在其节点名后面追加一个整型数字,这个整型数字是一个由父节点维护的自增数字。


     最后,通知机制。

     客户端可以注册一个他关心的目录节点,当目录节点发生变化的时候(数据改变、被删除、子目录节点增加删除)时,ZK会通知客户端,客户端接到通知后,就会做相应的操作。


     可以简单的说,ZK就是一个文件系统,加上一个通知机制。

     




  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值