zookeeper

https://www.cnblogs.com/felixzh/p/5869212.html

https://www.w3cschool.cn/zookeeper/zookeeper_overview.html

一、zookeeper定义

zookeeper是一个针对大型分布式系统的可靠协调系统。

1.1 它的功能包括:配置维护,名字服务,分布式同步、组服务等。

1.2 它的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

 

 

二、zookeeper的特点

1、 最终一致性:为客户端展示同一视图。

2、可靠性:如果一条消息被一台服务器接受,那么它将被所有服务器接受。

3、实时性:zookeeper不能保证两个客户端同事得到刚刚更新的数据,如果需要更新数据,应该在读数据之前调用sync()接口。

4、等待无关(wait-free):慢的或者失效的client不干预快速的client的请求。

5、原子性:更新操作要么成功,要么失败,没有中间状态。

6、顺序性:对于所有server,同一消息发布顺序一致。

三、zookeeper角色

四、leader选举

1、leader选举采用paxos协议

2、paxos核心思想是:当多数server写成功,那么数据则写入成功。

     如果有3个服务器,那么有两个写入成功,则数据写入成功。

     如果有4个或者5个服务器,有3个写成功,则数据写成功。

3、server数量一般为奇数,如3、5、7等。

     如果有3个服务器,最多允许1个挂掉。

     如果有4个服务器,最多同样允许3个挂掉。

4、zookeeper 的写入操作。

五、zookeeper数据模型。

1、zookeeper  提供一个层次化目录结构,命名规范符合常规linux文件目录命名规范。

2、每个节点在zookeeper中叫做znode,并且有一个唯一的路径标识。

3、znode有两种数据结构,短暂的(ephemeral)和持久的(persistent),节点包含数据和子节点。

4、znode数据包含多个版本。

5、客户端可以在节点上设置监视器(watch)。

6、znode不支持部分读写,需要一次性全部执行完成。

7、znode类型在创建时确定,并不能修改。

8、znode有四种类型目录节点,persistent, persistent_sequential,  ephemeal,  ephemeal_sequential

 

六、zookeeper统一命名服务。

1、在分布式环境下,经常需要对应用/服务统一命名,便于识别不通服务。

1.1 类似于ip和域名的关系。

1.2 通过名称来获取资源或者服务的地址信息。

2 按照层次组织服务/应用名称。

2.1 它可以将服务名称以及地址名称写到zookeeper中,客户端通过服务名称获取服务列表。、

七、zookeeper--配置管理。

1、 分布式环境下,需要经常配置文件管理和同步。

1.1  y一个集群中,所有的节点配置和信息是一致的。

1.2 我们对配置文件修改后,需要尽快同步到各个节点中。

 

2  配置管理可以交给zookeeper实现。

2.1  可将配置文件写入到一个znode中。

2.2  各个节点监听这个znode。

2.3  一旦znode的配置文件被修改,zookeeper将通知到其它各个znode

 

八、zookeeper集群管理。

1、分布式环境中,我们需要实时掌握每个节点的状态。

1.1 可根据节点状态实时做出一些调整。

2、k可交由zookeeper实现。

2.1 可将zookeeper节点信息写入到一个znode中。

2.2 监听这个节点的实时变化。

 

九、 zookeeper分布式通知与协调。

1、分布式环境中,一个服务经常需要知道他的子服务状态,

1.1 namenode需知道各个DataNode的状态。

1.2 resource manager需要知道nodemanager状态

2、zookeeper实现心跳监测机制,实时信息推送,相当于一个发布/订阅系统。

 

十、zookeeper分布式锁。

1、zookeeper是强一致性的

2、实现锁的独占性。

3、控制锁的时序。

 

十一、分布式队列

分布式队列有两种

1、当一个队列全部都聚齐时,这个队列才可以用,否则这个队列会一直等所有成员到达,这种成为同步队列。

1.1 当一个job由所有的task组成时,所有的任务完成后,job才运行。

1.2可为job创建一个/job,然后在该目录下,为每个完成task创建一个临时的znode,当临时节点的目录数达到task总数时,则job表示完成。

2、队列实现FIFO模式,实现生产者和消费者模型。

 

 

posted @ 2018-05-18 17:36  Mr-Lee-long  阅读(2377)  评论(0编辑  收藏  举报