Zookeeper学习

Zookeeper基础(05)实现一个原语:通过zookeepe

2019-01-19  本文已影响9人  郭艺宾

关于ZooKeeper的功能,⼀个简单的例⼦就是通过锁来实现临界区域。我们知道有很多形式的锁(如:读/写锁、全局锁),通过ZooKeeper来实现锁也有多种⽅式。这⾥讨论⼀个简单的⽅式来说明应⽤中如何使⽤ZooKeeper,我们不再考虑其他形式的锁。

假设有⼀个应⽤由n个进程组成,这些进程尝试获取⼀个锁。再次强调,ZooKeeper并未直接暴露原语,因此我们使⽤ZooKeeper的接口来管理znode,以此来实现锁。为了获得⼀个锁,每个进程p尝试创建znode,名为/lock。如果进程p成功创建了znode,就表⽰它获得了锁并可以继续执行其临界区域的代码。不过⼀个潜在的问题是进程p可能崩溃,导致这个锁永远⽆法释放。在这种情况下,没有任何其他进程可以再次获得这个锁,整个系统可能因死锁⽽失灵。为了避免这种情况,我们不得不在创建这个节点时指定/lock为临时节点。

其他进程因znode存在⽽创建/lock失败。因此,进程需要监听/lock的变化,并在检测到/lock删除时再次尝试创建节点来获得锁。当收到/lock删除的通知时,如果进程p还需要继续获取锁,它就继续尝试创建/lock的步骤,如果其他进程已经创建了,就继续监听节点

上一篇 下一篇

猜你喜欢

热点阅读