并發(fā)系統(tǒng)的設(shè)計(jì)

提升網(wǎng)站的訪問(wèn)速度,持續(xù)的高并發(fā),這是技術(shù)上的必然吞获,也是一種科技的衍進(jìn)方式钝荡。以下是系統(tǒng)設(shè)計(jì)的進(jìn)化之路。

單點(diǎn)集中式

特點(diǎn):App、DB、FileServer都部署在一臺(tái)機(jī)器上。并且訪問(wèn)請(qǐng)求量較少

image

應(yīng)用服務(wù)和數(shù)據(jù)服務(wù)拆分

特點(diǎn):App位他、DB、FileServer分別部署在獨(dú)立服務(wù)器上产场。并且訪問(wèn)請(qǐng)求量較少

image

使用緩存改善性能

特點(diǎn):數(shù)據(jù)庫(kù)中頻繁訪問(wèn)的數(shù)據(jù)存儲(chǔ)在緩存服務(wù)器中鹅髓,減少數(shù)據(jù)庫(kù)的訪問(wèn)次數(shù),降低數(shù)據(jù)庫(kù)的壓力

image

應(yīng)用服務(wù)器集群

特點(diǎn):多臺(tái)應(yīng)用服務(wù)器通過(guò)負(fù)載均衡同時(shí)對(duì)外提供服務(wù)京景,解決單臺(tái)服務(wù)器處理能力上限的問(wèn)題

image

數(shù)據(jù)庫(kù)讀寫分離

特點(diǎn):數(shù)據(jù)庫(kù)進(jìn)行讀寫分離(主從)設(shè)計(jì)迈勋,解決數(shù)據(jù)庫(kù)的處理壓力

image

反向代理和CDN加速

特點(diǎn):采用反向代理和CDN加快系統(tǒng)的訪問(wèn)速度

image

分布式文件系統(tǒng)和分布式數(shù)據(jù)庫(kù)

特點(diǎn):數(shù)據(jù)庫(kù)采用分布式數(shù)據(jù)庫(kù),文件系統(tǒng)采用分布式文件系統(tǒng)

隨著業(yè)務(wù)的發(fā)展醋粟,最終數(shù)據(jù)庫(kù)讀寫分離也將無(wú)法滿足需求靡菇,需要采用分布式數(shù)據(jù)庫(kù)和分布式文件系統(tǒng)來(lái)支撐

分布式數(shù)據(jù)庫(kù)是數(shù)據(jù)庫(kù)拆分后的最后方法重归,只有在單表規(guī)模非常龐大的時(shí)候才使用,更常用的數(shù)據(jù)庫(kù)拆分手段是業(yè)務(wù)分庫(kù)厦凤,將不同業(yè)務(wù)的數(shù)據(jù)庫(kù)部署在不同的機(jī)器上

image

二鼻吮、 分布式技術(shù)詳解

1. 并發(fā)性

2. 分布性

大任務(wù)拆分成多個(gè)任務(wù)部署到多臺(tái)機(jī)器上對(duì)外提供服務(wù)

3. 缺乏全局時(shí)鐘

時(shí)間要統(tǒng)一

4. 對(duì)等性

一個(gè)服務(wù)部署在多臺(tái)機(jī)器上是一樣的,無(wú)任何差別

5. 故障肯定會(huì)發(fā)生

硬盤壞了 CPU燒了....

三较鼓、分布式事務(wù)

1. ACID

原子性(Atomicity):一個(gè)事務(wù)(transaction)中的所有操作椎木,要么全部完成,要么全部不完成博烂,不會(huì)結(jié)束在中間某個(gè)環(huán)節(jié)香椎。事務(wù)在執(zhí)行過(guò)程中發(fā)生錯(cuò)誤,會(huì)被恢復(fù)(Rollback)到事務(wù)開始前的狀態(tài)禽篱,就像這個(gè)事務(wù)從來(lái)沒有執(zhí)行過(guò)一樣畜伐。
一致性(Consistency):在事務(wù)開始之前和事務(wù)結(jié)束以后,數(shù)據(jù)庫(kù)的完整性沒有被破壞躺率。這表示寫入的資料必須完全符合所有的預(yù)設(shè)規(guī)則玛界,這包含資料的精確度、串聯(lián)性以及后續(xù)數(shù)據(jù)庫(kù)可以自發(fā)性地完成預(yù)定的工作悼吱。

比如A有500元慎框,B有300元,A向B轉(zhuǎn)賬100后添,無(wú)論怎么樣笨枯,A和B的總和總是800元
隔離性(Isolation):數(shù)據(jù)庫(kù)允許多個(gè)并發(fā)事務(wù)同時(shí)對(duì)其數(shù)據(jù)進(jìn)行讀寫和修改的能力,隔離性可以防止多個(gè)事務(wù)并發(fā)執(zhí)行時(shí)由于交叉執(zhí)行而導(dǎo)致數(shù)據(jù)的不一致遇西。事務(wù)隔離分為不同級(jí)別馅精,包括讀未提交(Read uncommitted)、讀提交(read committed)努溃、可重復(fù)讀(repeatable read)和串行化(Serializable)硫嘶。
持久性(Durability):事務(wù)處理結(jié)束后阻问,對(duì)數(shù)據(jù)的修改就是永久的梧税,即便系統(tǒng)故障也不會(huì)丟失。

2. 2P/3P

2P= Two Phase commit 二段提交(RDBMS(關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng))經(jīng)常就是這種機(jī)制称近,保證強(qiáng)一致性)

3P= Three Phase commit 三段提交

說(shuō)明:2P/3P是為了保證事務(wù)的ACID(原子性第队、一致性、隔離性刨秆、持久性)

2.1 2P的兩個(gè)階段

階段1:提交事務(wù)請(qǐng)求(投票階段)詢問(wèn)是否可以提交事務(wù)

image

階段2:執(zhí)行事務(wù)提交(commit凳谦、rollback) 真正的提交事務(wù)

image.gif

2.2 3P的三個(gè)階段

階段1:是否提交-詢問(wèn)是否可以做事務(wù)提交
階段2:預(yù)先提交-預(yù)先提交事務(wù)
階段3:執(zhí)行事務(wù)提交(commit、rollback)真正的提交事務(wù)

image

說(shuō)明:3P把2P的階段一拆分成了前面兩個(gè)階段

3. CAP理論

一致性(Consistency):分布式數(shù)據(jù)庫(kù)的數(shù)據(jù)保持一致

可用性(Availability):任何一個(gè)節(jié)點(diǎn)掛了衡未,其他節(jié)點(diǎn)可以繼續(xù)對(duì)外提供服務(wù)

分區(qū)容錯(cuò)性(網(wǎng)絡(luò)分區(qū))Partition tolerance:一個(gè)數(shù)據(jù)庫(kù)所在的機(jī)器壞了尸执,如硬盤壞了家凯,數(shù)據(jù)丟失了,可以新增一臺(tái)機(jī)器如失,然后從其他正常的機(jī)器把備份的數(shù)據(jù)同步過(guò)來(lái)

CAP理論的特點(diǎn):CAP只能滿足其中2條

image

CA(放棄P):將所有的數(shù)據(jù)放在一個(gè)節(jié)點(diǎn)绊诲。滿足一致性、可用性褪贵。
AP(放棄C):放棄強(qiáng)一致性,用最終一致性來(lái)保證脆丁。
CP(放棄A):一旦系統(tǒng)遇見故障世舰,受到影響的服務(wù)器需要等待一段時(shí)間,在恢復(fù)期間無(wú)法對(duì)外提供服務(wù)槽卫。

舉例說(shuō)明CAP理論:

有3臺(tái)機(jī)器分別有3個(gè)數(shù)據(jù)庫(kù)分別有兩張表,數(shù)據(jù)都是一樣的
Machine1-db1-tbl_person跟压、tbl_order
Machine2-db2-tbl_person、tbl_order
Machine3-db3-tbl_person晒夹、tbl_order
1)當(dāng)向machine1的db1的表tbl_person裆馒、tbl_order插入數(shù)數(shù)據(jù)時(shí),同時(shí)要把插入的數(shù)據(jù)同步到machine2丐怯、machine3喷好,這就是一致性
2)當(dāng)其中的一臺(tái)機(jī)器宕機(jī)了,可以繼續(xù)對(duì)外提供服務(wù)读跷,把宕機(jī)的機(jī)器重新啟動(dòng)起來(lái)可以繼續(xù)服務(wù)梗搅,這就是可用性
3)當(dāng)machine1的機(jī)器壞了,數(shù)據(jù)全部丟失了效览,不會(huì)有任何問(wèn)題无切,因?yàn)閙achine2和machine3上還有數(shù)據(jù),重新加一臺(tái)機(jī)器machine4丐枉,把machine2和machine3其中一臺(tái)機(jī)器的備份數(shù)據(jù)同步過(guò)來(lái)就可以了哆键,這就是分區(qū)容錯(cuò)性

4. BASE理論

基本可用(bascially available)、軟狀態(tài)(soft state)瘦锹、最終一致性(Eventually consistent)
基本可用:在分布式系統(tǒng)出現(xiàn)故障籍嘹,允許損失部分可用性(服務(wù)降級(jí)、頁(yè)面降級(jí))
軟狀態(tài):允許分布式系統(tǒng)出現(xiàn)中間狀態(tài)弯院。而且中間狀態(tài)不影響系統(tǒng)的可用性辱士。
    1、這里的中間狀態(tài)是指不同的data replication之間的數(shù)據(jù)更新可以出現(xiàn)延時(shí)的最終一致性
    2听绳、如CAP理論里面的示例颂碘,當(dāng)向machine1的db1的表tbl_person、tbl_order插入數(shù)數(shù)據(jù)時(shí)椅挣,同時(shí)要把插入的數(shù)據(jù)同步到machine2头岔、machine3塔拳,當(dāng)machine3的網(wǎng)絡(luò)有問(wèn)題時(shí),同步失敗峡竣,但是過(guò)一會(huì)網(wǎng)絡(luò)恢復(fù)了就同步成功了蝙斜,這個(gè)同步失敗的狀態(tài)就稱為軟狀態(tài),因?yàn)樽罱K還是同步成功了澎胡。
最終一致性:data replications經(jīng)過(guò)一段時(shí)間達(dá)到一致性孕荠。

5. Paxos算法

5.1 介紹Paxos算法之前我們先來(lái)看一個(gè)小故事

拜占庭將軍問(wèn)題

拜占庭帝國(guó)就是5~15世紀(jì)的東羅馬帝國(guó),拜占庭即現(xiàn)在土耳其的伊斯坦布爾攻谁。我們可以想象稚伍,拜占庭軍隊(duì)有許多分支,駐扎在敵人城外戚宦,每一分支由各自的將軍指揮个曙。假設(shè)有11位將軍,將軍們只能靠通訊員進(jìn)行通訊受楼。在觀察敵人以后垦搬,忠誠(chéng)的將軍們必須制訂一個(gè)統(tǒng)一的行動(dòng)計(jì)劃——進(jìn)攻或者撤退。然而艳汽,這些將軍里有叛徒猴贰,他們不希望忠誠(chéng)的將軍們能達(dá)成一致,因而影響統(tǒng)一行動(dòng)計(jì)劃的制訂與傳播河狐。
  問(wèn)題是:將軍們必須有一個(gè)協(xié)議米绕,使所有忠誠(chéng)的將軍們能夠達(dá)成一致,而且少數(shù)幾個(gè)叛徒不能使忠誠(chéng)的將軍們作出錯(cuò)誤的計(jì)劃——使有些將軍進(jìn)攻而另一些將軍撤退馋艺。
  假設(shè)有9位忠誠(chéng)的將軍栅干,5位判斷進(jìn)攻,4位判斷撤退捐祠,還有2個(gè)間諜惡意判斷撤退碱鳞,雖然結(jié)果是錯(cuò)誤的撤退,但這種情況完全是允許的踱蛀。因?yàn)檫@11位將軍依然保持著狀態(tài)一致性窿给。

image

總結(jié):
1)11位將軍進(jìn)攻城池
2)同時(shí)進(jìn)攻(議案、決議)星岗、同時(shí)撤退(議案填大、決議)
3)不管撤退還是進(jìn)攻戒洼,必須半數(shù)的將軍統(tǒng)一意見才可以執(zhí)行
4)將軍里面有叛徒俏橘,會(huì)干擾決議生成

5.2 下面就來(lái)介紹一下Paxos算法

Google Chubby的作者M(jìn)ike Burrows說(shuō)過(guò)這個(gè)世界上只有一種一致性算法,那就是Paxos圈浇,其它的算法都是殘次品寥掐。

Paxos:多數(shù)派決議(最終解決一致性問(wèn)題)

Paxos算法有三種角色:Proposer靴寂,Acceptor,Learner

Proposer:提交者(議案提交者)

      提交議案(判斷是否過(guò)半)召耘,提交批準(zhǔn)議案(判斷是否過(guò)半)

Acceptor:接收者(議案接收者)

      接受議案或者駁回議案百炬,給proposer回應(yīng)(promise)

Learner:學(xué)習(xí)者(打醬油的)

     如果議案產(chǎn)生,學(xué)習(xí)議案污它。

設(shè)定1:如果Acceptor沒有接受議案剖踊,那么他必須接受第一個(gè)議案

設(shè)定2:每個(gè)議案必須有一個(gè)編號(hào),并且編號(hào)只能增長(zhǎng)衫贬,不能重復(fù)德澈。越往后越大。

設(shè)定3:接受編號(hào)大的議案固惯,如果小于之前接受議案編號(hào)梆造,那么不接受

設(shè)定4:議案有2種(提交的議案,批準(zhǔn)的議案)

image

1)Prepare階段(議案提交)

a)Proposer希望議案V葬毫。首先發(fā)出Prepare請(qǐng)求至大多數(shù)Acceptor镇辉。Prepare請(qǐng)求內(nèi)容為序列號(hào)K

b)Acceptor收到Prepare請(qǐng)求為編號(hào)K后,檢查自己手里是否有處理過(guò)Prepare請(qǐng)求贴捡。

c)如果Acceptor沒有接受過(guò)任何Prepare請(qǐng)求忽肛,那么用OK來(lái)回復(fù)Proposer,代表Acceptor必須接受收到的第一個(gè)議案(設(shè)定1

d)否則烂斋,如果Acceptor之前接受過(guò)任何Prepare請(qǐng)求(如:MaxN)麻裁,那么比較議案編號(hào),如果K<MaxN源祈,則用reject或者error回復(fù)Proposer

e)如果K>=MaxN煎源,那么檢查之前是否有批準(zhǔn)的議案,如果沒有則用OK來(lái)回復(fù)Proposer香缺,并記錄K

f)如果K>=MaxN手销,那么檢查之前是否有批準(zhǔn)的議案,如果有則回復(fù)批準(zhǔn)的議案編號(hào)和議案內(nèi)容(如:<AcceptN, AcceptV>图张, AcceptN為批準(zhǔn)的議案編號(hào)锋拖,AcceptV為批準(zhǔn)的議案內(nèi)容)

2)Accept階段(批準(zhǔn)階段)

a)Proposer收到過(guò)半Acceptor發(fā)來(lái)的回復(fù),回復(fù)都是OK祸轮,且沒有附帶任何批準(zhǔn)過(guò)的議案編號(hào)和議案內(nèi)容兽埃。那么Proposer繼續(xù)提交批準(zhǔn)請(qǐng)求,不過(guò)此時(shí)會(huì)連議案編號(hào)K和議案內(nèi)容V一起提交(<K, V>這種數(shù)據(jù)形式)

b)Proposer收到過(guò)半Acceptor發(fā)來(lái)的回復(fù)适袜,回復(fù)都是OK柄错,且附帶批準(zhǔn)過(guò)的議案編號(hào)和議案內(nèi)容(<pok,議案編號(hào),議案內(nèi)容>)售貌。那么Proposer找到所有回復(fù)中超過(guò)半數(shù)的那個(gè)(假設(shè)為<pok给猾,AcceptNx,AcceptVx>)作為提交批準(zhǔn)請(qǐng)求(請(qǐng)求為<K颂跨,AcceptVx>)發(fā)送給Acceptor敢伸。

c)Proposer沒有收到過(guò)半Acceptor發(fā)來(lái)的回復(fù),則修改議案編號(hào)K為K+1恒削,并將編號(hào)重新發(fā)送給Acceptors(重復(fù)Prepare階段的過(guò)程)

d)Acceptor收到Proposer發(fā)來(lái)的Accept請(qǐng)求池颈,如果編號(hào)K<MaxN則不回應(yīng)或者reject。

e)Acceptor收到Proposer發(fā)來(lái)的Accept請(qǐng)求钓丰,如果編號(hào)K>=MaxN則批準(zhǔn)該議案饶辙,并設(shè)置手里批準(zhǔn)的議案為<K,接受議案的編號(hào)斑粱,接受議案的內(nèi)容>弃揽,回復(fù)Proposer。

f)經(jīng)過(guò)一段時(shí)間Proposer對(duì)比手里收到的Accept回復(fù)则北,如果超過(guò)半數(shù)矿微,則結(jié)束流程(代表議案被批準(zhǔn)),同時(shí)通知Leaner可以學(xué)習(xí)議案尚揣。

g) 經(jīng)過(guò)一段時(shí)間Proposer對(duì)比手里收到的Accept回復(fù)涌矢,如果未超過(guò)半數(shù),則修改議案編號(hào)重新進(jìn)入Prepare階段快骗。

5.3 Paxos示例

示例1:先后提議的場(chǎng)景

image

角色:

proposer:參謀1娜庇,參謀2

acceptor:將軍1,將軍2方篮,將軍3(決策者)

1)參謀1發(fā)起提議名秀,派通信兵帶信給3個(gè)將軍,內(nèi)容為(編號(hào)1)藕溅;
2)3個(gè)將軍收到參謀1的提議匕得,由于之前還沒有保存任何編號(hào),因此把(編號(hào)1)保存下來(lái)巾表,避免遺忘汁掠;同時(shí)讓通信兵帶信回去,內(nèi)容為(ok)集币;
3)參謀1收到至少2個(gè)將軍的回復(fù)考阱,再次派通信兵帶信給3個(gè)將軍,內(nèi)容為(編號(hào)1鞠苟,進(jìn)攻時(shí)間1)乞榨;
4)3個(gè)將軍收到參謀1的時(shí)間秽之,把(編號(hào)1,進(jìn)攻時(shí)間1)保存下來(lái)姜凄,避免遺忘;同時(shí)讓通信兵帶信回去趾访,內(nèi)容為(Accepted)态秧;
5)參謀1收到至少2個(gè)將軍的(Accepted)內(nèi)容,確認(rèn)進(jìn)攻時(shí)間已經(jīng)被大家接收扼鞋;
6)參謀2發(fā)起提議申鱼,派通信兵帶信給3個(gè)將軍,內(nèi)容為(編號(hào)2)云头;
7)3個(gè)將軍收到參謀2的提議捐友,由于(編號(hào)2)比(編號(hào)1)大,因此把(編號(hào)2)保存下來(lái)溃槐,避免遺忘匣砖;又由于之前已經(jīng)接受參謀1的提議,因此讓通信兵帶信回去昏滴,內(nèi)容為(編 號(hào)1猴鲫,進(jìn)攻時(shí)間1);
8)參謀2收到至少2個(gè)將軍的回復(fù)谣殊,由于回復(fù)中帶來(lái)了已接受的參謀1的提議內(nèi)容拂共,參謀2因此不再提出新的進(jìn)攻時(shí)間,接受參謀1提出的時(shí)間姻几;

示例2:交叉場(chǎng)景

image

角色:

proposer:參謀1宜狐,參謀2

acceptor:將軍1,將軍2蛇捌,將軍3(決策者)

1)參謀1發(fā)起提議抚恒,派通信兵帶信給3個(gè)將軍,內(nèi)容為(編號(hào)1)络拌;

2)3個(gè)將軍的情況如下
  a)將軍1和將軍2收到參謀1的提議柑爸,將軍1和將軍2把(編號(hào)1)記錄下來(lái),如果有其他參謀提出更小的編號(hào)盒音,將被拒絕表鳍;同時(shí)讓通信兵帶信回去,內(nèi)容為(ok)祥诽;
  b)負(fù)責(zé)通知將軍3的通信兵被抓譬圣,因此將軍3沒收到參謀1的提議;

3)參謀2在同一時(shí)間也發(fā)起了提議雄坪,派通信兵帶信給3個(gè)將軍厘熟,內(nèi)容為(編號(hào)2);
4)3個(gè)將軍的情況如下
  a)將軍2和將軍3收到參謀2的提議,將軍2和將軍3把(編號(hào)2)記錄下來(lái)绳姨,如果有其他參謀提出更小的編號(hào)登澜,將被拒絕;同時(shí)讓通信兵帶信回去飘庄,內(nèi)容為(ok)脑蠕;
  b)負(fù)責(zé)通知將軍1的通信兵被抓,因此將軍1沒收到參謀2的提議跪削;
5)參謀1收到至少2個(gè)將軍的回復(fù)谴仙,再次派通信兵帶信給有答復(fù)的2個(gè)將軍,內(nèi)容為(編號(hào)1碾盐,進(jìn)攻時(shí)間1)晃跺;
6)2個(gè)將軍的情況如下
  a)將軍1收到了(編號(hào)1,進(jìn)攻時(shí)間1)毫玖,和自己保存的編號(hào)相同掀虎,因此把(編號(hào)1,進(jìn)攻時(shí)間1)保存下來(lái)付枫;同時(shí)讓通信兵帶信回去涩盾,內(nèi)容為(Accepted);
  b)將軍2收到了(編號(hào)1励背,進(jìn)攻時(shí)間1)春霍,由于(編號(hào)1)小于已經(jīng)保存的(編號(hào)2),因此讓通信兵帶信回去叶眉,內(nèi)容為(Rejected址儒,編號(hào)2);
7)參謀2收到至少2個(gè)將軍的回復(fù)衅疙,再次派通信兵帶信給有答復(fù)的2個(gè)將軍莲趣,內(nèi)容為(編號(hào)2,進(jìn)攻時(shí)間2)饱溢;
8)將軍2和將軍3收到了(編號(hào)2喧伞,進(jìn)攻時(shí)間2),和自己保存的編號(hào)相同绩郎,因此把(編號(hào)2潘鲫,進(jìn)攻時(shí)間2)保存下來(lái),同時(shí)讓通信兵帶信回去肋杖,內(nèi)容為(Accepted)溉仑;
9)參謀2收到至少2個(gè)將軍的(Accepted)內(nèi)容,確認(rèn)進(jìn)攻時(shí)間已經(jīng)被多數(shù)派接受状植;

10)參謀1只收到了1個(gè)將軍的(Accepted)內(nèi)容浊竟,同時(shí)收到一個(gè)(Rejected怨喘,編號(hào)2);參謀1重新發(fā)起提議振定,派通信兵帶信給3個(gè)將軍必怜,內(nèi)容為(編號(hào)3);

11)3個(gè)將軍的情況如下
  a)將軍1收到參謀1的提議后频,由于(編號(hào)3)大于之前保存的(編號(hào)1)梳庆,因此把(編號(hào)3)保存下來(lái);由于將軍1已經(jīng)接受參謀1前一次的提議徘郭,因此讓通信兵帶信回去靠益,內(nèi)容為(編號(hào)1丧肴,進(jìn)攻時(shí)間1)残揉;
  b)將軍2收到參謀1的提議,由于(編號(hào)3)大于之前保存的(編號(hào)2)芋浮,因此把(編號(hào)3)保存下來(lái)抱环;由于將軍2已經(jīng)接受參謀2的提議,因此讓通信兵帶信回去纸巷,內(nèi)容為(編號(hào)2镇草,進(jìn)攻時(shí)間2);
  c)負(fù)責(zé)通知將軍3的通信兵被抓瘤旨,因此將軍3沒收到參謀1的提議梯啤;

12)參謀1收到了至少2個(gè)將軍的回復(fù),比較兩個(gè)回復(fù)的編號(hào)大小存哲,選擇大編號(hào)對(duì)應(yīng)的進(jìn)攻時(shí)間作為最新的提議因宇;參謀1再次派通信兵帶信給有答復(fù)的2個(gè)將軍,內(nèi)容為(編號(hào)3祟偷,進(jìn)攻時(shí)間2)察滑;
13)將軍1和將軍2收到了(編號(hào)3,進(jìn)攻時(shí)間2)修肠,和自己保存的編號(hào)相同贺辰,因此保存(編號(hào)3,進(jìn)攻時(shí)間2)嵌施,同時(shí)讓通信兵帶信回去饲化,內(nèi)容為(Accepted);
14)參謀1收到了至少2個(gè)將軍的(accepted)內(nèi)容吗伤,確認(rèn)進(jìn)攻時(shí)間已經(jīng)被多數(shù)派接受滓侍。

四. Zookeeper ZAB協(xié)議

Zookeeper Automic Broadcast(ZAB),即Zookeeper原子性廣播牲芋,是Paxos經(jīng)典實(shí)現(xiàn)

術(shù)語(yǔ):

quorum:集群過(guò)半數(shù)的集合

1. ZAB(zookeeper)中節(jié)點(diǎn)分四種狀態(tài)

looking:選舉Leader的狀態(tài)(崩潰恢復(fù)狀態(tài)下)

following:跟隨者(follower)的狀態(tài)撩笆,服從Leader命令

leading:當(dāng)前節(jié)點(diǎn)是Leader捺球,負(fù)責(zé)協(xié)調(diào)工作。

observing:observer(觀察者)夕冲,不參與選舉氮兵,只讀節(jié)點(diǎn)。

2. ZAB中的兩個(gè)模式(ZK是如何進(jìn)行選舉的)

崩潰恢復(fù)歹鱼、消息廣播

image

1)崩潰恢復(fù)

leader掛了泣栈,需要選舉新的leader

image

a.每個(gè)server都有一張選票<myid,zxid>弥姻,如(3,9)南片,選票投自己。
b.每個(gè)server投完自己后庭敦,再分別投給其他還可用的服務(wù)器疼进。如把Server3的(3,9)分別投給Server4和Server5,一次類推
c.比較投票秧廉,比較邏輯:優(yōu)先比較Zxid伞广,Zxid相同時(shí)才比較myid。比較Zxid時(shí)疼电,大的做leader嚼锄;比較myid時(shí),小的做leader
d.改變服務(wù)器狀態(tài)(崩潰恢復(fù)->數(shù)據(jù)同步蔽豺,或者崩潰恢復(fù)->消息廣播)

相關(guān)概念補(bǔ)充說(shuō)明:

epoch周期值

acceptedEpoch(比喻:年號(hào)):follower已經(jīng)接受leader更改年號(hào)的(newepoch)提議区丑。

currentEpoch(比喻:當(dāng)前的年號(hào)):當(dāng)前的年號(hào)

lastZxid:history中最近接收到的提議zxid(最大的值)

history:當(dāng)前節(jié)點(diǎn)接受到事務(wù)提議的log

Zxid數(shù)據(jù)結(jié)構(gòu)說(shuō)明:

cZxid = 0x10000001b

64位的數(shù)據(jù)結(jié)構(gòu)

高32位:10000

Leader的周期編號(hào)+myid的組合

低32位:001b

事務(wù)的自增序列(單調(diào)遞增的序列)只要客戶端有請(qǐng)求,就+1

當(dāng)產(chǎn)生新Leader的時(shí)候修陡,就從這個(gè)Leader服務(wù)器上取出本地log中最大事務(wù)Zxid沧侥,從里面讀出epoch+1,作為一個(gè)新epoch濒析,并將低32位置0(保證id絕對(duì)自增)

2)消息廣播(類似2P提交)

image

a.Leader接受請(qǐng)求后正什,將這個(gè)請(qǐng)求賦予全局的唯一64位自增Id(zxid)。
b.將zxid作為議案發(fā)給所有follower号杏。
c.所有的follower接受到議案后婴氮,想將議案寫入硬盤后,馬上回復(fù)Leader一個(gè)ACK(OK)盾致。
d.當(dāng)Leader接受到合法數(shù)量(過(guò)半)Acks主经,Leader給所有follower發(fā)送commit命令。
e.follower執(zhí)行commit命令庭惜。
注意:到了這個(gè)階段罩驻,ZK集群才正式對(duì)外提供服務(wù),并且Leader可以進(jìn)行消息廣播护赊,如果有新節(jié)點(diǎn)加入惠遏,還需要進(jìn)行同步砾跃。

3)數(shù)據(jù)同步

a.取出Leader最大lastZxid(從本地log日志來(lái))
b.找到對(duì)應(yīng)zxid的數(shù)據(jù),進(jìn)行同步(數(shù)據(jù)同步過(guò)程保證所有follower一致)
c.只有滿足quorum同步完成节吮,準(zhǔn)Leader才能成為真正的Leader

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末抽高,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子透绩,更是在濱河造成了極大的恐慌翘骂,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帚豪,死亡現(xiàn)場(chǎng)離奇詭異碳竟,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)狸臣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門莹桅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人固棚,你說(shuō)我怎么就攤上這事统翩∠裳粒” “怎么了此洲?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)委粉。 經(jīng)常有香客問(wèn)我呜师,道長(zhǎng),這世上最難降的妖魔是什么贾节? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任汁汗,我火速辦了婚禮,結(jié)果婚禮上栗涂,老公的妹妹穿的比我還像新娘知牌。我一直安慰自己,他們只是感情好斤程,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布角寸。 她就那樣靜靜地躺著,像睡著了一般忿墅。 火紅的嫁衣襯著肌膚如雪扁藕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天疚脐,我揣著相機(jī)與錄音亿柑,去河邊找鬼棍弄。 笑死痕支,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼闸度,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤致开,失蹤者是張志新(化名)和其女友劉穎糜芳,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哲银,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年屈雄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了棚亩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蓖议。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡虏杰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出勒虾,到底是詐尸還是另有隱情纺阔,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布修然,位于F島的核電站笛钝,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏愕宋。R本人自食惡果不足惜玻靡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望中贝。 院中可真熱鬧囤捻,春花似錦、人聲如沸邻寿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至誊涯,卻和暖如春挡毅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背暴构。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工跪呈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人取逾。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓庆械,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親菌赖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子缭乘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容