首页 > 代码库 > Zookeeper实现分布式锁服务(Chubby)

Zookeeper实现分布式锁服务(Chubby)

在分布式系统中,如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰,来保证一致性,在这种情况下,便需要使用到分布式锁

例如有N台服务器同时要对某个文件进行修改,如何才能保证文本不会被写乱,这就是一个简单的分布式锁应用场景

使用zookeeper就可以轻松实现分布式锁

思路


前期准备

在zookeeper中创建一个根节点(Locks),用于后续各个客户端的锁操作

 

技术分享


获取锁的过程

想要获取锁的client都在Locks中创建一个自增序的子节点,每个client得到一个序号,相当于排队

如果自己的序号是最小的,就成功获得锁

 

如果不是最小的,就关注自己前面的那个序号,发现前面那个走了以后,就轮到自己了

 

技术分享


技术分享

 

 

释放锁的过程

将自己对应的节点删除即可,下一个排队的节点就可以收到通知,从而被唤醒得到锁

 

例如client A需要释放锁,只需要把对应的节点1删除掉,因为client B已经关注了节点1,那么当节点1被删除后,zookeeper就会通知client B:你是序号最小的了,可以获取锁了

 

技术分享

 

Zookeeper实现分布式锁服务(Chubby)