zookeeper - 应用实现

 

实现一个分布式锁 node

经过在zookeeper的某路径节点下建立临时序列节点来实现分布式锁,即每一个线程(跨进程的线程)获取同一把锁前,都须要在一样的路径下建立一个节点,节点名字由uuid + 递增序列组成。而经过对比自身的序列数是否在全部子节点的第一位,来判断是否成功获取到了锁。当获取锁失败时,它会添加watcher来监听前一个节点的变更状况,而后进行等待状态。直到watcher的事件生效将本身唤醒,或者超时时间异常返回。app

 

让咱们分析如何在ZooKeeper集合中选举leader节点。考虑一个集群中有N个节点。分布式

leader选举的过程以下:ui

  • 全部节点建立具备相同路径 /app/leader_election/guid_ 的顺序、临时节点。
  • ZooKeeper集合将附加10位序列号到路径,建立的znode将是 /app/leader_election/guid_0000000001,/app/leader_election/guid_0000000002等。
  • 对于给定的实例,在znode中建立最小数字的节点成为leader,而全部其余节点是follower。
  • 每一个follower节点监视下一个具备最小数字的znode。例如,建立znode/app/leader_election/guid_0000000008的节点将监视znode/app/leader_election/guid_0000000007,建立znode/app/leader_election/guid_0000000007的节点将监视znode/app/leader_election/guid_0000000006。
  • 若是leader关闭,则其相应的znode/app/leader_electionN会被删除。
  • 下一个在线follower节点将经过监视器得到关于leader移除的通知。
  • 下一个在线follower节点将检查是否存在其余具备最小数字的znode。若是没有,那么它将承担leader的角色。不然,它找到的建立具备最小数字的znode的节点将做为leader。
  • 相似地,全部其余follower节点选举建立具备最小数字的znode的节点做为leader。
相关文章
相关标签/搜索