暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ZK-分布式锁

董源龙 2021-10-13
297

流程



算法流程

    利用Zookeeper的EPHEMERAL_SEQUENTIAL(临时顺序)节点及watcher机制,创建的节点都是有顺序的,每次选择最小编号的节点获得锁。当前节点watcher上一个节点,当上一个节点被删除时,当前节点成为最小节点,获得锁

    (1)如果锁空间的根节点不存在,首先创建Znode根节点。假设为“/mylock”,代表了一把分布式锁。

    (2)客户端如果需要占用锁,则在“/test/lock”下创建临时的且有序的子节点。尽量使一个有意义的子节点前缀,比如“/mylock/seq-”,第一个客户端对应的子节点为“/mylock/00000”,第二个为 “/mylock/00001” ,以此类推。

    (3)判断自己创建的子节点是否为当前子节点列表中序号最小的子节点。如果是则认为获得锁,否则监听前一个Znode子节点变更消息,获得子节点变更通知后重复此步骤直至获得锁;

    (4)获取锁后,开始处理业务流程。完成业务流程后,删除对应的子节点,完成释放锁的工作。以便后面的节点获得分布式锁。


因为zk创建的临时节点,如果zk心跳检测客户机宕机,自动删除节点



文章转载自董源龙,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论