Zookeeper应用场景

2022-06-30 15:04:24 浏览数 (1)

Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,主要是用来解决分布式应用中经常遇到的一些数据管理问题。

如:集群管理、统一命名服务、分布式配置管理、分布式消息队列、分布 式锁、分布式通知协调等。

越来越多的分布式计算开始强依赖ZK,比如Storm、Hbase

Zookeeper对分布式开发带来很多便利,用ZK的独有特性巧妙地解决了很多难题; 很多分布式技术用到Zookeeper或多或少特性,尤其是新生代分布式技术几乎都会依赖Zookeeper特性,如Hbase、火爆的Storm。

zookeeper名字空间由节点znode构成,其组织方式类似文件系统,其中各个节点相当于目录和文件,通过路径作为唯一标识。与文件系统不同的是,每个节点具有与之对应的数据内容,同时也可以具有子节点。

zookeeper用于存储协调数据,如状态、配置、位置等信息,每个节点存储的数据量很小,KB级别。

节点维护一个状态stat结构(包括数据变化的版本号、ACL变化、时间戳),以允许缓存验证与协调更新。每当节点数据内容改变,多一个版本号,类似HBase。客户端获取数据的同时也会获取数据版本号。节点的数据内容以原子方式读写。

节点具有一个访问控制列表(AccessControl List - ACL)来约束访问操作,即具有权限控制。

Watches:Zookeeper对Node的增、删、改、查都可触发监听

watch事件是一次性触发器,当watch监视的数据发生变化时,通知设置了该watch的client,即watcher

watch事件异步发送至观察者

watch是一次性触发的并且在获取watch事件和设置新watch事件之间有延迟,所以不能可靠的观察到节点的每一次变化

客户端监视一个节点,总是先获取watch事件,再发现节点的数据变化

watch事件的顺序对应于zookeeper服务所见的数据更新的顺序

流行的应用场景

1、分布式应用配置管理

发布与订阅即所谓的配置管理,顾名思义就是将数据发布到zk节点上,供订阅者动态获取数据,实现配置信息的集中式管理和动态更新。例如全局的配置信息,地址列表等就非常适合使用。

2、Name Service

这个主要是作为分布式命名服务,通过调用zk的create node api,能够很容易创建一个全局唯一的path,这个path就可以作为一个名称。序列化节点

3、分布式通知/协调

ZooKeeper中特有watcher注册与异步通知机制,能够很好的实现分布式环境下不同系统之间的通知与协调,实现对数据变更的实时处理。

使用方法:通常是不同系统都对ZK上同一个znode进行watch,监听znode的变化(包括znode本身内容及子节点的),其中一个系统update了 znode,那么另一个系统能够收到通知,并作出相应处理。

3、分布式锁

分布式锁,这个主要得益于ZooKeeper为我们保证了数据的强一致性,zk集群中任意节点(一个zk server)上的相同znode的数据是一定是相同的。

锁服务可以分为两类,一个是保持独占,另一个是控制时序。

4、集群管理

Hbase Master选举则是zookeeper经典的使用场景;

Storm集群管理

5、分布式队列

队列方面,一种是常规的先进先出队列,另一种是要等到队列成员聚齐之后的才统一按序执行。对于第二种先进先出队列,增加分布式锁服务以控制时序场景

0 人点赞