欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

zookeeper在Java中的简单应用

程序员文章站 2022-04-06 16:42:11
...

Zookeeper

1.什么是zookeeper

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。
简化分布式应用协调及其管理的难度,提供高性能的分布式服务。

2.节点类型

  1. 临时节点(ephemeral)
  2. 持久节点(persistent)

2.1节点形式

  1. PERSISTENT :持久形
  2. PERSISTENT_SEQUENTIAL:持久有序形
  3. EPHEMERAL:临时性
  4. EPHEMERAL_SEQUENTIAL:临时有序形
    注:持久节点:创建后不会自动删除;临时节点:连接关闭后会自动删除节点,可以用个分布式锁

3.Zookeeper数据结构

层次化的目录结构,命名符合常规文件系统规范(类似文件系统);
每个节点(znode),并且其有一个唯一的路径标识;
节点Znode可以包含数据和子节点(但是EPHEMERAL类型的节点不能有子节点);

4.Zookeeper应用场景

4.1 数据发布与订阅(配置中心)

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

4.2 命名服务*

命名服务也是分布式系统中比较常见的一类场景。在分布式系统中,通过使用命名服务,客户端应用能够根据指定名字来获取资源或服务的地址,提供者等信息。被命名的实体通常可以是集群中的机器,提供的服务地址,远程对象等等——这些我们都可以统称他们为名字(Name)。其中较为常见的就是一些分布式服务框架中的服务地址列表。通过调用ZK提供的创建节点的API,能够很容易创建一个全局唯一的path,这个path就可以作为一个名称。
Dubbo使用ZooKeeper服务注册:服务提供者在启动的时候,向zookeeper上的指定节点/dubbo/serviceName/providersURL/dubbo/{serviceName}/providers目录下写入自己的URL地址,这个操作就完成了服务的发布。 服务消费者启动的时候,订阅/dubbo/{serviceName}/providers目录下的提供者URL地址, 并向/dubbo/serviceName/consumersURLZKDubbo/dubbo/{serviceName} /consumers目录下写入自己的URL地址。 注意,所有向ZK上注册的地址都是 ***临时节点***,这样就能够保证服务提供者和消费者能够自动感应资源的变化。 另外,Dubbo还有针对服务粒度的监控,方法是订阅/dubbo/{serviceName}目录下所有提供者和消费者的信息,对系统进行服务治理

4.3 分布式通知/协调

ZooKeeper中特有watcher注册与异步通知机制,能够很好的实现分布式环境下不同系统之间的通知与协调,实现对数据变更的实时处理。使用方法通常是不同系统都对ZK上同一个znode进行注册,监听znode的变化(包括znode本身内容及子节点的),其中一个系统znode节点内容发生变化(节点的新增,修改,删除),那么另一个系统能够收到通知,并作出相应处理。

4.4 分布式锁

分布式环境中多台服务器就会有不同的jvm,就没有办法调用同一把锁,就需要用到分布式锁。
zookeeper利用临时节点在会话结束或者会话超时后会被删除的特性,做出高可用(集群部署zk)的分布式锁。(利用数据库和redis实现分布式锁,如果程序出现异常,锁不被释放)