目录
近年来,分布式应用越来越广泛,不可避免的要涉及节点之间的同步及协调方面的问题,因此需要一种可靠的、高效的协调机制来统一分布式系统的状态。zookeeper正式分布式系统上解决这类问题的利器。本文简单的说明了zookeeper的原理和应用场景
- zookeeper的概述
- 典型的应用场景
- zookeeper的基本概念
zookeeper的概述
介绍zookeeper的时候避免不了的得说一下这句晦涩的语句:zookeeper是源代码开放的分布式协调服务,是google chubby的开源实现,是一个高性能的分布式数据的一致性解决方案,它可以将那些复杂的、容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并提供一系列简单易用的接口给用户使用。那么zookeeper究竟是做什么的呢?
-
zookeeper是分布式协调服务,用于解决分布式数据的一致性问题。比如:
顺序一致性:从一个客户端发起的事务请求,最终会严格按照发起的顺序在zookeeper服务器端执行;
原子性:所有的事务请求的处理结果,在整个集群的所有节点上是一致的;
单一视图:无论客户端连接到那个zookeeper服务器,看到的数据都是一致的;
可靠性:一旦服务端成功的应用了一个事务并完成了对客户端的响应,那么这个事务所引起的服务端状态的变更会一直保留下来,知道另外的一个事务改变;
实时性:zookeeper保证在一段时间内客户端一定能从服务端读取最新的数据状态;
-
zookeeper是高性能的。zookeepr拥有较高的吞吐量。
-
可以调用zookeeper提供的接口解决一些分布式应用中的实际问题。
- zookeeper的优势:源码开放;已经被证实是高性能,易用的稳定的工业级产品;广泛的应用:hadoop,hbase,storm,solr
zookeeper典型的应用场景
1. 数据的发布订阅
数据的发布与订阅顾名思义值得就是一方发布数据,另一方获取这些发布的数据即订阅订阅数据。
数据订阅的常用方法有两种:推模式和拉模式。推模式指的是服务器主动向客户端推送消息,拉模式指的是客户端主动去服务器获取数据,一般采用定时轮询的方式。
Zookeeper采用的是推拉结合的方法,发布者将数据发布到zk集群的节点上,订阅者通过一定的方法告诉服务器,其对哪些节点感兴趣,那服务器在这些节点的数据发生变化时,通知客户端,客户端得到通知后去服务器获取数据信息。
2. 命名服务
命名服务用于提供名称,比如数据库表的ID。数据库表一般使用两种ID,一种是自动增长的ID,一种是UUID,这两种ID都有各自的缺点。自动增长的ID,在单表中可以使用,但是不能在分布式环境中使用。UUID可以在分布式环境中使用,但是由于没有规律,难以理解。使用zk可以生成顺序增长的,可以在集群环境中使用的,易于理解的ID。
3. 分布式协调、通知
在众多的大数据项目中使用的比较多的就是心跳机制。在分布式系统中,常常需要知道某个机器是否可用,传统的开发中,可以通过ping某个主机来实现,在ZK中是让所有的主机在ZK上注册一个临时节点,通过查看节点是否在zk上存在,来判断主机是否可达,降低系统的复杂度。
4. 负载均衡
如图,是一个使用zookeeper实现的一个负载均衡的分布式文件系统的例子。
-
首先文件系统在启动时会在zookeeper上注册一个临时节点,临时节点在该文件系统出现问题(如不能访问)的时候,zookeeper上对应的临时节点会自动被删除,因此,zookeeper上的节点列表就表示是最新的可用的文件系统。
-
然后采用一些算法(比如计算各个文件系统的容量),从列表中选择一个文件系统,并与之连接,将数据存储进去,从而实现分布式文件系统的负载均衡
zookeeper的基本概念
1. 集群角色
leader:整个集群的工作机制中的核心
Follower:集群状态的跟随着
Observer:观察者
2. session
session指的是客户端和zk的连接,通过TCP协议进行连接。通过这个TCP连接,客户端能够通过心跳检测与服务器保持有效的会话,也能向zk服务器发送请求并会的响应。
3. 数据模型
zookeeper的数据模型是一棵树,树的节点就是znode(包括持久节点和临时节点),znode可以保存信息。大多数的zookeeper开发就是和数据节点打交道,对数据节点的增删改查。
4. 版本说明
版本类型 | 说明 |
---|---|
version | 当前数据节点的数据内容的版本号 |
cversion | 当前数据节点的子节点的版本号 |
aversion | 当前数据节点的ACL变更的版本号 |
5. Watcher事件监听器
zookeeper允许用户在指定的节点上注册一些watcher,当数据节点发生变化的时候,zookeeper服务器会将这个变化的通知发送给该用户。
6. ACL权限控制
ACL是Access Control Lists 的简写,zookeeper采用ACL进行权限控制,ACL有以下权限:
create:创建子节点的权限
read: 获取节点数据和子节点列表的权限
write:更新节点数据集的权限
delete:删除子节点的权限
admin:设置ACL的权限
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。