java zk分布式锁,zookeeper锁原理

  java zk分布式锁,zookeeper锁原理

  00-1010 1.当我们开发独立的应用程序时,涉及到并发同步,我们经常使用synchronized或Lock方法来解决多线程之间的代码同步问题。此时,所有线程都运行在同一个JVM下,没有任何问题。

  2.而我们的应用在分布式集群中工作时,属于多JVM工作环境(多机),无法通过多线程锁解决跨JVM之间的同步问题。那么就需要更高级的锁定机制来处理跨机器的进程间的数据同步问题。这是分布式锁定。(多节点从分布式组件获取锁)

  例如,下面的例子:

  各种抢票软件客户端通过zookeeper获得锁,最后只有一个客户端可以获得锁并先与12306服务器通信,最后与12306数据库服务器通信。通信后释放锁,其他客户端获取锁后也会这样做。(显然,前提是负载均衡后这些客户端都与节点集群中的同一个服务器通信)

  3.其他分布式锁

  00-1010核心思想:当一个客户端想要获取一个锁时,它创建一个节点,使用完锁后,它删除这个节点。

  1.当客户端获得锁时,在锁节点下创建一个临时序列节点。

  2.然后获取锁下的所有子节点。客户端得到所有子节点后,如果发现自己创建的子节点数量最少,则认为客户端得到了锁。使用锁后,删除该节点。

  注意:

  创建临时节点的原因:

  如果已获得锁的节点关闭,如果它是一个持久节点,则锁不能被释放。如果是临时节点,断电后连接断开时锁会自动释放。

  创建顺序节点的原因:

  节点按顺序编号,客户端通过节点号判断是否是序列号最小的节点,获得锁。

  3.如果你发现你创建的节点不是lock所有子节点中最小的,说明你还没有获得锁。此时,客户端需要找到比自己小的节点,为其注册一个事件监听器,监听删除事件。

  4.如果发现比自己小的节点被删除了,客户端的观察者就会收到相应的通知。此时,它会再次判断自己创建的节点在锁子节点中是否具有最小的序列号。如果是,它将获得锁。如果不是,则重复上述步骤,不断获取比自己小的节点,并注册监听。

  这就是这篇关于Java ZooKeeper分布式锁实现图的文章。关于Java ZooKeeper的更多信息,请搜索以前关于流行IT的文章或继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: