Zookeeper之Paxos

Paxos廓八,它是一個(gè)基于消息傳遞的一致性算法鳞贷,Leslie Lamport在1990年提出,近幾年被廣泛應(yīng)用于分布式計(jì)算中伦籍,Google的Chubby,Apache的Zookeeper都是基于它的理論來實(shí)現(xiàn)的凤价,Paxos還被認(rèn)為是到目前為止唯一的分布式一致性算法鸽斟,其它的算法都是Paxos的改進(jìn)或簡(jiǎn)化。有個(gè)問題要提一下利诺,Paxos有一個(gè)前提:沒有拜占庭將軍問題富蓄。就是說Paxos只有在一個(gè)可信的計(jì)算環(huán)境中才能成立,這個(gè)環(huán)境是不會(huì)被入侵所破壞的慢逾。

關(guān)于Paxos的具體描述可以在Wiki中找到:http://zh.wikipedia.org/zh-cn/Paxos算法立倍。網(wǎng)上關(guān)于Paxos分析的文章也很多。這里希望用最簡(jiǎn)單的方式加以描述并建立起Paxos和ZK Server的對(duì)應(yīng)關(guān)系侣滩。

Paxos描述了這樣一個(gè)場(chǎng)景口注,有一個(gè)叫做Paxos的小島(Island)上面住了一批居民,島上面所有的事情由一些特殊的人決定君珠,他們叫做議員(Senator)寝志。議員的總數(shù)(Senator Count)是確定的,不能更改策添。島上每次環(huán)境事務(wù)的變更都需要通過一個(gè)提議(Proposal)材部,每個(gè)提議都有一個(gè)編號(hào)(PID),這個(gè)編號(hào)是一直增長(zhǎng)的唯竹,不能倒退乐导。每個(gè)提議都需要超過半數(shù)((Senator Count)/2 +1)的議員同意才能生效。每個(gè)議員只會(huì)同意大于當(dāng)前編號(hào)的提議浸颓,包括已生效的和未生效的物臂。如果議員收到小于等于當(dāng)前編號(hào)的提議,他會(huì)拒絕产上,并告知對(duì)方:你的提議已經(jīng)有人提過了棵磷。這里的當(dāng)前編號(hào)是每個(gè)議員在自己記事本上面記錄的編號(hào),他不斷更新這個(gè)編號(hào)晋涣。整個(gè)議會(huì)不能保證所有議員記事本上的編號(hào)總是相同的∫敲剑現(xiàn)在議會(huì)有一個(gè)目標(biāo):保證所有的議員對(duì)于提議都能達(dá)成一致的看法。

好姻僧,現(xiàn)在議會(huì)開始運(yùn)作规丽,所有議員一開始記事本上面記錄的編號(hào)都是0。有一個(gè)議員發(fā)了一個(gè)提議:將電費(fèi)設(shè)定為1元/度撇贺。他首先看了一下記事本赌莺,嗯,當(dāng)前提議編號(hào)是0松嘶,那么我的這個(gè)提議的編號(hào)就是1艘狭,于是他給所有議員發(fā)消息:1號(hào)提議,設(shè)定電費(fèi)1元/度翠订。其他議員收到消息以后查了一下記事本巢音,哦,當(dāng)前提議編號(hào)是0尽超,這個(gè)提議可接受官撼,于是他記錄下這個(gè)提議并回復(fù):我接受你的1號(hào)提議,同時(shí)他在記事本上記錄:當(dāng)前提議編號(hào)為1似谁。發(fā)起提議的議員收到了超過半數(shù)的回復(fù)傲绣,立即給所有人發(fā)通知:1號(hào)提議生效!收到的議員會(huì)修改他的記事本巩踏,將1好提議由記錄改成正式的法令秃诵,當(dāng)有人問他電費(fèi)為多少時(shí),他會(huì)查看法令并告訴對(duì)方:1元/度塞琼。

現(xiàn)在看沖突的解決:假設(shè)總共有三個(gè)議員S1-S3菠净,S1和S2同時(shí)發(fā)起了一個(gè)提議:1號(hào)提議,設(shè)定電費(fèi)彪杉。S1想設(shè)為1元/度, S2想設(shè)為2元/度毅往。結(jié)果S3先收到了S1的提議,于是他做了和前面同樣的操作在讶。緊接著他又收到了S2的提議煞抬,結(jié)果他一查記事本,咦构哺,這個(gè)提議的編號(hào)小于等于我的當(dāng)前編號(hào)1革答,于是他拒絕了這個(gè)提議:對(duì)不起,這個(gè)提議先前提過了曙强。于是S2的提議被拒絕残拐,S1正式發(fā)布了提議: 1號(hào)提議生效。S2向S1或者S3打聽并更新了1號(hào)法令的內(nèi)容碟嘴,然后他可以選擇繼續(xù)發(fā)起2號(hào)提議溪食。

image.png

好,我覺得Paxos的精華就這么多內(nèi)容∧壬龋現(xiàn)在讓我們來對(duì)號(hào)入座错沃,看看在ZK Server里面Paxos是如何得以貫徹實(shí)施的栅组。

小島(Island)——ZK Server Cluster

議員(Senator)——ZK Server

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

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

正式法令——所有ZNode及其數(shù)據(jù)

貌似關(guān)鍵的概念都能一一對(duì)應(yīng)上,但是等一下枢析,Paxos島上的議員應(yīng)該是人人平等的吧玉掸,而ZK Server好像有一個(gè)Leader的概念。沒錯(cuò)醒叁,其實(shí)Leader的概念也應(yīng)該屬于Paxos范疇的司浪。如果議員人人平等,在某種情況下會(huì)由于提議的沖突而產(chǎn)生一個(gè)“活鎖”(所謂活鎖我的理解是大家都沒有死把沼,都在動(dòng)啊易,但是一直解決不了沖突問題)。Paxos的作者Lamport在他的文章”The Part-Time Parliament“中闡述了這個(gè)問題并給出了解決方案——在所有議員中設(shè)立一個(gè)總統(tǒng)饮睬,只有總統(tǒng)有權(quán)發(fā)出提議租谈,如果議員有自己的提議,必須發(fā)給總統(tǒng)并由總統(tǒng)來提出续捂。好垦垂,我們又多了一個(gè)角色:總統(tǒng)。

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

又一個(gè)問題產(chǎn)生了牙瓢,總統(tǒng)怎么選出來的劫拗?

現(xiàn)在我們假設(shè)總統(tǒng)已經(jīng)選好了,下面看看ZK Server是怎么實(shí)施的矾克。

情況一:

屁民甲(Client)到某個(gè)議員(ZK Server)那里詢問(Get)某條法令的情況(ZNode的數(shù)據(jù))页慷,議員毫不猶豫的拿出他的記事本(local storage),查閱法令并告訴他結(jié)果胁附,同時(shí)聲明:我的數(shù)據(jù)不一定是最新的酒繁。你想要最新的數(shù)據(jù)?沒問題控妻,等著州袒,等我找總統(tǒng)Sync一下再告訴你。

情況二:

屁民乙(Client)到某個(gè)議員(ZK Server)那里要求政府歸還欠他的一萬(wàn)元錢弓候,議員讓他在辦公室等著郎哭,自己將問題反映給了總統(tǒng),總統(tǒng)詢問所有議員的意見菇存,多數(shù)議員表示欠屁民的錢一定要還夸研,于是總統(tǒng)發(fā)表聲明,從國(guó)庫(kù)中拿出一萬(wàn)元還債依鸥,國(guó)庫(kù)總資產(chǎn)由100萬(wàn)變成99萬(wàn)亥至。屁民乙拿到錢回去了(Client函數(shù)返回)。

情況三:

總統(tǒng)突然掛了,議員接二連三的發(fā)現(xiàn)聯(lián)系不上總統(tǒng)姐扮,于是各自發(fā)表聲明絮供,推選新的總統(tǒng),總統(tǒng)大選期間政府停業(yè)茶敏,拒絕屁民的請(qǐng)求杯缺。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市睡榆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌袍榆,老刑警劉巖胀屿,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異包雀,居然都是意外死亡宿崭,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門才写,熙熙樓的掌柜王于貴愁眉苦臉地迎上來葡兑,“玉大人,你說我怎么就攤上這事赞草《锏蹋” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵厨疙,是天一觀的道長(zhǎng)洲守。 經(jīng)常有香客問我,道長(zhǎng)沾凄,這世上最難降的妖魔是什么梗醇? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮撒蟀,結(jié)果婚禮上叙谨,老公的妹妹穿的比我還像新娘。我一直安慰自己保屯,他們只是感情好手负,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著配椭,像睡著了一般虫溜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上股缸,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天衡楞,我揣著相機(jī)與錄音,去河邊找鬼。 笑死瘾境,一個(gè)胖子當(dāng)著我的面吹牛歧杏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播迷守,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼犬绒,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了兑凿?” 一聲冷哼從身側(cè)響起凯力,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎礼华,沒想到半個(gè)月后咐鹤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡圣絮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年祈惶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扮匠。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡捧请,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出棒搜,到底是詐尸還是另有隱情疹蛉,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布力麸,位于F島的核電站氧吐,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏末盔。R本人自食惡果不足惜筑舅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望陨舱。 院中可真熱鬧翠拣,春花似錦、人聲如沸游盲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)益缎。三九已至谜慌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間莺奔,已是汗流浹背欣范。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人恼琼。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓妨蛹,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親晴竞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蛙卤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354