zookeeper在Java中的简单应用
Zookeeper
1.什么是zookeeper
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。
简化分布式应用协调及其管理的难度,提供高性能的分布式服务。
2.节点类型
- 临时节点(ephemeral)
- 持久节点(persistent)
2.1节点形式
- PERSISTENT :持久形
- PERSISTENT_SEQUENTIAL:持久有序形
- EPHEMERAL:临时性
- EPHEMERAL_SEQUENTIAL:临时有序形
注:持久节点:创建后不会自动删除;临时节点:连接关闭后会自动删除节点,可以用个分布式锁
3.Zookeeper数据结构
层次化的目录结构,命名符合常规文件系统规范(类似文件系统);
每个节点(znode),并且其有一个唯一的路径标识;
节点Znode可以包含数据和子节点(但是EPHEMERAL类型的节点不能有子节点);
4.Zookeeper应用场景
4.1 数据发布与订阅(配置中心)
发布与订阅模型,即所谓的配置中心,就是发布者将数据发布到ZK节点上,供订阅者动态获取数据,实现配置信息的集中式管理和动态更新。例如全局的配置信息,服务式服务框架的服务地址列表等就非常适合使用。
4.2 命名服务*
命名服务也是分布式系统中比较常见的一类场景。在分布式系统中,通过使用命名服务,客户端应用能够根据指定名字来获取资源或服务的地址,提供者等信息。被命名的实体通常可以是集群中的机器,提供的服务地址,远程对象等等——这些我们都可以统称他们为名字(Name)。其中较为常见的就是一些分布式服务框架中的服务地址列表。通过调用ZK提供的创建节点的API,能够很容易创建一个全局唯一的path,这个path就可以作为一个名称。
Dubbo使用ZooKeeper服务注册:服务提供者在启动的时候,向zookeeper上的指定节点/dubbo/{serviceName}/providers目录下的提供者URL地址, 并向/dubbo/{serviceName}目录下所有提供者和消费者的信息,对系统进行服务治理。
4.3 分布式通知/协调
ZooKeeper中特有watcher注册与异步通知机制,能够很好的实现分布式环境下不同系统之间的通知与协调,实现对数据变更的实时处理。使用方法通常是不同系统都对ZK上同一个znode进行注册,监听znode的变化(包括znode本身内容及子节点的),其中一个系统znode节点内容发生变化(节点的新增,修改,删除),那么另一个系统能够收到通知,并作出相应处理。
4.4 分布式锁
分布式环境中多台服务器就会有不同的jvm,就没有办法调用同一把锁,就需要用到分布式锁。
zookeeper利用临时节点在会话结束或者会话超时后会被删除的特性,做出高可用(集群部署zk)的分布式锁。(利用数据库和redis实现分布式锁,如果程序出现异常,锁不被释放)
上一篇: 求教关于Zend Optimizer安装