乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      zookeeper 分布式鎖服務(wù)

       知識(shí)存儲(chǔ)館 2014-08-16

      分布式鎖服務(wù)在大家的項(xiàng)目中或許用的不多,因?yàn)榇蠹叶及雅潘旁跀?shù)據(jù)庫(kù)那一層來(lái)?yè)酢.?dāng)大量的行鎖、表鎖、事務(wù)充斥著數(shù)據(jù)庫(kù)的時(shí)候。一般web應(yīng)用很多的瓶頸都在數(shù)據(jù)庫(kù)上,這里給大家介紹的是減輕數(shù)據(jù)庫(kù)鎖負(fù)擔(dān)的一種方案,使用zookeeper分布式鎖服務(wù)。

      zookeeper是hadoop下面的一個(gè)子項(xiàng)目, 用來(lái)協(xié)調(diào)跟hadoop相關(guān)的一些分布式的框架, 如hadoop, hive, pig等, 其實(shí)他們都是動(dòng)物, 所以叫zookeeper ——“動(dòng)物園管理員”。動(dòng)物園里當(dāng)然有好多的動(dòng)物,游客可以根據(jù)動(dòng)物園提供的向?qū)D到不同的場(chǎng)館觀賞各種類型的動(dòng)物,而不是像走在原始叢林里,心驚膽顫的被動(dòng)物所觀賞。為了讓各種不同的動(dòng)物呆在它們應(yīng)該呆的地方,而不是相互串門,或是相互廝殺,就需要?jiǎng)游飯@管理員按照動(dòng)物的各種習(xí)性加以分類和管理,這樣我們才能更加放心安全的觀賞動(dòng)物?;氐轿覀兤髽I(yè)級(jí)應(yīng)用系統(tǒng)中,隨著信息化水平的不斷提高,我們的企業(yè)級(jí)系統(tǒng)變得越來(lái)越龐大臃腫,性能急劇下降,客戶抱怨頻頻。拆分系統(tǒng)是目前我們可選擇的解決系統(tǒng)可伸縮性和性能問(wèn)題的唯一行之有效的方法。但是拆分系統(tǒng)同時(shí)也帶來(lái)了系統(tǒng)的復(fù)雜性——各子系統(tǒng)不是孤立存在的,它們彼此之間需要協(xié)作和交互,這就是我們常說(shuō)的分布式系統(tǒng)。各個(gè)子系統(tǒng)就好比動(dòng)物園里的動(dòng)物,為了使各個(gè)子系統(tǒng)能正常為用戶提供統(tǒng)一的服務(wù),必須需要一種機(jī)制來(lái)進(jìn)行協(xié)調(diào)——這就是ZooKeeper——?jiǎng)游飯@管理員。

      ZooKeeper本質(zhì)上是一個(gè)分布式的小文件存儲(chǔ)系統(tǒng)。原本是Apache Hadoop的一個(gè)組件,現(xiàn)在被拆分為一個(gè)Hadoop的獨(dú)立子項(xiàng)目,在HBase(Hadoop的另外一個(gè)被拆分出來(lái)的子項(xiàng)目,用于分布式環(huán)境下的超大數(shù)據(jù)量的DBMS)中也用到了ZooKeeper集群。ZooKeeper有如下的特性:

      1) 簡(jiǎn)單

      ZooKeeper核心是一個(gè)精簡(jiǎn)的文件系統(tǒng),它提供了一些簡(jiǎn)單的文件操作以及附加的功能,例如排序和通知。

      2) 易表達(dá)

      ZooKeeper的數(shù)據(jù)結(jié)構(gòu)原型是一棵znode樹(shù)(類似Linux的文件系統(tǒng)),并且它們是一些已經(jīng)被構(gòu)建好的塊,可以用來(lái)構(gòu)建大型的協(xié)作數(shù)據(jù)結(jié)構(gòu)和協(xié)議。

      3) 高可用性

      ZooKeeper可以運(yùn)行在一組服務(wù)器上,同時(shí)它們被設(shè)計(jì)成高可用性,為你的應(yīng)用程序避免單點(diǎn)故障。

      4) 松耦合交互

      ZooKeeper提供的Watcher機(jī)制使得各客戶端與服務(wù)器的交互變得松耦合,每個(gè)客戶端無(wú)需知曉其他客戶端的存在,就可以和其他客戶端進(jìn)行數(shù)據(jù)交互。

      5) 豐富的API

      ZooKeeper為開(kāi)發(fā)人員提供了一套豐富的API,減輕了開(kāi)發(fā)人員編寫通用協(xié)議的負(fù)擔(dān)。

      zookeeper其實(shí)是集群中每個(gè)節(jié)點(diǎn)都維護(hù)著一棵相同的樹(shù), 樹(shù)的結(jié)構(gòu)跟linux的目錄結(jié)構(gòu)的概念差不多, 以/為跟節(jié)點(diǎn), 下邊可以擴(kuò)展任意的節(jié)點(diǎn)和葉子節(jié)點(diǎn), 每個(gè)節(jié)點(diǎn)都可以寫入數(shù)據(jù). 基于zookeeper的分布式鎖的實(shí)現(xiàn), 其實(shí)是得益于zookeeper同步文件的強(qiáng)大性, 我們相信每時(shí)每刻我們?cè)L問(wèn)zookeeper的樹(shù)時(shí), 相同節(jié)點(diǎn)返回的數(shù)據(jù)都是一致的. 這要靠zookeeper內(nèi)部的一些算法來(lái)實(shí)現(xiàn). 特別是leader的選舉算法。

      官方文檔:http://zookeeper./doc/r3.3.2/zookeeperOver.html#ch_DesignOverview

      下載:http://zookeeper./releases.html

      C#的zookeeper客戶端還是有一些和zookeeper最新版3.4.3兼容 https://github.com/ewhauser/zookeeper/branches 

      zookeeper集群的每個(gè)節(jié)點(diǎn)的數(shù)據(jù)都是一致的, 那么我們可以通過(guò)這些節(jié)點(diǎn)來(lái)作為鎖的標(biāo)志.

      首先給鎖設(shè)置一下API, 至少要包含, lock(鎖住), unlock(解鎖), isLocked(是否鎖住)三個(gè)方法,然后我們可以創(chuàng)建一個(gè)工廠(LockFactory), 用來(lái)專門生產(chǎn)鎖.鎖的創(chuàng)建過(guò)程如下描述:

      前提:每個(gè)鎖都需要一個(gè)路徑來(lái)指定(如:/geffzhang/lock)

      1.根據(jù)指定的路徑, 查找zookeeper集群下的這個(gè)節(jié)點(diǎn)是否存在.(說(shuō)明已經(jīng)有鎖了)

      2. 如果存在, 根據(jù)查詢者的一些特征數(shù)據(jù)(如ip地址/hostname), 當(dāng)前的鎖是不是查詢者的

      3. 如果不是查詢者的鎖, 則返回null, 說(shuō)明創(chuàng)建鎖失敗

      4. 如果是查詢者的鎖, 則把這個(gè)鎖返回給查詢者

      5. 如果這個(gè)節(jié)點(diǎn)不存在, 說(shuō)明當(dāng)前沒(méi)有鎖, 那么創(chuàng)建一個(gè)臨時(shí)節(jié)點(diǎn), 并將查詢者的特征信息寫入這個(gè)節(jié)點(diǎn)的數(shù)據(jù)中, 然后返回這個(gè)鎖.

      據(jù)以上5部, 一個(gè)分布式的鎖就可以創(chuàng)建了.

      創(chuàng)建的鎖有三種狀態(tài):

      1. 創(chuàng)建失敗(null), 說(shuō)明該鎖被其他查詢者使用了.’

      2. 創(chuàng)建成功, 但當(dāng)前沒(méi)有鎖住(unlocked), 可以使用

      3. 創(chuàng)建成功, 但當(dāng)前已經(jīng)鎖住(locked)了, 不能繼續(xù)加鎖.

       

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多