老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)

分布式之Zookeeper一(分布式鎖與Zookeeper集群)

說到分布式開發(fā),不得不說的就是zookeeper了;zookeeper官網(wǎng)說到Apache ZooKeeper致力于開發(fā)和維護(hù)可實(shí)現(xiàn)高度可靠的分布式協(xié)調(diào)的開源服務(wù)器。那么zk作為一個(gè)協(xié)調(diào)者的存在,是分布式比不可少的一部分。廢話不多說,直接上干貨

成都創(chuàng)新互聯(lián)擁有一支富有激情的企業(yè)網(wǎng)站制作團(tuán)隊(duì),在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)深耕十載,專業(yè)且經(jīng)驗(yàn)豐富。十載網(wǎng)站優(yōu)化營銷經(jīng)驗(yàn),我們已為上1000+中小企業(yè)提供了網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)解決方案,按需求定制制作,設(shè)計(jì)滿意,售后服務(wù)無憂。所有客戶皆提供一年免費(fèi)網(wǎng)站維護(hù)!

Zookeeper(https://zookeeper.apache.org/)的安裝包可以直接在官網(wǎng)上獲取,https://zookeeper.apache.org/doc/current/zookeeperStarted.html這里有Zookeeper的一些常用的簡單命令,我們可以嘗試著去試試它。

下面來說分布式鎖,它用到的場景;比如:我們常說的驚群效應(yīng)、Zookeeper集群爭先讀取緩存等。這里可能有人提到用redis實(shí)現(xiàn)的分布式鎖,其實(shí)對比redis和Zookeeper的官網(wǎng)敘述,我們就能清晰的發(fā)現(xiàn):Zookeeper比Redis更適合去做分布式鎖。Zookeeper的擔(dān)保第一條就是它的順序性和一致性,其次是它的原子性。大家也可以詳細(xì)的去了解一下。再分清楚這些之后,我們可以試著思考下Zookeeper它是怎么去實(shí)現(xiàn)的分布式鎖?根據(jù)什么去實(shí)現(xiàn)的?

可以想到如何獲取到Zookeeper的每個(gè)節(jié)點(diǎn)以及子節(jié)點(diǎn)變化,Zookeeper的Watch機(jī)制充分的實(shí)現(xiàn)了這一點(diǎn)。通過Watch機(jī)制可以清晰的監(jiān)聽到Zookeeper的每個(gè)節(jié)點(diǎn)的變化。自然而然的這里也要用到Zookeeper的第三方客戶端。Zookeeper的第三方客戶端有兩個(gè);一個(gè)是zkclient、一個(gè)是curator。在curator中它自己已經(jīng)實(shí)現(xiàn)了分布式鎖,感興趣的可以去看看它的實(shí)現(xiàn)源碼。

在第三方客戶端連接到Zookeeper之后,就可以開始實(shí)現(xiàn)分布式鎖了。鎖的排他性、堵塞性、可重入性。排他性zk默認(rèn)就實(shí)現(xiàn)了,zk的節(jié)點(diǎn)必須是唯一的。分布式鎖采用Zookeeper的臨時(shí)順序節(jié)點(diǎn)來實(shí)現(xiàn),首先獲取鎖,創(chuàng)建一個(gè)Zookeeper的臨時(shí)順序節(jié)點(diǎn);然后需要一個(gè)柵欄(CountDownLatch),確保所有人都拿到自己的編號,即在同一起跑線上。然后開始搶鎖,給一個(gè)發(fā)令槍(CountDown)。然后搶到鎖的就去執(zhí)行自己的業(yè)務(wù),watch再次監(jiān)聽節(jié)點(diǎn)數(shù)據(jù)變化,然后請求線程去進(jìn)行阻塞等待,接下來再刪除節(jié)點(diǎn),釋放鎖。

public boolean tryLock() {

        if(currentPath.get() == null || !client.exists(currentPath.get())) {
            String node = client.createEphemeralSequential(LockPath+"/", "locked");
            currentPath.set(node);
        }

        List children =client.getChildren(LockPath);
        // 排序list
        Collections.sort(children);

        // 判斷當(dāng)前節(jié)點(diǎn)是否是最小的
        if(currentPath.get().equals(LockPath+"/"+children.get(0))) {
            return true;
        }else {

            int curIndex = children.indexOf(currentPath.get().substring(LockPath.length() + 1));
            String bnode = LockPath+"/"+children.get(curIndex -1);
            beforePath.set(bnode);
        }
        return false;
    }

    public void lock() {
        if(! tryLock()) {
            // 阻塞等待鎖的釋放
            waitForLock();
            // 重新?lián)屾i
            lock();
        }
    }
    private void waitForLock() {

        CountDownLatch cdl = new CountDownLatch(1);
        // 用zkwatcher事件來通知
            IZkDataListener listener = new IZkDataListener() {

            public void handleDataDeleted(String dataPath) throws Exception {
                System.out.println("================zk節(jié)點(diǎn)被刪除================");
                cdl.countDown();
            }

            public void handleDataChange(String dataPath, Object data) throws Exception {
            }
        };
        // watcher /zk 數(shù)據(jù)變化
        client.subscribeDataChanges(beforePath.get(), listener);

        // 請求線程去進(jìn)行阻塞等待
        if(client.exists(beforePath.get())) {
            try {
                cdl.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        // 取消注冊事件
        client.unsubscribeDataChanges(beforePath.get(), listener);
    }

至此一個(gè)分布式鎖就實(shí)現(xiàn)了。

接下來說Zookeeper的偽集群。搭建的時(shí)候需要注意的情況:
1、DataDir的位置。
2、Zookeeper的端口號
3、myid文件,myid文件是創(chuàng)建在DataDir目錄下的,myid文件就是給一個(gè)id數(shù),id數(shù)需與server.1 ... 后邊的編號一致。
然后分別啟動三臺服務(wù)器,注意看服務(wù)器輸出的日志消息。不出意外的話Zookeeper的集群就可以搭建成功了!


當(dāng)前文章:分布式之Zookeeper一(分布式鎖與Zookeeper集群)
文章位置:http://www.xueling.net.cn/article/jjcjge.html

其他資訊

在線咨詢
服務(wù)熱線
服務(wù)熱線:028-86922220
TOP
主站蜘蛛池模板: 亚洲乱码一区二区三区三上悠亚 | 精品中文字幕视频 | 久久午夜无码鲁丝片午夜精品 | av影院在线播放 | 少妇精品久久久久www蜜月 | 亚洲精品成人无限看 | 啦啦啦在线观看视频免费观看 | 九九热视频在线观看 | 老妇女性较大毛片 | 91自拍.com| 中国国语毛片免费观看视频 | 亚洲精品天天 | 亚洲中文字幕无码中文 | av中文字幕在线观看 | 91成人黄色 | 97精品国产91久久久久久久 | 久久久精品国产99久久精品麻追 | 天天看AV片在线观看 | 中文字幕国产区 | 国产大屁股喷水视频在线观看 | 波多野结衣高清一区二区三区 | 久久伊人八月婷婷综合激情 | 国产精品美脚玉足脚交 | 91精品免费在线观看 | 免费国产A国产片高清网站 亚洲AV日韩AV男人的天堂在线 | 日韩一区二区a片免费观看 法国性xxxx精品hd | 99国内精品久久久久久久夜夜嗨 | www.免费视频网站 | 一级毛片不卡顿 | 久久精品99视频 | 俄罗斯xxxx性全过程 | 欧美一级大胆视频 | 少妇做爰高潮呻吟A片免费 亚洲AV永久无码天堂影院黑人 | 久久不见久久见免费影院视频观看 | 熟女无套高潮内谢视频 | av资源在线免费观看 | 成全免费高清观看 | 麻豆天美国产一区在线播放 | 国产a级理论片无码老男人 亚洲成人国产 | 99国产网站 | 黄色一毛片|