Zookeeper-简介
1、基础知识
1.1、简介
Zookeeper,英文字面意思就是"动物管理员",因为动物园里面的所有动物的特殊性,需要管理员必须具备观察动物状态和管理动物行为等方面的协调的能力,为动物们建立友好生存的生活环境。Zookeeper就是纷乱 的软件服务世界中的一名管理者,为繁杂的软件服务环境提供统一的协调管理服务。
Zookeeper是Yahoo基于 Google的 Chubby 论文实现的一款解决分布式数据一致性问题的开源实现,它是使用Java语言开发的,目前是Hadoop项目中的一个子项目。它在Hadoop、HBase、Kafka、Dubbo等技术中充当了非常重要的核心组件角色。
官方网站:https://zookeeper.apache.org/ 最新版本:3.8.1
ZooKeeper是复杂分布式场景下的应用程序协调服务,监控并协助管理所有资源,提高程序系统稳定性。
1.2、设计目标
Zookeeper的设计目标就是在复杂且容易出错的分布式服务进行封装,以统一的简单易用接口形式,给用户提供一个稳定且高效可靠的服务。 Zookeeper作为一个典型的分布式数据一致性解决方案,依赖Zookeeper的分布式应用程序,可以基于Zookeeper实现数据发布/订阅、负载均衡、命名服务、服务注册与发现、分布式协调/事件通知、集群管理、Leader 选举、 分布式锁和队列 等功能
1.3、zookeeper服务流程图
1.4、性能效果
2、特性解析
2.1、简介
在生产中,Zookeeper一般以集群的方式对外提供服务,一个Zookeeper集群包含多个Zookeeper服务主机节点,所有的节点环境一致,共同对外提供服务。
整个集群对分布式数据一致性提供了全面的支持,具体包括以下两类共计五个特性:一类:顺序性、原子性、可靠性,二类:一致性、实效性.
2.2、服务相关
2.2.1、顺序性
为了保证同一个客户端发出的多个请求按顺序进行处理,那么就必须有这个一个功能,让所有请求按顺序的方式进入到Zookeeper中,并且以一个队列的形式存在,结合队列的"先进先出"的原则,实现请求处理的顺序性。
2.2.2、原子性
Zookeeper集群中所有的主机,对所有客户端请求的处理结果应该只有两种状态:成功/失败,不能出现一部分处理成功,另一部分处理失败。
2.2.3、可靠性
Zookeeper集群任意一台服务器都可接收信息请求,而且一旦服务端数据接收数据修改请求,其数据状态一旦发生变化。就会被存储起来,从而变保证集群中的所有数据都是可靠的
2.3、数据相关
2.3.1、一致性
对于客户端来说,无论请求Zookeeper集群中的哪一个节点,看到效果和处理的结构都是完全一样的。那么这就要求我们的Zookeeper集群节点间必须做好高效的数据同步功能。
2.3.2、实效性
当请求被成功的处理后,客户端能立即获取服务端的最新数据变化。 由于网络延时等原因,Zookeeper保证客户端在一个时间范围内获得集群主机节点的更新/失效信息,如果需要最新数据,读数据前同步一下即可。
2.4、顺序性实现
顺序性主要有两种:全局有序和偏序。
全局有序:如果在一台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布;
偏序:如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面。