ZooKeeper是什么?
Zookeeper简称ZK,是高性能、高可用的分布式协调框架,采用了自定义的ZAB(Zookeeper Atomic Broadcast)事务一致性协议,在高并发分布式系统环境中保证事务一致性。ZK采用类似Linux操作系统文件目录结构管理节点,节点数据常驻内存,避免磁盘I/O影响性能,并提供对用户透明的持久化功能保证数据安全。ZK适用于小量数据、高性能、高并发的应用场景。
ZooKeeper为用户提供以下服务:
命名服务命名服务(Naming Service)提供了一种为对象命名的机制,可以定位任何通过网络可以访问的机器上的对象,使得用户可以在无需知道对象位置的情况下获取和使用对象。服务提供方在ZK上创建临时Node(全局唯一),服务消费方通过读取ZK上的临时Node节点获取到服务提供方信息,进而调用服务提供者。通过ZK的命名服务,可以达到服务提供者动态增加或减少服务提供者服务器数量。典型示例:阿里的Dubbo框架,即采用ZK作为注册中心。[代码示例]
发布订阅服务发布订阅模型,即配置中心,可将应用可配置项发布到ZK上,供订阅者动态获取配置,同一集群使用同一套配置,实现配置集中、动态管理,避免修改配置后重启应用服务。
负载均衡由于分布式系统的使用越来越多,为了使同一集群内的多台服务器负载更均衡,就需要一个能够根据服务器负载情况进行请求分发的框架,ZK正是这种可以根据服务提供者列表进行请求分发的框架,可以动态的注册和发现服务,使服务更透明,实现软负载均衡和故障恢复。
分布式协调/通知ZK中特有watcher注册于异步通知的机制,能够很好的在分布式系统环境下实现不同系统之间的通知与协调,实现数据变化的实时处理。不同系统同时监听ZK上同一个znode,当znode发生变化是,就会触发watcher回调通知,关心该变化的系统可以做出相应的业务处理。分布式协调/通知特新大大降低了应用系统间的耦合度。
分布式锁服务ZK的事务强一致性使其成为一个很好的分布式锁服务提供者。锁服务分为独占锁和时序锁
独占锁:多个服务器同时在ZK上创建一个节点,创建成功者即获取锁成功。
时序锁:通过在ZK上创建临时有序节点队列,形成全局时序。
分布式队列服务分布式队列分为两种:
先进先出队列FIFO,与分布式时序锁的使用原理一致。
控制队列元素数量,等待队列中成员数量到达指定值之后,方可开始执行下一步处理操作。 原创技术文章,转载请注明:转自http://newliferen.github.io/