3.2.1 技巧
Curator实现了除ZooKeeper二次提交外的所有的技巧(recipes)。Curator Recipes可以实现自动化创建节点路径的父节点。
3.2.1.1 推选
Leader Latch 分布式计算,领导者推选就是指派一个单一进程作为在多台计算机节点间的组织者的处理过程。在任务开始之前,整个网络不会意识到那个节点将会作为任务的”领导者”或者协助者。当一个领导者推选已经运行后,然后,任何节点通过网络能够意识到一个特殊、独一无二的节点作为任务的领导者。
Leader Election初始化Curator领导者推选技巧
3.2.1.2 锁
Shared Reentrant Lock 完全地分布式锁,那个是一个全局同步。这就意味着,在任意及时的快照印象中,没有两个客户端认为他们掌握着相同的锁。
Shared Lock 和Shared Reentrant Lock相似,但是不是凹角的特点。
Shared Reentrant Read Write Lock 一个跨JVMs运行的凹角读/写互斥。一个读写锁维持着一对相关的锁,一个是只读操作,另一个是写操作。只读锁可能在多个读进程并发持有,前提是只要没有写。写锁是独有的。
Shared Semaphore 一个跨JVM运行的计数信号。在所有JVM中所有的进程使用相同的锁路径完成一个受到限制的出租集合的内部进程。另外,信号是大多数是“公平”的,任何用户在有序请求中(以ZooKeeper的视角)将得到一个出租进程。
Multi Shared Lock 一个容器管理多个锁作为一个单一的实体。当acquire()被调用时,所有的锁是需要的。如果请求调用失败,那个请求调用的任何路径会释放。相似而言,当release()调用时,所有锁都会释放(忽略失败的情况)。
3.2.1.3 阻塞
Barrier 分布式系统使用阻塞去阻塞一个集合节点的处理操作,直到满足一个状态时,所有节点将继续先前的处理。
Double Barrier 双倍阻塞能够使客户端去同步一个计算的开始和结束。当足够的进程到达加入到这个阻塞时,所有进程开始计算,一旦完成它们的处理,它们就会离开那个阻塞点。
3.2.1.4 计数器
Shared Counter 管理一个共享的integer数。所有的客户端观察相同的路径,这个路径将有伴随日期的共享Integer数(考虑ZooKeeper的正常一致性保证)。
Distributed Atomic Long 一个尝试原子递增的计数器。它首先尝试使用乐观锁,如果它失败了,一个可选的InterProcessMutex将占有这个锁。对于乐观锁和互斥锁,一个retry策略用来尝试递增integer值。
3.2.1.5 缓存
Path Cache 一个路径缓存用来watch一个ZooKeeper的节点。无论什么时候一个孩子节点被添加、更新或者删除,路径缓存将改变它的状态,包括孩子节点的数据和孩子节点的状态。在Curator Framework组件中,PathChildrenCache实现了这个功能,任何对于路径的修改都将传递注册过的PathChildr上。
Node Cache 一个实用工具类尝试保持数据从一个节点到本地缓存。这个类watch节点,响应对应的更新/创建/删除事件,取下节点的数据保存到本地缓存中。你能够注册一个监听就能够获得通知。
Tree Cache 一个实用工具类尝试保持所有的数据从一个ZooKeeper路径上的所有孩子本地化缓存。这个类观察(Watch)ZooKeeper路径,响应对应的更新/创建/删除事件,取下节点的数据保存到本地缓存中。
3.2.1.6 节点
Persistent Ephemeral Node 一个临时节点尝试保持在ZooKeeper上呈现,即使连接和session中断。
3.2.1.7 队列
Distributed Queue 一个分布式队列ZooKeeper 技巧(recipe)的实现。所有放到队列中的数据项能够保证是有序的(通过ZK的持久化序列节点)。如果单一消费者从队列中取数据项,数据项是FIFO被取出。如果排序是很重要的,使用LeaderSelector正常化一个单一的消费者。
Distributed Id Queue 分布式队里的一个版本,它允许ID关联队列中的数据项。根据需要,数据项能够从队列中删除。
Distributed Priority Queue 分布式优先级队列的一个实现。
Distributed Delay Queue 一个分布式延迟队列的一个实现。
Simple Distributed Queue 一个直接替换ZK自带的DistributedQueue。
欢迎关注我的微信公众号