作家
登录

基于Zookeeper的分布式锁

作者: 来源: 2017-10-24 13:07:50 阅读 我要评论

  •             if ( client.getZookeeperClient().getRetryPolicy().allowRetry(retryCount++, System.currentTimeMillis() - startMillis, RetryLoop.getDefaultRetrySleeper()) ) 
  •             { 
  •                 isDone = false
  •             } 
  •             else 
  •             { 
  •                 throw e; 
  •             } 
  •         } 
  •     } 
  •  
  •     //如不雅获得锁则返回该子节点的路径 
  •     if ( hasTheLock ) 
  •     { 
  •         return ourPath; 
  •     } 
  •  
  •     return null
  • 膳绫擎代码中重要有两步操作:

    • driver.createsTheLock:创建临时且有序的子节点,琅绫擎实现比较简单不做展开,重要存眷几种节点的模式:1)PERSISTENT(永远);2)PERSISTENT_SEQUENTIAL(永远且有序);3)EPHEMERAL(临时);4)EPHEMERAL_SEQUENTIAL(临时且有序)。
    • internalLockLoop:壅塞等待直到获得锁。

    看下internalLockLoop是怎么断定锁以及壅塞等待的,这里删除了一些无关代码,只保存主流程:


    1. //自旋直至获得锁 
    2. while ( (client.getState() == CuratorFrameworkState.STARTED) && !haveTheLock ) 
    3.     //获取所有的子节点列表,并且按序号大年夜小到大年夜排序 
    4.     List<String>        children = getSortedChildren(); 
    5.      
    6.     //根据序号断定当缁び节点是否为最小子节点 
    7.     String              sequenceNodeName = ourPath.substring(basePath.length() + 1); // +1 to include the slash 
    8.     PredicateResults    predicateResults = driver.getsTheLock(client, children, sequenceNodeName, maxLeases); 
    9.     if ( predicateResults.getsTheLock() ) 
    10.     { 
    11.         //如不雅为最小子节点则认为获得锁 
    12.         haveTheLock = true
    13.     } 
    14.     else 
    15.     { 
    16.         //不然获取前一个子节点 
    17.         String  previousSequencePath = basePath + "/" + predicateResults.getPathToWatch(); 
    18.  
    19.         //这里应用对象监督器做线程同步,当获取不到锁时监听前一个子节点删除消息并且进行wait(),当前一个子节点删除(也就是锁释放)时,回调会经由过程notifyAll唤醒此线程,此线程持续自旋断定是否获得锁 

        推荐阅读

        一文读懂深度学习与机器学习的差异

      沙龙晃荡 | 去哪儿、陌陌、ThoughtWorks在主动化运维中的实践!10.28不见不散!“计算机法度榜样可以在给定某种类其余义务 T 和机能度量 P 下进修经验 E ,如不雅其在义务 T 中的机能正好可以用 P>>>详细阅读


      本文标题:基于Zookeeper的分布式锁

      地址:http://www.17bianji.com/lsqh/38128.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)