1、基本概念
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
Zookeeper是高性能、高可用的分布式协调框架,采用了自定义的ZAB(Zookeeper Atomic Broadcast)事务一致性协议,在高并发分布式系统环境中保证事务一致性。ZK采用类似Linux操作系统文件目录结构管理节点,节点数据常驻内存,避免磁盘I/O影响性能,并提供对用户透明的持久化功能保证数据安全。ZK适用于小量数据、高性能、高并发的应用场景。
2、zk提供的服务
(1)命名服务
服务提供方在zk上创建一个临时的node,且该node是全局唯一的。服务消费方通过读取zk上的临时Node节点获取到服务提供方提供的信息,进而就可以调用服务提供者提供的服务。实例:阿里的dubbo就是采用zk作为注册中心。
(2)发布订阅服务
发布订阅模型,即配置中心,可将应用可配置项发布到ZK上,供订阅者动态获取配置,同一集群使用同一套配置,实现配置集中、动态管理,避免修改配置后重启应用服务。
(3)负载均衡
在分布式系统中,在一个集群中的由多台服务器提供服务。为了使每一台服务器负载更加均衡,需要根据服务负载的情况进行请求分发的框架。而ZK就是这样的,可以动态的注册和发现服务,是服务更透明。
(4)分布协调/通知
(5)分布式锁
zk具有事务强一致性
锁服务分为独占锁和时序锁
独占锁:多个服务器同时在ZK上创建一个节点,创建成功者即获取锁成功。
原理:
zk中分布式锁的思想是,创建一个锁节点/locknode/guid-lock,集群中每台服务器都在该节点下写入有序的子节点,节点列表中第一个节点对应的服务器被认为是拿到分布式锁,可以进行计算任务,计算任务结束后,删除该服务器对应的节点,下一个服务器写入的节点排到了第一位,可以进行计算任务,如此往复,每台机器写入的节点排在列表中第一位的时候,就被认为是拿到分布式锁。
(6)分布式队列服务
分布式队列分为两种:
先进先出队列FIFO,与分布式时序锁的使用原理一致。
控制队列元素数量,等待队列中成员数量到达指定值之后,方可开始执行下一步处理操作。
内容来自:http://newliferen.github.io/2015/07/24/ZooKeeper%E5%85%A5%E9%97%A8/