[轉載]Zookeeper全解析——Paxos作為靈魂

Paxos描述了這樣一個場景虏杰,有一個叫做Paxos的小島(Island)上面住了一批居民淀散,島上面所有的事情由一些特殊的人決定秧荆,他們叫做議員(Senator)祠墅。議員的總數(Senator Count)是確定的,不能更改响谓。島上每次環(huán)境事務的變更都需要通過一個提議(Proposal)损合,每個提議都有一個編號(PID),這個編號是一直增長的娘纷,不能倒退嫁审。每個提議都需要超過半數((Senator Count)/2 +1)的議員同意才能生效。每個議員只會同意大于當前編號的提議赖晶,包括已生效的和未生效的律适。如果議員收到小于等于當前編號的提議,他會拒絕遏插,并告知對方:你的提議已經有人提過了捂贿。這里的當前編號是每個議員在自己記事本上面記錄的編號,他不斷更新這個編號胳嘲。整個議會不能保證所有議員記事本上的編號總是相同的〕現(xiàn)在議會有一個目標:保證所有的議員對于提議都能達成一致的看法。

好胎围,現(xiàn)在議會開始運作吁系,所有議員一開始記事本上面記錄的編號都是0。有一個議員發(fā)了一個提議:將電費設定為1元/度白魂。他首先看了一下記事本汽纤,嗯,當前提議編號是0福荸,那么我的這個提議的編號就是1蕴坪,于是他給所有議員發(fā)消息:1號提議,設定電費1元/度敬锐。其他議員收到消息以后查了一下記事本背传,哦,當前提議編號是0台夺,這個提議可接受径玖,于是他記錄下這個提議并回復:我接受你的1號提議,同時他在記事本上記錄:當前提議編號為1颤介。發(fā)起提議的議員收到了超過半數的回復梳星,立即給所有人發(fā)通知:1號提議生效赞赖!收到的議員會修改他的記事本,將1好提議由記錄改成正式的法令冤灾,當有人問他電費為多少時前域,他會查看法令并告訴對方:1元/度。

現(xiàn)在看沖突的解決:假設總共有三個議員S1-S3韵吨,S1和S2同時發(fā)起了一個提議:1號提議匿垄,設定電費。S1想設為1元/度, S2想設為2元/度归粉。結果S3先收到了S1的提議椿疗,于是他做了和前面同樣的操作。緊接著他又收到了S2的提議糠悼,結果他一查記事本变丧,咦,這個提議的編號小于等于我的當前編號1绢掰,于是他拒絕了這個提議:對不起,這個提議先前提過了童擎。于是S2的提議被拒絕滴劲,S1正式發(fā)布了提議: 1號提議生效。S2向S1或者S3打聽并更新了1號法令的內容顾复,然后他可以選擇繼續(xù)發(fā)起2號提議班挖。

好,我覺得Paxos的精華就這么多內容⌒驹遥現(xiàn)在讓我們來對號入座萧芙,看看在ZK Server里面Paxos是如何得以貫徹實施的。

小島(Island)——ZK Server Cluster

議員(Senator)——ZK Server

提議(Proposal)——ZNode Change(Create/Delete/SetData…)

提議編號(PID)——Zxid(ZooKeeper Transaction Id)

正式法令——所有ZNode及其數據

貌似關鍵的概念都能一一對應上假丧,但是等一下双揪,Paxos島上的議員應該是人人平等的吧,而ZK Server好像有一個Leader的概念包帚。沒錯渔期,其實Leader的概念也應該屬于Paxos范疇的。如果議員人人平等渴邦,在某種情況下會由于提議的沖突而產生一個“活鎖”(所謂活鎖我的理解是大家都沒有死疯趟,都在動,但是一直解決不了沖突問題)谋梭。Paxos的作者Lamport在他的文章”The Part-Time Parliament“中闡述了這個問題并給出了解決方案——在所有議員中設立一個總統(tǒng)信峻,只有總統(tǒng)有權發(fā)出提議,如果議員有自己的提議瓮床,必須發(fā)給總統(tǒng)并由總統(tǒng)來提出盹舞。好产镐,我們又多了一個角色:總統(tǒng)。

總統(tǒng)——ZK Server Leader

又一個問題產生了矾策,總統(tǒng)怎么選出來的磷账?oh, my god! It’s a long story. 在淘寶核心系統(tǒng)團隊的Blog上面有一篇文章是介紹如何選出總統(tǒng)的,有興趣的可以去看看:http://rdc.taobao.com/blog/cs/?p=162

現(xiàn)在我們假設總統(tǒng)已經選好了贾虽,下面看看ZK Server是怎么實施的逃糟。

情況一:

屁民甲(Client)到某個議員(ZK Server)那里詢問(Get)某條法令的情況(ZNode的數據),議員毫不猶豫的拿出他的記事本(local storage)蓬豁,查閱法令并告訴他結果绰咽,同時聲明:我的數據不一定是最新的。你想要最新的數據地粪?沒問題取募,等著,等我找總統(tǒng)Sync一下再告訴你蟆技。

情況二:

屁民乙(Client)到某個議員(ZK Server)那里要求政府歸還欠他的一萬元錢玩敏,議員讓他在辦公室等著,自己將問題反映給了總統(tǒng)质礼,總統(tǒng)詢問所有議員的意見旺聚,多數議員表示欠屁民的錢一定要還,于是總統(tǒng)發(fā)表聲明眶蕉,從國庫中拿出一萬元還債砰粹,國庫總資產由100萬變成99萬。屁民乙拿到錢回去了(Client函數返回)造挽。

情況三:

總統(tǒng)突然掛了碱璃,議員接二連三的發(fā)現(xiàn)聯(lián)系不上總統(tǒng),于是各自發(fā)表聲明饭入,推選新的總統(tǒng)嵌器,總統(tǒng)大選期間政府停業(yè),拒絕屁民的請求谐丢。

呵呵嘴秸,到此為止吧,當然還有很多其他的情況,但這些情況總是能在Paxos的算法中找到原型并加以解決。這也正是我們認為Paxos是Zookeeper的靈魂的原因漩氨。當然ZK Server還有很多屬于自己特性的東西:Session, Watcher,Version等等等等串述,需要我們花更多的時間去研究和學習。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末寞肖,一起剝皮案震驚了整個濱河市纲酗,隨后出現(xiàn)的幾起案子衰腌,更是在濱河造成了極大的恐慌,老刑警劉巖觅赊,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件右蕊,死亡現(xiàn)場離奇詭異,居然都是意外死亡吮螺,警方通過查閱死者的電腦和手機饶囚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸠补,“玉大人萝风,你說我怎么就攤上這事∽涎遥” “怎么了规惰?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長泉蝌。 經常有香客問我歇万,道長,這世上最難降的妖魔是什么勋陪? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任堕花,我火速辦了婚禮,結果婚禮上粥鞋,老公的妹妹穿的比我還像新娘。我一直安慰自己瞄崇,他們只是感情好呻粹,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著苏研,像睡著了一般等浊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上摹蘑,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天筹燕,我揣著相機與錄音,去河邊找鬼衅鹿。 笑死撒踪,一個胖子當著我的面吹牛,可吹牛的內容都是我干的大渤。 我是一名探鬼主播制妄,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼泵三!你這毒婦竟也來了耕捞?” 一聲冷哼從身側響起衔掸,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎俺抽,沒想到半個月后敞映,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡磷斧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年振愿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞳抓。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡埃疫,死狀恐怖,靈堂內的尸體忽然破棺而出孩哑,到底是詐尸還是另有隱情栓霜,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布横蜒,位于F島的核電站胳蛮,受9級特大地震影響,放射性物質發(fā)生泄漏丛晌。R本人自食惡果不足惜仅炊,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望澎蛛。 院中可真熱鬧抚垄,春花似錦、人聲如沸谋逻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毁兆。三九已至浙滤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間气堕,已是汗流浹背纺腊。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留茎芭,地道東北人揖膜。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像梅桩,于是被迫代替她去往敵國和親次氨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內容