一:分布式锁
zookeeper 分布式锁,如果自己实现的话,大抵的实现方式如下:
公平锁
在 zookeeper 的指定节点(locks)下创建临时顺序节点 node_n ;
获取 locks 下面的所有子节点 children。
对子节点按节点自增序号从小到大排序。
判断本节点是不是第一个子节点,如果是,则获取到锁。如果不是,则监听比该节点小的那个节点的删除事件。
若监听事件生效,则回到第二步重新判断,直到获取到锁。
非公平锁
在 zookeeper 的某个节点(lock)上创建临时节点 znode。
创建成功,就表示获取到了这个锁;其他客户端来创建锁会失败,只能注册对这个锁的监听。
其他客户端监听到这个锁被释放(znode节点被删除),就会尝试加锁(创建节点),继续执行第二步。
zookeeper recipes 客户端为提供了多种分布式锁实现
InterProcessMutex(可重入排他锁)
InterProcessSemaphoreMutex(不可重入排他锁)
InterProcessReadWriteLock(分布式读写锁)
InterProcessSemaphore(共享信号量 —— 设置最大并行数量)
二:ID生成器
使用ZooKeeper持久顺序节点的次序特性。来维护节点的编号。
这里,我们采用第二种,通过Zo