Zookeeper是一个典型的发布/订阅模式的分布式数据管理与协调框架,开发人员可以使用它来进行分布式数据的发布与订阅。另一方面,通过对Zookeeper 丰富的数据节点类型进行交叉使用,配合Watcher 时间通知机制,可以非常方便地构建一系列分布式应用中都会涉及的核心功能:
数据发布/订阅,负载均衡,命名服务,分布式协调/通知,集群管理,Master选举,分布式锁和分布式队列。
1.数据发布/订阅:
主要是两种模式:分别是推(Push)模式和拉(Pull)模式。在推模式中,服务端主动将数据更新发送给所有订阅的客户端,而拉模式则是由客户端主动发起请求获取最新消息。通常客户端都采用定时轮询拉取的方式。
2.负载均衡:
针对“软方面” 的负载均衡。
域名注册:主要是针对服务提供者来说,域名注册过程可以简单地概括为:每个服务提供者在启动的过程中,都会把自己的域名信息注册到Register集群中。
(1)服务提供者通过 SDK 提供的API 接口,将域名、IP地址 和端口发送给 Register 集群。例如,A机器用于提供 serviceA.XXX.com,于是他就向 Register 发送一个 “域名-> IP:PORT ” 的映射:“ serviceA.xxx.com -> 192.168.0.1:0:8080 ” .
(2)Register 获取到域名、IP地址和端口配置后,根据域名 将信息写入相应的Zookeeper 域名节点中。
3.命名服务:
Zookeeper 提供的命名服务功能与 JNDI 技术有相似的地方。
4.分布式协调/通知:
基于Zookeeper 实现分布式协调与通知功能,通常的做法是不同的客户端都对Zookeeper上同一个数据节点进行 Watcher 注册,监听数据节点的变化,(包括数据节点本身及其子节点),如果数据节点发生变化,那么所有订阅的客户端都能够接收到相应的Watcher的通知,并做出相应的处理。
5.集群管理:
包括集群监听与集群控制,前者侧重对集群运行时的收集,后者侧重于对集群进行操作与控制。
6.Master选举:
分布式最核心的特性就是能够将具有独立计算能力的系统单元部署在不同的机器上,构成一个完整的分布式系统。
7.分布式锁:
分布式锁是控制分布式系统之间同步访问共享资源的方式。。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要通过一些互斥手段来防止彼此之间的干扰,以保证一致性。则是分布式锁应用情况。
8.分布式队列:
FIFO:先入先出。
Barrier:分布式屏障