酋長(zhǎng)的故事(分布式一致性)

關(guān)鍵協(xié)議:Paxos旱爆,2PC舀射,3PC,NWR怀伦,Gossip脆烟,Raft,Lease房待,ZAB


看到我的毀滅之錘到貨突發(fā)靈感

有這么幾個(gè)酋長(zhǎng)

奧酋長(zhǎng)邢羔,薩酋長(zhǎng),格酋長(zhǎng)桑孩,加酋長(zhǎng)拜鹤,凱酋長(zhǎng),沃酋長(zhǎng)流椒,希酋長(zhǎng)

部落不能群龍無首敏簿,奧酋長(zhǎng)犧牲之后需要選出一個(gè)新的大酋長(zhǎng)。但是幸存的獸人分散在各地宣虾,其中格酋長(zhǎng)帶領(lǐng)了一幫獸人在打游擊惯裕,之后薩酋長(zhǎng)也帶領(lǐng)了一幫起義的奴隸獸人;之后他兩匯合了绣硝,大家都知道最后是薩酋長(zhǎng)擔(dān)任了大酋長(zhǎng)的位置蜻势,因?yàn)樗纹?termId)大,

服務(wù)分區(qū),腦裂問題:在Raft規(guī)則中,發(fā)生網(wǎng)絡(luò)分區(qū)后域那,每個(gè)區(qū)都會(huì)選舉(每次選舉任期號(hào)都會(huì)加1)出一個(gè)主節(jié)點(diǎn)咙边,等分區(qū)結(jié)束后會(huì)比較每個(gè)主節(jié)點(diǎn)的任期,以最大的為準(zhǔn)同步他的數(shù)據(jù)次员。(如果任期比不出來败许,還會(huì)繼續(xù)投票)

當(dāng)年薩大酋長(zhǎng)退位,加酋長(zhǎng)很快就繼任了淑蔚,為什么繼任的不是凱酋長(zhǎng)或者沃酋長(zhǎng)市殷,因?yàn)長(zhǎng)ease(租約)機(jī)制

Lease機(jī)制:薩大酋長(zhǎng)退位成為了元老(中心節(jié)點(diǎn)),Lease機(jī)制中主節(jié)點(diǎn)需要拿到他(中心節(jié)點(diǎn))的授權(quán)刹衫,薩酋長(zhǎng)授權(quán)加酋長(zhǎng)出任大酋長(zhǎng)之位醋寝,期限是搞垮部落為止(一般租約是1-10s)。

之后凱酋長(zhǎng)被加大酋長(zhǎng)擊殺下線带迟,但是薩元老為什么沒收回授權(quán)呢音羞?因?yàn)樗麛嚅_和部落的連接了(拯救世界還是更重要),雖然沒有掛掉仓犬,但是無法和其他節(jié)點(diǎn)交互嗅绰。

中心節(jié)點(diǎn)集群:要解決這種事也簡(jiǎn)單,就是弄個(gè)元老院,多來幾個(gè)元老窘面,他們總不可能一起斷開吧翠语。

加大酋長(zhǎng)最終被群毆強(qiáng)制下線(40個(gè)訪問量就頂不住了);

服務(wù)限流:是分布式中很重要的一點(diǎn)财边,常見算法有窗口算法(一段時(shí)間內(nèi)限制多少個(gè)訪問數(shù)肌括;加大酋長(zhǎng)1分鐘只能砍10個(gè)腳男);漏桶算法(服務(wù)端勻速處理酣难,好處是保證服務(wù)正常運(yùn)行谍夭;腳男在加大酋長(zhǎng)門口排隊(duì),砍完一個(gè)進(jìn)一個(gè))鲸鹦;令牌桶算法(以恒定的速度向桶里放令牌慧库,進(jìn)來請(qǐng)求先找令牌,有令牌繼續(xù)馋嗜,沒令牌拒絕齐板,好處是可以應(yīng)對(duì)突發(fā)流量;直接變?cè)杼昧耍?/i>

沃酋長(zhǎng)繼任大酋長(zhǎng)之位葛菇,沃酋長(zhǎng)雖然沒有什么出彩的表現(xiàn)甘磨,但是貴在穩(wěn)定,薩酋長(zhǎng)時(shí)期加入部落眯停,一起打天下济舆,從War3時(shí)期一直就在運(yùn)行;

master(有的也叫l(wèi)eader)主節(jié)點(diǎn)選舉:

1.Raft規(guī)則選舉:主節(jié)點(diǎn)會(huì)向從節(jié)點(diǎn)不停的發(fā)心跳包莺债,每個(gè)從節(jié)點(diǎn)有一個(gè)隨機(jī)的反應(yīng)時(shí)間(150ms~300ms)滋觉,當(dāng)超過反應(yīng)時(shí)間還沒有收到主節(jié)點(diǎn)的心跳包,那它就成為候選節(jié)點(diǎn)齐邦,要開始競(jìng)選了(一般最先開始競(jìng)選的最有優(yōu)勢(shì))椎侠;首先發(fā)送投票請(qǐng)求給其他節(jié)點(diǎn),如果超過一半的節(jié)點(diǎn)回復(fù)了那它就成為了主節(jié)點(diǎn)措拇;如果兩個(gè)候選節(jié)點(diǎn)同時(shí)開始競(jìng)選我纪,并且票數(shù)相同,那么他們會(huì)重新隨機(jī)反應(yīng)時(shí)間丐吓,然后再來一遍浅悉。

2.Zookeeper的master選舉:這就是一個(gè)搶鎖的過程,集群每天都會(huì)向/master_election/2021-12-12(當(dāng)天日期)下創(chuàng)建/binding 臨時(shí)節(jié)點(diǎn)(名字可以自己設(shè)置)券犁,這個(gè)是唯一的术健,所以只有一個(gè)機(jī)器可以創(chuàng)建成功,創(chuàng)建成功的那個(gè)就是master粘衬;其他創(chuàng)建失敗的就會(huì)在/binding下創(chuàng)建子節(jié)點(diǎn)來 Watcher監(jiān)聽主節(jié)點(diǎn)的狀態(tài)(zookeeper的機(jī)制)苛坚,master掛掉比被,其他的機(jī)器就開始重復(fù)之前的操作。方式簡(jiǎn)單粗暴泼舱,一般用來做分布式id這種活。

3.Zookeeper的leader(ZAB協(xié)議)選舉:每個(gè)zookeeper都有兩個(gè)id枷莉,一個(gè)myid(自己寫在配置文件中娇昙,必定不同),一個(gè)ZXID(類似任期號(hào)笤妙;遞增的事務(wù)編號(hào)冒掌,越大的說明數(shù)據(jù)越新),ZXID較大的優(yōu)先蹲盘,如果一樣myid較大的優(yōu)先股毫。

ZAB協(xié)議中除了主節(jié)點(diǎn),從節(jié)點(diǎn)召衔,還有觀察者節(jié)點(diǎn)铃诬,它不參與選舉,其他功能和從節(jié)點(diǎn)一樣苍凛。

最后沃大酋長(zhǎng)在破碎海岸被刀刺穿趣席,為什么一起的希酋長(zhǎng),小凱酋長(zhǎng)都沒事醇蝴;因?yàn)橹挥兄鞴?jié)點(diǎn)可以輸入(這也是部落酋長(zhǎng)的機(jī)制宣肚,凱酋長(zhǎng)是個(gè)意外),從節(jié)點(diǎn)只能輸出悠栓。

主從節(jié)點(diǎn)分工:

主節(jié)點(diǎn)可以做讀寫霉涨,寫操作時(shí)發(fā)起事務(wù)控制;

從節(jié)點(diǎn)只讀惭适,收到寫操作會(huì)轉(zhuǎn)發(fā)給主節(jié)點(diǎn)笙瑟,還有投票;

觀察者節(jié)點(diǎn)只讀腥沽,收到寫操作會(huì)轉(zhuǎn)發(fā)給主節(jié)點(diǎn)逮走,不投票;

這是因?yàn)榉植际绞聞?wù)的原因今阳,主節(jié)點(diǎn)事務(wù)請(qǐng)求的唯?調(diào)度和處理者师溅,保證集群事務(wù)處理的順序性。

沃大酋長(zhǎng)回城沒多久就死了盾舌,由希酋長(zhǎng)繼位墓臭。再后面就沒玩了。


總結(jié)

Paxos妖谴,2PC窿锉,3PC酌摇,NWR,Gossip這5個(gè)還沒提到嗡载。

Paxos協(xié)議

自Paxos問世以來就持續(xù)壟斷了分布式一致性算法窑多,Paxos這個(gè)名詞幾乎等同于分布式一致性。多數(shù)派原則洼滚。

Paxos的三個(gè)角色

Proposer:提議者埂息,提出方案的角色

Acceptor:接受者,接收方案的角色

Learner:學(xué)習(xí)者遥巴,充當(dāng)該協(xié)議的復(fù)制因素(不參與投票)千康;有點(diǎn)像ZAB的觀察者。

4個(gè)步驟

1.Proposer提出一個(gè)提案,編號(hào)為N, 此N大于這個(gè)Proposer之前提出所有提出的編號(hào), 請(qǐng)求Accpetor的多數(shù)人接受這個(gè)提案

2.如果編號(hào)N大于此Accpetor之前接收的任提案編號(hào)則接收, 否則拒絕

3.如果達(dá)到多數(shù)派, Proposer會(huì)發(fā)出accept請(qǐng)求, 此請(qǐng)求包含提案編號(hào)和對(duì)應(yīng)的內(nèi)容

4.如果此Accpetor在此期間沒有接受到任何大于N的提案,則接收此提案內(nèi)容, 否則忽略

2PC(2段提交)铲掐,3PC(3段提交)

2段提交拾弃,先詢問接收到所有反饋;再提交摆霉,接收事務(wù)提交結(jié)果豪椿。

3段提交,先詢問收到所有反饋斯入;再準(zhǔn)備提交砂碉,收到所有反饋;再提交刻两,接收事務(wù)提交結(jié)果(進(jìn)入第三階段如果超時(shí)增蹭,所有參與者也會(huì)進(jìn)行提交)。

NWR協(xié)議

比如亞馬遜云儲(chǔ)存系統(tǒng)

N:有多少備份

W:代表一次成功的更新操作要求至少有w份數(shù)據(jù)寫入成功

R:代表一次成功的讀數(shù)據(jù)操作要求至少有R份數(shù)據(jù)成功讀取

N<W+R是強(qiáng)一致性

Gossip協(xié)議(流行病協(xié)議)

去中心化傳播

反熵傳播:無限制磅摹∽搪酰可以保證最終完全一致,消息數(shù)量非常龐大户誓。

謠言傳播:一段時(shí)間會(huì)俞除饼灿,停止傳播。一定概率會(huì)不一致帝美。

傳播之后更新版本號(hào)碍彭。

適合于 AP 場(chǎng)景的數(shù)據(jù)一致性處理,常見應(yīng)用有:P2P 網(wǎng)絡(luò)通信悼潭、Redis Cluster庇忌、Consul。

問題思考

1.主從的讀寫分離在高并發(fā)下怎么確保能讀到最新數(shù)據(jù)舰褪?

如果從庫沒有更新到數(shù)據(jù)就被讀了,造成數(shù)據(jù)錯(cuò)誤,大量數(shù)據(jù)寫入時(shí)間太久皆疹,造成延遲。

我先自己猜一下:本著計(jì)算機(jī)系統(tǒng)的運(yùn)行原理占拍,先更新一塊內(nèi)存略就,然后將引用轉(zhuǎn)到更新的這塊內(nèi)存捎迫。

是不是數(shù)據(jù)同步到時(shí)候也可以,先更新一部分服務(wù)器表牢,然后開放這部分服務(wù)器訪問窄绒,再逐步完成所有同步。

再查查網(wǎng)上的解決方案:

半同步復(fù)制:介于異步復(fù)制和全同步復(fù)制之間初茶,主庫在執(zhí)行完客戶端提交的事務(wù)后不是立刻返回給客戶端颗祝,而是等待從庫接收到并寫到relay log中才返回給客戶端(等待多少ACK?應(yīng)該可以設(shè)置)恼布。半同步復(fù)制提高了數(shù)據(jù)的安全性;

并行復(fù)制:更新同步可以一起執(zhí)行搁宾。


上面兩個(gè)只是解決了安全性和同步效率折汞,但是哪些從庫是最新數(shù)據(jù)?還是不知道

NWR協(xié)議好像可以解決這個(gè)問題盖腿。讀幾個(gè)服務(wù)器的數(shù)據(jù)然后取最新版本爽待。

或許可以在接收到relay log時(shí)給從節(jié)點(diǎn)加上一個(gè)更新中標(biāo)識(shí),禁止讀翩腐,commit成功后再去掉鸟款。

2.分布式事務(wù)到底怎么做?

假如按功能分表后茂卦,有兩個(gè)表分別在不同的服務(wù)器何什,但是他們又要做事務(wù)處理尤揣,應(yīng)該怎么辦供嚎?

正常在一個(gè)數(shù)據(jù)庫中是所有修改都預(yù)提交,然后一起commit诱贿。

2PC還是3PC都是有出錯(cuò)幾率的蛛砰,出錯(cuò)了怎么辦罐栈?

可以使用緩存數(shù)據(jù)庫:先將數(shù)據(jù)保存在緩存數(shù)據(jù)庫,再分別向要插入的數(shù)據(jù)庫執(zhí)行插入操作泥畅,直到返回成功或超過重試次數(shù)荠诬。

2PC 和 3PC有點(diǎn)類似君子協(xié)議;問你有沒有偷東西位仁?你說沒偷柑贞!他就當(dāng)你沒偷,也不會(huì)搜身檢查障癌。

還有哪些實(shí)現(xiàn)方案凌外?

2PC 和 3PC 都不能保證數(shù)據(jù)100%一致,因此一般都需要有定時(shí)掃描補(bǔ)償機(jī)制涛浙。它們最大的區(qū)別是在第二段超時(shí)會(huì)回滾康辑,第3段超時(shí)會(huì)繼續(xù)提交摄欲。

先設(shè)想一個(gè)方案,MySql回滾是依靠undo log疮薇,而事務(wù)所有id的胸墙;是否可以讓所有MySql共享事務(wù)id,這樣就可以根據(jù)統(tǒng)一的事物id進(jìn)行回滾按咒。

本地消息表:先保證本地插入成功迟隅,但是狀態(tài)不寫,等下一個(gè)操作成功了才改成成功励七。未成功的會(huì)有重試次數(shù)智袭,超過次數(shù)報(bào)人工處理。

消息事務(wù):思路類似掠抬,通過中間件消息隊(duì)列吼野;本地提交時(shí)把消息提交到消息隊(duì)列;然后消費(fèi)方去隊(duì)列拿两波,消費(fèi)方提交后再發(fā)送消息去隊(duì)列瞳步;本地會(huì)定期去消息隊(duì)列查詢消費(fèi)方發(fā)送的消息,來確認(rèn)是否回滾腰奋。(感覺復(fù)雜度提高了单起,但是還沒上一個(gè)穩(wěn),但是對(duì)于很多服務(wù)器來說劣坊,會(huì)方便一點(diǎn))

3.分布式鎖有哪些嘀倒?

看名字的意思就A服務(wù)器可以鎖B服務(wù)器;

實(shí)現(xiàn)思路就是在一個(gè)大家都能訪問到的地方讼稚,創(chuàng)建一個(gè)鎖括儒,誰獲取了,就可以執(zhí)行工作锐想;

比如在MySql中建個(gè)表帮寻;字段為:鎖id,狀態(tài)赠摇,使用者id固逗,使用時(shí)間。大家執(zhí)行這個(gè)工作的時(shí)候都要去取鎖A藕帜,誰先修改表成功烫罩,誰就取到了鎖。

還有用唯一鍵做插入的方式洽故,有點(diǎn)像下面的ZooKeeper分布式鎖贝攒。

還可以用ZooKeeper:上面提到的Zookeeper的master選舉就是一種分布式鎖的實(shí)現(xiàn)。規(guī)定同一個(gè)目錄下只能有一個(gè)唯一文件名时甚。

Redis://todo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末隘弊,一起剝皮案震驚了整個(gè)濱河市哈踱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌梨熙,老刑警劉巖开镣,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異咽扇,居然都是意外死亡邪财,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門质欲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來树埠,“玉大人,你說我怎么就攤上這事嘶伟∶旨椋” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵奋早,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我赠橙,道長(zhǎng)耽装,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任期揪,我火速辦了婚禮掉奄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘凤薛。我一直安慰自己姓建,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布缤苫。 她就那樣靜靜地躺著速兔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪活玲。 梳的紋絲不亂的頭發(fā)上涣狗,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音舒憾,去河邊找鬼镀钓。 笑死,一個(gè)胖子當(dāng)著我的面吹牛镀迂,可吹牛的內(nèi)容都是我干的丁溅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼探遵,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼窟赏!你這毒婦竟也來了妓柜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤饰序,失蹤者是張志新(化名)和其女友劉穎领虹,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體求豫,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡塌衰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蝠嘉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片最疆。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蚤告,靈堂內(nèi)的尸體忽然破棺而出努酸,到底是詐尸還是另有隱情,我是刑警寧澤杜恰,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布获诈,位于F島的核電站,受9級(jí)特大地震影響心褐,放射性物質(zhì)發(fā)生泄漏舔涎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一逗爹、第九天 我趴在偏房一處隱蔽的房頂上張望亡嫌。 院中可真熱鬧,春花似錦掘而、人聲如沸挟冠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽知染。三九已至,卻和暖如春女蜈,著一層夾襖步出監(jiān)牢的瞬間持舆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國打工伪窖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留逸寓,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓覆山,卻偏偏與公主長(zhǎng)得像竹伸,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

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