Zookeeper 概念

Zookeeper 介绍

  Zookeeper 是一个高可用的分布式数据管理与系统协做框架。基于对 Paxos 算法实现,该框架保证了分布式环境中数据的强一致性,也正是基于这样的特性,使得Zookeeper 能够解决不少分布式问题。node

  它能够实现的功能有丰富。数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等。 算法

概念介绍

数据发布/订阅

  发布/订阅模式是一对多的关系,多个订阅者对象同时监听某一主题对象,这个对象在自身状态发生变化时会通知全部的订阅者,使它们自动的进行状态更新。发布/订阅可使得发布方和订阅方独立封装、独立改变。发布/订阅模式在分布式系统中的典型应用有配置管理服务发现、注册设计模式

设计模式

  发布/订阅系统通常有两种设计模式,分别是推(Push)模式和拉(Pull)模式。api

  推模式 是指服务器主动将数据更新发送给全部订阅的客户端。服务器

  拉模式 是指客户端经过采用定时轮训拉取数据进行对比更新。网络

  ZooKeeper采用的是推拉相结合的方式:客户端向服务端注册本身须要关注的节点,一旦该节点的数据发生变动,那么服务端就会向相应的客户端发送Watcher事件通知,客户端接收到这个消息通知以后,须要主动到服务端获取最新的数据。 负载均衡

配置管理

  配置管理是指若是集群中的机器拥有某些相同配置而且这些配置信息须要动态的改变,使用发布/订阅模式把配置作统一集中管理,让这些机器格子各自订阅配置信息的改变,当配置发生改变时,这些机器就能够获得通知并更新为最新的配置。 框架

  所谓的配置中心,顾名思义就是发布者将数据发布到某一类数据发布节点上,供订阅者进行数据订阅,进而达到动态获取数据的目的,实现配置信息的集中式管理和数据的动态更新。 分布式

  对配置信息的管理,通常的作法一般能够选择将其存储到本地的配置中或者是内存变量中。但一遇到集群规模比较打的状况,两种方式再也不可取。而咱们还须要可以快速的作到所有配置信息的变动,同时但愿变动成本足够小,所以咱们须要一种更为分布式的解决方案。 优化

配置存储

  在进行配置管理以前,须要将配置存储到Zookeeper上,能够在Zookeeper上选取一个数据节点用于配置的存储,将须要集中管理的配置信息写入到该数据节点中去。

配置获取

  集群中每台机器在启动初始化阶段,首先会从上面提到的Zookeeper的配置节点中读取配置信息,同时,客户端还须要在该节点上注册一个数据变动Watcher监听,一点数据节点数据变动,全部订阅的客户端都可以获取数据变动通知。

配置变动

  Zookeeper相应节点配置信息的变动,Zookeeper可以帮助咱们将数据的变动通知发送到各个客户端,每一个客户端在接受这些变动通知到,从新进行最新数据的获取和配置更新。

服务发现和注册

  服务发现、注册是指对集群中的服务上下线作统一管理。每一个工做服务器均可以做为数据的发布方向集群注册本身的基本信息,而让某些监控服务器做为订阅方,订阅工做服务器的基本信息,当工做服务器的基本信息发生改变如上下线、服务器角色或服务范围变动,监控服务器能够获得通知并响应这些变化。

  这个方面是基于ZookeeperEPHEMERAL_SEQUENTIAL类型节点来实现的。服务器能够链接Zookeeper在对应的节点下建立临时顺序节点,断开链接后,该节点被删除。利用这个特性能够用来实现服务的发现和注册。

负载均衡

  负载均衡(Load Balance)是一种至关常见的计算机网络技术,用来对多个计算机(计算机集群)、网络链接、CPU、硬盘驱动器或其余资源进行分配负载,以达到优化资源使用、最大化吞吐率、最小化响应时间和避免过载的目的。一般,负载均衡能够分为硬件和软件负载均衡两类。

命名服务

经过使用命名服务,客户端应用可以根据指定名字来获取资源的实体、服务地址和提供者信息等。

  • 全部客户端都会根据本身的任务类型,在指定类型的任务下面经过调用create()接口来建立一个顺序节点。

  • 节点建立完毕后,create()接口会返回一个完整的节点名。

  • 客户端拿到这个返回值后,拼接上type类型,例如“type2-job-0000000003”,这样就能够做为一个全局惟一的ID了。

Zookeeper 名词

Znode节点

有四种类型的Znode:

  • PERSISTENT-持久化目录节点

客户端与zookeeper断开链接后,该节点依旧存在。

  • PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点

客户端与zookeeper断开链接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号。

  • EPHEMERAL-临时目录节点

客户端与zookeeper断开链接后,该节点被删除。

  • EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点

客户端与zookeeper断开链接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号。

NameService 命名服务

  在zookeeper的文件系统里建立一个目录,即有惟一的path。在咱们使用tborg没法肯定上游程序的部署机器时便可与下游程序约定好path,经过path即能互相探索发现

  这个主要是做为分布式命名服务,经过调用zk的create node api,可以很容易建立一个全局惟一的path,这个path就能够做为一个名称。

相关文章
相关标签/搜索