动物园管理员入门到实战

  

一.zookeeper介绍

  

<强>管理员是一个开源的分布式协调服务,由雅虎创建,是<强>谷歌胖乎乎的强的开源实现。分布式应用程序可以基于<强>管理员强实现诸如<强>数据发布/订阅,<强>负载均衡、<>强命名服务,<强>分布式协调/通知,<强>集群管理,<强>大师选举,<强>配置维护,<强>名字服务,<强>分布式同步,<强>分布式锁和分布式队列等功能。

  

<强>数据模型:<强>管理员允许分布式进程通过共享的层次结构命名空间进行相互协调,这与标准文件系统类似。名称空间由<强>管理员中的数据寄存器组成,称为<强> Znode 强劲,这些类似于文件和目录。与典型文件系统不同,<强>管理员数据保存在内存中,这意味着<强>管理员可以<强>实现高吞吐量和低延迟

  

<强>顺序访问:对于来自客户端的每个更新请求,<强>管理员都会<强>分配一个全局唯一的递增编号强。这个编号反应了所有事务操作的先后顺序,应用程序可以使用<强>管理员这个特性来实现更高层次的同步原语。这个编号也叫做<强>时间戳 - <强> zxid (<强>管理员事务Id )。

  

<强>可构建集群:为了保证高可用,最好是以集群形态来部署<强>管理员强劲,这样只要集群中大部分机器是可用的(能够容忍一定的机器故障),那么<强>管理员本身仍然是可用的。客户端在使用<强>管理员时,需要知道集群机器列表,通过与集群中的某一台机器建立<强> TCP 强连接来使用服务。客户端使用这个<强> TCP 强链接来发送请求,获取结果,获取监听事件以及发送心跳包。如果这个连接异常断开了,客户端可以连接到另外的机器上。

  

管理员入门到实战

  
      <李>上图中每一个服务器<强> 代表一个安装<强>管理员强服务的服务器。组成<强>管理员强服务的服务器都会在内存中维护当前的服务器状态,并且每台服务器之间都互相保持着通信。集群间通过<强> Zab 协议(<强>管理员原子广播)来保持数据的一致性。   <李> <>强饲养员强服务器有三种角色:<强> 领袖,<强>追随者强,<强>观察者强,集群中的所有机器通过一个<强> 选领导人举过程来选定一台称为“<强>领袖”强的机器。<强>领袖既可以为客户端<强>提供写服务强又能<强>提供读服务强。除了<强> 外领袖,<强>追随者和<>强观察者都<强>只能提供读服务和<强>追随者<强>观察者唯一的区别在于<强>观察者强机器不参与<强> 的领袖选举过程,也不参与写操作的“<>强过半写成功“策略,因此<强>观察者强机器可以在不影响写性能的情况下提升集群的读性能。   <李>在<强>管理员中,主要依赖<强> ZAB 协议来实现分布式数据一致性,基于该协议,<强>管理员强实现了一种<强>主备模式的系统架构来保持集群中<强>各个副本之间的数据一致性   
  

<>强工作原理:

  
      <李> <>强饲养员强的核心是原子广播,这个机制保证了<强>各个服务器之间的同步强。实现这个机制的协议叫做<强> Zab协议   <李> <>强Zab协议有两种模式强,它们分别是<>强恢复模式和<强>广播模式强。当服务启动或者在领导者崩溃后,<强> Zab 强就进入了恢复模式,当领导者被选举出来,且大多数<强>服务器的完成了和<>龙头的<>强状态同步以后,恢复模式就结束了。状态同步保证了<>龙头和<强>服务器具有相同的系统状态,一旦<强>领袖已经和多数的<强> 追随者进行了状态同步后,他就可以开始广播消息了,即进入广播状态。这时候当一个服务器加入<强>管理员强服务中,它会在恢复模式下启动,发现<强> 领袖,并和<>龙头强进行<强>状态同步强。待到同步结束,它也参与消息广播。   <李> <>强饲养员强服务一直维持在<强> 播出状态,直到<强>领袖崩溃了强或者<强>领袖失去了大部分的追随者支持   
  

<>龙头选举:

  
      <李>广播模式需要保证<强>建议(<强>提议)被<强>按顺序处理(<强>领袖来执行写操作),因此zk <强> 强采用了递增的事务

    动物园管理员入门到实战