原文地址 https://www.cnblogs.com/javaworld0001/p/11608062.html

一、ZooKeeper 基本概念

1、ZooKeeper 是什么?

Zookeeper官网地址: http://zookeeper.apache.org/

Zookeeper官网文档地址:http://zookeeper.apache.org/doc/trunk/index.html

ZooKeeper 是Hadoop下的一个子项目,它是一个针对大型分布式系统的可靠协调系统;它提供的功能包括:配置维护、名字服务、分布式同步、组服务等; 它的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户

 

Zookeeper一个最常用的使用场景就是用于担任服务生产者和服务消费者的注册中心。

  服务生产者将自己提供的服务注册到Zookeeper中心,服务的消费者在进行服务调用的时候先到Zookeeper中查找服务,获取到服务生产者的详细信息之后,再去调用服务生产者的内容与数据

 

2、ZooKeeper设计目标

ZooKeeper允许分布式进程通过共享的层次结构命名空间进行相互协调,这与标准文件系统类似。名称空间由ZooKeeper中的数据寄存器组成 - 称为znode,类似于文件和目录。数据存储在内存中。

3、zookeeper的特点:

1>.最终一致性  2>.可靠性  3>.实时性 4>.等待无关性 5>原子性 6>顺序性

4.zookeeper系统架构

1》zookeeper分为server(服务端) 和Client(客户端), server一般是一个集群或伪集群。

2》客户端维护一个TCP链接,发送请求、接受响应、获取观察的事件以及发送心跳。

3》Zab协议包含两个阶段:leader election阶段和Atomic Brodcast阶段。

  • a) 集群中将选举出一个leader,其他的机器则称为follower,所有的写操作都被传送给leader,并通过brodcast将所有的更新告诉给follower。
  • b) 当leader崩溃或者leader失去大多数的follower时,需要重新选举出一个新的leader,让所有的服务器都恢复到一个正确的状态。
  • c) 当leader被选举出来,且大多数服务器完成了 和leader的状态同步后,leadder election 的过程就结束了,就将会进入到Atomic brodcast的过程。
  • d) Atomic Brodcast同步leader和follower之间的信息,保证leader和follower具有形同的系统状态。

5.写数据流程:

  

 

 6.使用场景:

  统一命名服务

    在分布式环境下,经常需要对应用/服务进行统一命名

    按照层次结构组织服务/应用名称

   配置管理

   分布式通知与协调

  分布式锁

    

分布式锁具有以下特性:

1、ZooKeeper是强一致的。比如各个节点上运行一个ZooKeeper客户端,它们同时创建相同的Znode,但是只有一个客户端创建成功。

2、实现锁的独占性。创建Znode成功的那个客户端才能得到锁,其它客户端只能等待。当前客户端用完这个锁后,会删除这个Znode,其它客户端再尝试创建Znode,获取分布式锁。

3、控制锁的时序。各个客户端在某个Znode下创建临时Znode,这个类型必须为CreateMode.EPHEMERAL_SEQUENTIAL,这样该Znode可掌握全局访问时序。