ZooKeeper的概念原理

来源:互联网 发布:nginx 多个网站 编辑:程序博客网 时间:2024/04/29 10:22

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式式应用程序可以基于它实现同步服务,配置维护和命名服务等。ZooKeeper是Hadoop的一个子项目。在分布式应用中,由于工程师不能很好的使用锁机制,以及基于消息的协调机制不适合在某些应用中使用,因此需要一种可靠的、可扩展的、分布式的、可配置的协调机制来统一系统的状态。ZooKeeper目的于此。

ZooKeeper的基本概念

角色

ZooKeeper中的角色主要分三类,如下:

角色描述领导者(Leader)负责投票的发起和决议,更新系统状态跟随着(Follower)接收客户请求并向客户端返回结果,在选主过程中参与投票观察者(Observer)可以接收客户端连接,将请求转发给Leader节点,Observer不参与投票过程,只同步Leader的状态。Observer目的为了扩展系统,提高读取速度

系统模型如图:
这里写图片描述

设计目的

最终一致性:client不论连接到哪个Server,展示的都是同一个视图,这是Zookeeper最重要的性能
可靠性:简单、健壮、良好的性能,如果消息M被一台服务器接受,将被所有服务器接受
实时性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新消息,或者服务器的实效的信息。但由于网络延时等原因,Zookeeper不能保证两个客户端能同时得到更新的数据,如果需要更新数据,应该在数据之前调用sync()接口
等待无关(wait-free):慢的或者失效的client不得干预快速的client请求,使得每个client都能有效的等待。
原子性:更新只能成功或者失败,没有中间状态
顺序性:包括全局有序或者偏序两种,全局有序是指如果单台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布;偏序是指如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面。

1 0