15. 使用Apache Curator管理ZooKeeper (2)

newClient()工厂方法创建一个新的客户端实例,默认会话超时和默认连接超时。 它需要一个连接字符串,是ZooKeeper主机-端口对列表和要使用的重试策略。

CuratorFramework有一个命名空间的概念。 通过这个,可以在使用构造器方法创建CuratorFramework实例时设置命名空间。 当其中一个API被调用时,该框架将该命名空间预加载到所有路径:

CuratorFrameworkFactory.Builder builder = CuratorFrameworkFactory.builder(); CuratorFramework client = builder.connectString (server.getConnectString()).namespace("MyApp").retryPolicy(new RetryOneTime(1)).build(); client.create().forPath("/test_znode", data);

在这里,尽管znode的名称被指定为/test_znode,但是创建的实际znode是/MyApp/test_znode。

Curator框架还提供了一个名为CuratorTempFramework的有限功能框架接口,用于通过不可靠的网络(如WAN)进行临时连接。 在这个框架中,如果会话保持空闲一段时间,ZooKeeper连接将被关闭。

四 Curator recipe

Curator为ZooKeeper提供了一系列随时可用的recipe。 Curator实现的recipe的详细列表和描述可以从的项目页面中获取。

在这里,将简略地介绍一下ZooKeeper的recipe:

领导者选举:Curator为领导选举提供了两种算法:领导者锁定(leader latch)和领导者选择( leader selector)。两种算法在连接到Zookeeper集群的多个竞争者中选择一个“领导者”。
在领导者锁定中,如果一组n个参与者与竞争领导,则将n个参与者中的一个随机分配为领导,而在领导选择中,按照到达该Zookeeper服务器的请求的顺序来选择领导。 当领导者解除领导时,选择集群中的n个参与者的另一个竞争者。

锁:Curator实现以下不同类型的分布式锁:

共享重入锁:这种类型的锁提供全局同步的全分布锁。

共享锁:这是非重入共享重入锁。

共享重入读/写锁:这是一个可跨JVM使用的重入读/写互斥锁。

共享信号量:这是一个计数信号量(semaphore),可以跨JVM使用。

多锁共享:这是用来管理多个锁作为一个单一的实体。 acquire()调用获取所有的锁。 如果呼叫失败,所有获得的路径被释放。 release()调用释放所有托管的锁。

屏障(Barrier):这是屏障和双重屏障的具体实现。

计数器:提供了一种机制来管理共享计数器的共享整数。它还给出了分布式原子增量的分布式原子长整型,分布式原子整型和分布式原子值的机制。

缓存:缓存是通过路径缓存,节点缓存和树缓存recipe实现的,分别保存ZK路径的znode,本地缓存节点和所有本地缓存的子节点的状态变化数据。

队列:这提供了分布式队列实现。 支持以下不同类型的队列:

分布式队列:这是一个简单的分布式队列,其中放入队列中的条目是在FIFO中排序的。

分布式ID队列:这是一个分布式队列的版本,允许一些标识符与队列项相关联。

分布式优先级队列:这是ZooKeeper的分布式优先级队列的实现。在内部,它使用一个分布式队列,其中可以将优先级指定给项目。

分布式延迟队列:这是使用时间作为优先级的分布式优先级队列的变体。当将条目添加到队列时,会给出一个延迟值。直到超过延迟时间,该项目将被发送给消费者。

简单的分布式队列:这是ZooKeeper分布式org.apache.zookeeper.recipes.queue.DistributedQueue队列的一部分替代实现。

节点:这提供了一个persistent ephemeral节点的recipe;这是一个ephemeral的节点,即使在连接和会话中断的情况下也会试图保持在ZooKeeper中。

五 Curator实用程序

Curator类库也为ZooKeeper提供了一些有用的工具。 其中一些如下所示:

Test server:这是一个可用于本地进程ZooKeeper服务器的测试

Test cluster:这是一个内部运行的用于ZooKeeper服务器ensemble的测试

ZKPaths:提供了各种使用ZooKeeper znode路径的静态方法

EnsurePath:确保在使用之前创建特定znode路径的实用程序

BlockingQueueConsumer:一个类似于Java中的BlockingQueue的队列消费者

Reaper:删除没有子节点的路径和没有数据的节点的实用程序

六 Curator扩展

Curator扩展包除了包含在recipe包中那些外,还包括额外的recipe。 扩展包中的recipe具有curator-x-name的命名约定。

Curator目前提供以下扩展功能:

Service discovery:这是一个使用ZooKeeper作为服务发现机制的系统。

Service discovery server:这是一个使用REST服务进行非Java和遗留程序的Curator服务发现。 它公开RESTful Web服务来注册,删除和查询服务。

Curator RPC proxy:该模块实现了一个代理,将非Java环境与Curator框架和recipe桥接在一起。 它使用Apache Thrift,使大量的语言和环境使用Curator的功能,并统一ZooKeeper跨语言/环境的用法。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgdfj.html