日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

漫画:什么是拜占庭将军问题

發(fā)布時(shí)間:2023/12/3 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 漫画:什么是拜占庭将军问题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)載自?漫畫(huà):什么是拜占庭將軍問(wèn)題

什么是拜占庭將軍問(wèn)題?

在很久很久以前,拜占庭是東羅馬帝國(guó)的首都。那個(gè)時(shí)候羅馬帝國(guó)國(guó)土遼闊,為了防御目的,因此每個(gè)軍隊(duì)都分隔很遠(yuǎn),將軍與將軍之間只能靠信使傳遞消息。

?

?

?

在打仗的時(shí)候,拜占庭軍隊(duì)內(nèi)所有將軍必需達(dá)成一致的共識(shí),才能更好地贏得勝利。但是,在軍隊(duì)內(nèi)有可能存有叛徒,擾亂將軍們的決定。

?

?

這時(shí)候,在已知有成員不可靠的情況下,其余忠誠(chéng)的將軍需要在不受叛徒或間諜的影響下達(dá)成一致的協(xié)議。

?

萊斯利·蘭伯特(?Leslie Lamport?)通過(guò)這個(gè)比喻,表達(dá)了計(jì)算機(jī)網(wǎng)絡(luò)中所存在的一致性問(wèn)題。這個(gè)問(wèn)題被稱為拜占庭將軍問(wèn)題。

?

?

?

?

?

?

?

?

什么是 Raft 算法?

?

Raft 算法是一種簡(jiǎn)單易懂的共識(shí)算法。它依靠?狀態(tài)機(jī)?和?主從同步?的方式,在各個(gè)節(jié)點(diǎn)之間實(shí)現(xiàn)數(shù)據(jù)的一致性。

?

在學(xué)習(xí)Raft算法的時(shí)候,大家需要了解Raft的兩個(gè)核心要點(diǎn):

?

1.選取主節(jié)點(diǎn)

?

2.同步數(shù)據(jù)

?

?

不難理解,使用主從同步的方式,可以讓集群各個(gè)節(jié)點(diǎn)的數(shù)據(jù)更新以主節(jié)點(diǎn)為準(zhǔn),從而保證了一致性。那么,如何選取主節(jié)點(diǎn)呢?

?

?

?

?

?

?

?

?

我們的出生,離不開(kāi)無(wú)數(shù)小蝌蚪之間的激烈競(jìng)爭(zhēng)。在競(jìng)爭(zhēng)的過(guò)程中,某個(gè)速度最快運(yùn)氣最好的小蝌蚪最終勝出,讓我們誕生到了這個(gè)世界。

?

同樣道理,Raft算法在選擇主節(jié)點(diǎn)的過(guò)程中,也是通過(guò)多個(gè)節(jié)點(diǎn)之間的投票競(jìng)爭(zhēng)。

?

說(shuō)到這里,不得不說(shuō)一下Raft算法的狀態(tài)機(jī)。Raft算法為節(jié)點(diǎn)定義了三種角色:

?

1.Leader(主節(jié)點(diǎn))

2.Follower(從節(jié)點(diǎn))

3.Candidate(參與投票競(jìng)爭(zhēng)的節(jié)點(diǎn))

?

讓我們來(lái)看一看選主的具體流程:

?

第一步,在最初,還沒(méi)有一個(gè)主節(jié)點(diǎn)的時(shí)候,所有節(jié)點(diǎn)的身份都是Follower。每一個(gè)節(jié)點(diǎn)都有自己的計(jì)時(shí)器,當(dāng)計(jì)時(shí)達(dá)到了超時(shí)時(shí)間(Election Timeout),該節(jié)點(diǎn)會(huì)轉(zhuǎn)變?yōu)镃andidate。

?

?

?

?

?

第二步,成為Candidate的節(jié)點(diǎn),會(huì)首先給自己投票,然后向集群中其他所有的節(jié)點(diǎn)發(fā)起請(qǐng)求,要求大家都給自己投票。

?

?

?

?

?

第三步,其他收到投票請(qǐng)求且還未投票的Follower節(jié)點(diǎn)會(huì)向發(fā)起者投票,發(fā)起者收到反饋通知后,票數(shù)增加。

?

?

?

?

第四步,當(dāng)?shù)闷睌?shù)超過(guò)了集群節(jié)點(diǎn)數(shù)量的一半,該節(jié)點(diǎn)晉升為L(zhǎng)eader節(jié)點(diǎn)。Leader節(jié)點(diǎn)會(huì)立刻向其他節(jié)點(diǎn)發(fā)出通知,告訴大家自己才是老大。收到通知的節(jié)點(diǎn)全部變?yōu)镕ollower,并且各自的計(jì)時(shí)器清零。

?

?

?

?

這里需要說(shuō)明一點(diǎn),每個(gè)節(jié)點(diǎn)的超時(shí)時(shí)間都是不一樣的。比如A節(jié)點(diǎn)的超時(shí)時(shí)間是3秒,B節(jié)點(diǎn)的超時(shí)時(shí)間是5秒,C節(jié)點(diǎn)的超時(shí)時(shí)間是4秒。這樣一來(lái),A節(jié)點(diǎn)將會(huì)最先發(fā)起投票請(qǐng)求,而不是所有節(jié)點(diǎn)同時(shí)發(fā)起。

?

為什么這樣設(shè)計(jì)呢?設(shè)想如果所有節(jié)點(diǎn)同時(shí)發(fā)起投票,必然會(huì)導(dǎo)致大家的票數(shù)差不多,形成僵局,誰(shuí)也當(dāng)不成老大。

?

那么,成為L(zhǎng)eader的節(jié)點(diǎn)是否就坐穩(wěn)了老大的位置呢?并不是。Leader節(jié)點(diǎn)需要每隔一段時(shí)間向集群其他節(jié)點(diǎn)發(fā)送心跳通知,表明你們的老大還活著。

?

?

?

?

一旦Leader節(jié)點(diǎn)掛掉,發(fā)不出通知,那么計(jì)時(shí)達(dá)到了超時(shí)時(shí)間的Follower節(jié)點(diǎn)會(huì)轉(zhuǎn)變?yōu)镃andidate節(jié)點(diǎn),發(fā)起選主投票,周而復(fù)始......

?

?

?

?

?

?

?

?

?

讓我們來(lái)看一看數(shù)據(jù)同步的流程:

?

第一步,由客戶端提交數(shù)據(jù)到Leader節(jié)點(diǎn)。

?

?

?

?

?

第二步,由Leader節(jié)點(diǎn)把數(shù)據(jù)復(fù)制到集群內(nèi)所有的Follower節(jié)點(diǎn)。如果一次復(fù)制失敗,會(huì)不斷進(jìn)行重試。

?

?

?

?

?

第三步,Follower節(jié)點(diǎn)們接收到復(fù)制的數(shù)據(jù),會(huì)反饋給Leader節(jié)點(diǎn)。

?

?

?

?

第四步,如果Leader節(jié)點(diǎn)接收到超過(guò)半數(shù)的Follower反饋,表明復(fù)制成功。于是提交自己的數(shù)據(jù),并通知客戶端數(shù)據(jù)提交成功。

?

?

?

?

第五步,由Leader節(jié)點(diǎn)通知集群內(nèi)所有的Follower節(jié)點(diǎn)提交數(shù)據(jù),從而完成數(shù)據(jù)同步流程。

?

?

?

?

?

共識(shí)算法的應(yīng)用場(chǎng)景?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

Paxos 算法:

早期的共識(shí)算法,由拜占庭將軍問(wèn)題的提出者?Leslie Lamport?所發(fā)明。谷歌的分布式鎖服務(wù)?Chubby 就是以 Paxos 算法為基礎(chǔ)。

?

?

ZAB 算法:

Zookeeper 所使用的一致性算法,在流程上和 Raft 算法比較接近。

?

?

PBFT 算法:

區(qū)塊鏈技術(shù)所使用的共識(shí)算法之一,適用于私有鏈的共識(shí)。


?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的漫画:什么是拜占庭将军问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。