HOME 首頁(yè)
SERVICE 服務(wù)產(chǎn)品
XINMEITI 新媒體代運(yùn)營(yíng)
CASE 服務(wù)案例
NEWS 熱點(diǎn)資訊
ABOUT 關(guān)于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    共識(shí)算法分為哪兩類(共識(shí)算法分為哪兩類)

    發(fā)布時(shí)間:2023-04-14 06:45:55     稿源: 創(chuàng)意嶺    閱讀: 84        

    大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于共識(shí)算法分為哪兩類的問(wèn)題,以下是小編對(duì)此問(wèn)題的歸納整理,讓我們一起來(lái)看看吧。

    開(kāi)始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等

    只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁(yè)版、PC客戶端

    官網(wǎng):https://ai.de1919.com。

    創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請(qǐng)撥打電話175-8598-2043,或添加微信:1454722008

    本文目錄:

    共識(shí)算法分為哪兩類(共識(shí)算法分為哪兩類)

    一、區(qū)塊鏈 --- 共識(shí)算法

    PoW算法是一種防止分布式服務(wù)資源被濫用、拒絕服務(wù)攻擊的機(jī)制。它要求節(jié)點(diǎn)進(jìn)行適量消耗時(shí)間和資源的復(fù)雜運(yùn)算,并且其運(yùn)算結(jié)果能被其他節(jié)點(diǎn)快速驗(yàn)算,以耗用時(shí)間、能源做擔(dān)保,以確保服務(wù)與資源被真正的需求所使用。

    PoW算法中最基本的技術(shù)原理是使用哈希算法。假設(shè)求哈希值Hash(r),若原始數(shù)據(jù)為r(raw),則運(yùn)算結(jié)果為R(Result)。

    R = Hash(r)

    哈希函數(shù)Hash()的特性是,對(duì)于任意輸入值r,得出結(jié)果R,并且無(wú)法從R反推回r。當(dāng)輸入的原始數(shù)據(jù)r變動(dòng)1比特時(shí),其結(jié)果R值完全改變。在比特幣的PoW算法中,引入算法難度d和隨機(jī)值n,得到以下公式:

    Rd = Hash(r+n)

    該公式要求在填入隨機(jī)值n的情況下,計(jì)算結(jié)果Rd的前d字節(jié)必須為0。由于哈希函數(shù)結(jié)果的未知性,每個(gè)礦工都要做大量運(yùn)算之后,才能得出正確結(jié)果,而算出結(jié)果廣播給全網(wǎng)之后,其他節(jié)點(diǎn)只需要進(jìn)行一次哈希運(yùn)算即可校驗(yàn)。PoW算法就是采用這種方式讓計(jì)算消耗資源,而校驗(yàn)僅需一次。

     

    PoS算法要求節(jié)點(diǎn)驗(yàn)證者必須質(zhì)押一定的資金才有挖礦打包資格,并且區(qū)域鏈系統(tǒng)在選定打包節(jié)點(diǎn)時(shí)使用隨機(jī)的方式,當(dāng)節(jié)點(diǎn)質(zhì)押的資金越多時(shí),其被選定打包區(qū)塊的概率越大。

    POS模式下,每個(gè)幣每天產(chǎn)生1幣齡,比如你持有100個(gè)幣,總共持有了30天,那么,此時(shí)你的幣齡就為3000。這個(gè)時(shí)候,如果你驗(yàn)證了一個(gè)POS區(qū)塊,你的幣齡就會(huì)被清空為0,同時(shí)從區(qū)塊中獲得相對(duì)應(yīng)的數(shù)字貨幣利息。

    節(jié)點(diǎn)通過(guò)PoS算法出塊的過(guò)程如下:普通的節(jié)點(diǎn)要成為出塊節(jié)點(diǎn),首先要進(jìn)行資產(chǎn)的質(zhì)押,當(dāng)輪到自己出塊時(shí),打包區(qū)塊,然后向全網(wǎng)廣播,其他驗(yàn)證節(jié)點(diǎn)將會(huì)校驗(yàn)區(qū)塊的合法性。

     

    DPoS算法和PoS算法相似,也采用股份和權(quán)益質(zhì)押。

    但不同的是,DPoS算法采用委托質(zhì)押的方式,類似于用全民選舉代表的方式選出N個(gè)超級(jí)節(jié)點(diǎn)記賬出塊。

    選民把自己的選票投給某個(gè)節(jié)點(diǎn),如果某個(gè)節(jié)點(diǎn)當(dāng)選記賬節(jié)點(diǎn),那么該記賬節(jié)點(diǎn)往往在獲取出塊獎(jiǎng)勵(lì)后,可以采用任意方式來(lái)回報(bào)自己的選民。

    這N個(gè)記賬節(jié)點(diǎn)將輪流出塊,并且節(jié)點(diǎn)之間相互監(jiān)督,如果其作惡,那么會(huì)被扣除質(zhì)押金。

    通過(guò)信任少量的誠(chéng)信節(jié)點(diǎn),可以去除區(qū)塊簽名過(guò)程中不必要的步驟,提高了交易的速度。

     

    拜占庭問(wèn)題:

    拜占庭是古代東羅馬帝國(guó)的首都,為了防御在每塊封地都駐扎一支由單個(gè)將軍帶領(lǐng)的軍隊(duì),將軍之間只能靠信差傳遞消息。在戰(zhàn)爭(zhēng)時(shí),所有將軍必須達(dá)成共識(shí),決定是否共同開(kāi)戰(zhàn)。

    但是,在軍隊(duì)內(nèi)可能有叛徒,這些人將影響將軍們達(dá)成共識(shí)。拜占庭將軍問(wèn)題是指在已知有將軍是叛徒的情況下,剩余的將軍如何達(dá)成一致決策的問(wèn)題。

    BFT:

    BFT即拜占庭容錯(cuò),拜占庭容錯(cuò)技術(shù)是一類分布式計(jì)算領(lǐng)域的容錯(cuò)技術(shù)。拜占庭假設(shè)是對(duì)現(xiàn)實(shí)世界的模型化,由于硬件錯(cuò)誤、網(wǎng)絡(luò)擁塞或中斷以及遭到惡意攻擊等原因,計(jì)算機(jī)和網(wǎng)絡(luò)可能出現(xiàn)不可預(yù)料的行為。拜占庭容錯(cuò)技術(shù)被設(shè)計(jì)用來(lái)處理這些異常行為,并滿足所要解決的問(wèn)題的規(guī)范要求。

    拜占庭容錯(cuò)系統(tǒng)

    發(fā)生故障的節(jié)點(diǎn)被稱為 拜占庭節(jié)點(diǎn) ,而正常的節(jié)點(diǎn)即為 非拜占庭節(jié)點(diǎn)

    假設(shè)分布式系統(tǒng)擁有n臺(tái)節(jié)點(diǎn),并假設(shè)整個(gè)系統(tǒng)拜占庭節(jié)點(diǎn)不超過(guò)m臺(tái)(n ≥ 3m + 1),拜占庭容錯(cuò)系統(tǒng)需要滿足如下兩個(gè)條件:

    另外,拜占庭容錯(cuò)系統(tǒng)需要達(dá)成如下兩個(gè)指標(biāo):

    PBFT即實(shí)用拜占庭容錯(cuò)算法,解決了原始拜占庭容錯(cuò)算法效率不高的問(wèn)題,算法的時(shí)間復(fù)雜度是O(n^2),使得在實(shí)際系統(tǒng)應(yīng)用中可以解決拜占庭容錯(cuò)問(wèn)題

     

    PBFT是一種狀態(tài)機(jī)副本復(fù)制算法,所有的副本在一個(gè)視圖(view)輪換的過(guò)程中操作,主節(jié)點(diǎn)通過(guò)視圖編號(hào)以及節(jié)點(diǎn)數(shù)集合來(lái)確定,即:主節(jié)點(diǎn) p = v mod |R|。v:視圖編號(hào),|R|節(jié)點(diǎn)個(gè)數(shù),p:主節(jié)點(diǎn)編號(hào)。

    PBFT算法的共識(shí)過(guò)程如下:客戶端(Client)發(fā)起消息請(qǐng)求(request),并廣播轉(zhuǎn)發(fā)至每一個(gè)副本節(jié)點(diǎn)(Replica),由其中一個(gè)主節(jié)點(diǎn)(Leader)發(fā)起提案消息pre-prepare,并廣播。其他節(jié)點(diǎn)獲取原始消息,在校驗(yàn)完成后發(fā)送prepare消息。每個(gè)節(jié)點(diǎn)收到2f+1個(gè)prepare消息,即認(rèn)為已經(jīng)準(zhǔn)備完畢,并發(fā)送commit消息。當(dāng)節(jié)點(diǎn)收到2f+1個(gè)commit消息,客戶端收到f+1個(gè)相同的reply消息時(shí),說(shuō)明客戶端發(fā)起的請(qǐng)求已經(jīng)達(dá)成全網(wǎng)共識(shí)。

    具體流程如下

    客戶端c向主節(jié)點(diǎn)p發(fā)送<REQUEST, o, t, c>請(qǐng)求。o: 請(qǐng)求的具體操作,t: 請(qǐng)求時(shí)客戶端追加的時(shí)間戳,c:客戶端標(biāo)識(shí)。REQUEST: 包含消息內(nèi)容m,以及消息摘要d(m)。客戶端對(duì)請(qǐng)求進(jìn)行簽名。

    主節(jié)點(diǎn)收到客戶端的請(qǐng)求,需要進(jìn)行以下交驗(yàn):

    a. 客戶端請(qǐng)求消息簽名是否正確。

    非法請(qǐng)求丟棄。正確請(qǐng)求,分配一個(gè)編號(hào)n,編號(hào)n主要用于對(duì)客戶端的請(qǐng)求進(jìn)行排序。然后廣播一條<<PRE-PREPARE, v, n, d>, m>消息給其他副本節(jié)點(diǎn)。v:視圖編號(hào),d客戶端消息摘要,m消息內(nèi)容。<PRE-PREPARE, v, n, d>進(jìn)行主節(jié)點(diǎn)簽名。n是要在某一個(gè)范圍區(qū)間內(nèi)的[h, H],具體原因參見(jiàn) 垃圾回收 章節(jié)。

    副本節(jié)點(diǎn)i收到主節(jié)點(diǎn)的PRE-PREPARE消息,需要進(jìn)行以下交驗(yàn):

    a. 主節(jié)點(diǎn)PRE-PREPARE消息簽名是否正確。

    b. 當(dāng)前副本節(jié)點(diǎn)是否已經(jīng)收到了一條在同一v下并且編號(hào)也是n,但是簽名不同的PRE-PREPARE信息。

    c. d與m的摘要是否一致。

    d. n是否在區(qū)間[h, H]內(nèi)。

    非法請(qǐng)求丟棄。正確請(qǐng)求,副本節(jié)點(diǎn)i向其他節(jié)點(diǎn)包括主節(jié)點(diǎn)發(fā)送一條<PREPARE, v, n, d, i>消息, v, n, d, m與上述PRE-PREPARE消息內(nèi)容相同,i是當(dāng)前副本節(jié)點(diǎn)編號(hào)。<PREPARE, v, n, d, i>進(jìn)行副本節(jié)點(diǎn)i的簽名。記錄PRE-PREPARE和PREPARE消息到log中,用于View Change過(guò)程中恢復(fù)未完成的請(qǐng)求操作。

    主節(jié)點(diǎn)和副本節(jié)點(diǎn)收到PREPARE消息,需要進(jìn)行以下交驗(yàn):

    a. 副本節(jié)點(diǎn)PREPARE消息簽名是否正確。

    b. 當(dāng)前副本節(jié)點(diǎn)是否已經(jīng)收到了同一視圖v下的n。

    c. n是否在區(qū)間[h, H]內(nèi)。

    d. d是否和當(dāng)前已收到PRE-PPREPARE中的d相同

    非法請(qǐng)求丟棄。如果副本節(jié)點(diǎn)i收到了2f+1個(gè)驗(yàn)證通過(guò)的PREPARE消息,則向其他節(jié)點(diǎn)包括主節(jié)點(diǎn)發(fā)送一條<COMMIT, v, n, d, i>消息,v, n, d, i與上述PREPARE消息內(nèi)容相同。<COMMIT, v, n, d, i>進(jìn)行副本節(jié)點(diǎn)i的簽名。記錄COMMIT消息到日志中,用于View Change過(guò)程中恢復(fù)未完成的請(qǐng)求操作。記錄其他副本節(jié)點(diǎn)發(fā)送的PREPARE消息到log中。

    主節(jié)點(diǎn)和副本節(jié)點(diǎn)收到COMMIT消息,需要進(jìn)行以下交驗(yàn):

    a. 副本節(jié)點(diǎn)COMMIT消息簽名是否正確。

    b. 當(dāng)前副本節(jié)點(diǎn)是否已經(jīng)收到了同一視圖v下的n。

    c. d與m的摘要是否一致。

    d. n是否在區(qū)間[h, H]內(nèi)。

    非法請(qǐng)求丟棄。如果副本節(jié)點(diǎn)i收到了2f+1個(gè)驗(yàn)證通過(guò)的COMMIT消息,說(shuō)明當(dāng)前網(wǎng)絡(luò)中的大部分節(jié)點(diǎn)已經(jīng)達(dá)成共識(shí),運(yùn)行客戶端的請(qǐng)求操作o,并返回<REPLY, v, t, c, i, r>給客戶端,r:是請(qǐng)求操作結(jié)果,客戶端如果收到f+1個(gè)相同的REPLY消息,說(shuō)明客戶端發(fā)起的請(qǐng)求已經(jīng)達(dá)成全網(wǎng)共識(shí),否則客戶端需要判斷是否重新發(fā)送請(qǐng)求給主節(jié)點(diǎn)。記錄其他副本節(jié)點(diǎn)發(fā)送的COMMIT消息到log中。

     

    如果主節(jié)點(diǎn)作惡,它可能會(huì)給不同的請(qǐng)求編上相同的序號(hào),或者不去分配序號(hào),或者讓相鄰的序號(hào)不連續(xù)。備份節(jié)點(diǎn)應(yīng)當(dāng)有職責(zé)來(lái)主動(dòng)檢查這些序號(hào)的合法性。

    如果主節(jié)點(diǎn)掉線或者作惡不廣播客戶端的請(qǐng)求,客戶端設(shè)置超時(shí)機(jī)制,超時(shí)的話,向所有副本節(jié)點(diǎn)廣播請(qǐng)求消息。副本節(jié)點(diǎn)檢測(cè)出主節(jié)點(diǎn)作惡或者下線,發(fā)起View Change協(xié)議。

    View Change協(xié)議

    副本節(jié)點(diǎn)向其他節(jié)點(diǎn)廣播<VIEW-CHANGE, v+1, n, C , P , i>消息。n是最新的stable checkpoint的編號(hào), C 2f+1驗(yàn)證過(guò)的CheckPoint消息集合, P 是當(dāng)前副本節(jié)點(diǎn)未完成的請(qǐng)求的PRE-PREPARE和PREPARE消息集合。

    當(dāng)主節(jié)點(diǎn)p = v + 1 mod |R|收到 2f 個(gè)有效的VIEW-CHANGE消息后,向其他節(jié)點(diǎn)廣播<NEW-VIEW, v+1, V , O >消息。 V 是有效的VIEW-CHANGE消息集合。 O 是主節(jié)點(diǎn)重新發(fā)起的未經(jīng)完成的PRE-PREPARE消息集合。PRE-PREPARE消息集合的選取規(guī)則:

    副本節(jié)點(diǎn)收到主節(jié)點(diǎn)的NEW-VIEW消息,驗(yàn)證有效性,有效的話,進(jìn)入v+1狀態(tài),并且開(kāi)始 O 中的PRE-PREPARE消息處理流程。

     

    在上述算法流程中,為了確保在View Change的過(guò)程中,能夠恢復(fù)先前的請(qǐng)求,每一個(gè)副本節(jié)點(diǎn)都記錄一些消息到本地的log中,當(dāng)執(zhí)行請(qǐng)求后副本節(jié)點(diǎn)需要把之前該請(qǐng)求的記錄消息清除掉。

    最簡(jiǎn)單的做法是在Reply消息后,再執(zhí)行一次當(dāng)前狀態(tài)的共識(shí)同步,這樣做的成本比較高,因此可以在執(zhí)行完多條請(qǐng)求K(例如:100條)后執(zhí)行一次狀態(tài)同步。這個(gè)狀態(tài)同步消息就是CheckPoint消息。

    副本節(jié)點(diǎn)i發(fā)送<CheckPoint, n, d, i>給其他節(jié)點(diǎn),n是當(dāng)前節(jié)點(diǎn)所保留的最后一個(gè)視圖請(qǐng)求編號(hào),d是對(duì)當(dāng)前狀態(tài)的一個(gè)摘要,該CheckPoint消息記錄到log中。如果副本節(jié)點(diǎn)i收到了2f+1個(gè)驗(yàn)證過(guò)的CheckPoint消息,則清除先前日志中的消息,并以n作為當(dāng)前一個(gè)stable checkpoint。

    這是理想情況,實(shí)際上當(dāng)副本節(jié)點(diǎn)i向其他節(jié)點(diǎn)發(fā)出CheckPoint消息后,其他節(jié)點(diǎn)還沒(méi)有完成K條請(qǐng)求,所以不會(huì)立即對(duì)i的請(qǐng)求作出響應(yīng),它還會(huì)按照自己的節(jié)奏,向前行進(jìn),但此時(shí)發(fā)出的CheckPoint并未形成stable。

    為了防止i的處理請(qǐng)求過(guò)快,設(shè)置一個(gè)上文提到的 高低水位區(qū)間[h, H] 來(lái)解決這個(gè)問(wèn)題。低水位h等于上一個(gè)stable checkpoint的編號(hào),高水位H = h + L,其中L是我們指定的數(shù)值,等于checkpoint周期處理請(qǐng)求數(shù)K的整數(shù)倍,可以設(shè)置為L(zhǎng) = 2K。當(dāng)副本節(jié)點(diǎn)i處理請(qǐng)求超過(guò)高水位H時(shí),此時(shí)就會(huì)停止腳步,等待stable checkpoint發(fā)生變化,再繼續(xù)前進(jìn)。

     

    在區(qū)塊鏈場(chǎng)景中,一般適合于對(duì)強(qiáng)一致性有要求的私有鏈和聯(lián)盟鏈場(chǎng)景。例如,在IBM主導(dǎo)的區(qū)塊鏈超級(jí)賬本項(xiàng)目中,PBFT是一個(gè)可選的共識(shí)協(xié)議。在Hyperledger的Fabric項(xiàng)目中,共識(shí)模塊被設(shè)計(jì)成可插拔的模塊,支持像PBFT、Raft等共識(shí)算法。

     

     

    Raft基于領(lǐng)導(dǎo)者驅(qū)動(dòng)的共識(shí)模型,其中將選舉一位杰出的領(lǐng)導(dǎo)者(Leader),而該Leader將完全負(fù)責(zé)管理集群,Leader負(fù)責(zé)管理Raft集群的所有節(jié)點(diǎn)之間的復(fù)制日志。

     

    下圖中,將在啟動(dòng)過(guò)程中選擇集群的Leader(S1),并為來(lái)自客戶端的所有命令/請(qǐng)求提供服務(wù)。 Raft集群中的所有節(jié)點(diǎn)都維護(hù)一個(gè)分布式日志(復(fù)制日志)以存儲(chǔ)和提交由客戶端發(fā)出的命令(日志條目)。 Leader接受來(lái)自客戶端的日志條目,并在Raft集群中的所有關(guān)注者(S2,S3,S4,S5)之間復(fù)制它們。

    在Raft集群中,需要滿足最少數(shù)量的節(jié)點(diǎn)才能提供預(yù)期的級(jí)別共識(shí)保證, 這也稱為法定人數(shù)。 在Raft集群中執(zhí)行操作所需的最少投票數(shù)為 (N / 2 +1) ,其中N是組中成員總數(shù),即 投票至少超過(guò)一半 ,這也就是為什么集群節(jié)點(diǎn)通常為奇數(shù)的原因。 因此,在上面的示例中,我們至少需要3個(gè)節(jié)點(diǎn)才能具有共識(shí)保證。

    如果法定仲裁節(jié)點(diǎn)由于任何原因不可用,也就是投票沒(méi)有超過(guò)半數(shù),則此次協(xié)商沒(méi)有達(dá)成一致,并且無(wú)法提交新日志。

     

    數(shù)據(jù)存儲(chǔ):Tidb/TiKV

    日志:阿里巴巴的 DLedger

    服務(wù)發(fā)現(xiàn):Consul& etcd

    集群調(diào)度:HashiCorp Nomad

     

    只能容納故障節(jié)點(diǎn)(CFT),不容納作惡節(jié)點(diǎn)

    順序投票,只能串行apply,因此高并發(fā)場(chǎng)景下性能差

     

    Raft通過(guò)解決圍繞Leader選舉的三個(gè)主要子問(wèn)題,管理分布式日志和算法的安全性功能來(lái)解決分布式共識(shí)問(wèn)題。

    當(dāng)我們啟動(dòng)一個(gè)新的Raft集群或某個(gè)領(lǐng)導(dǎo)者不可用時(shí),將通過(guò)集群中所有成員節(jié)點(diǎn)之間協(xié)商來(lái)選舉一個(gè)新的領(lǐng)導(dǎo)者。 因此,在給定的實(shí)例中,Raft集群的節(jié)點(diǎn)可以處于以下任何狀態(tài): 追隨者(Follower),候選人(Candidate)或領(lǐng)導(dǎo)者(Leader)。

    系統(tǒng)剛開(kāi)始啟動(dòng)的時(shí)候,所有節(jié)點(diǎn)都是follower,在一段時(shí)間內(nèi)如果它們沒(méi)有收到Leader的心跳信號(hào),follower就會(huì)轉(zhuǎn)化為Candidate;

    如果某個(gè)Candidate節(jié)點(diǎn)收到大多數(shù)節(jié)點(diǎn)的票,則這個(gè)Candidate就可以轉(zhuǎn)化為L(zhǎng)eader,其余的Candidate節(jié)點(diǎn)都會(huì)回到Follower狀態(tài);

    一旦一個(gè)Leader發(fā)現(xiàn)系統(tǒng)中存在一個(gè)Leader節(jié)點(diǎn)比自己擁有更高的任期(Term),它就會(huì)轉(zhuǎn)換為Follower。

    Raft使用基于心跳的RPC機(jī)制來(lái)檢測(cè)何時(shí)開(kāi)始新的選舉。 在正常期間, Leader 會(huì)定期向所有可用的 Follower 發(fā)送心跳消息(實(shí)際中可能把日志和心跳一起發(fā)過(guò)去)。 因此,其他節(jié)點(diǎn)以 Follower 狀態(tài)啟動(dòng),只要它從當(dāng)前 Leader 那里收到周期性的心跳,就一直保持在 Follower 狀態(tài)。

    當(dāng) Follower 達(dá)到其超時(shí)時(shí)間時(shí),它將通過(guò)以下方式啟動(dòng)選舉程序:

    根據(jù) Candidate 從集群中其他節(jié)點(diǎn)收到的響應(yīng),可以得出選舉的三個(gè)結(jié)果。

    共識(shí)算法的實(shí)現(xiàn)一般是基于復(fù)制狀態(tài)機(jī)(Replicated state machines),何為 復(fù)制狀態(tài)機(jī)

    簡(jiǎn)單來(lái)說(shuō): 相同的初識(shí)狀態(tài) + 相同的輸入 = 相同的結(jié)束狀態(tài) 。不同節(jié)點(diǎn)要以相同且確定性的函數(shù)來(lái)處理輸入,而不要引入一下不確定的值,比如本地時(shí)間等。使用replicated log是一個(gè)很不錯(cuò)的注意,log具有持久化、保序的特點(diǎn),是大多數(shù)分布式系統(tǒng)的基石。

    有了Leader之后,客戶端所有并發(fā)的請(qǐng)求可以在Leader這邊形成一個(gè)有序的日志(狀態(tài))序列,以此來(lái)表示這些請(qǐng)求的先后處理順序。Leader然后將自己的日志序列發(fā)送Follower,保持整個(gè)系統(tǒng)的全局一致性。注意并不是強(qiáng)一致性,而是 最終一致性 。

    日志由有序編號(hào)(log index)的日志條目組成。每個(gè)日志條目包含它被創(chuàng)建時(shí)的任期號(hào)(term),和日志中包含的數(shù)據(jù)組成,日志包含的數(shù)據(jù)可以為任何類型,從簡(jiǎn)單類型到區(qū)塊鏈的區(qū)塊。每個(gè)日志條目可以用[ term, index, data]序列對(duì)表示,其中term表示任期, index表示索引號(hào),data表示日志數(shù)據(jù)。

    Leader 嘗試在集群中的大多數(shù)節(jié)點(diǎn)上執(zhí)行復(fù)制命令。 如果復(fù)制成功,則將命令提交給集群,并將響應(yīng)發(fā)送回客戶端。類似兩階段提交(2PC),不過(guò)與2PC的區(qū)別在于,leader只需要超過(guò)一半節(jié)點(diǎn)同意(處于工作狀態(tài))即可。

    leader 、 follower 都可能crash,那么 follower 維護(hù)的日志與 leader 相比可能出現(xiàn)以下情況

    當(dāng)出現(xiàn)了leader與follower不一致的情況,leader強(qiáng)制follower復(fù)制自己的log, Leader會(huì)從后往前試 ,每次AppendEntries失敗后嘗試前一個(gè)日志條目(遞減nextIndex值), 直到成功找到每個(gè)Follower的日志一致位置點(diǎn)(基于上述的兩條保證),然后向后逐條覆蓋Followers在該位置之后的條目 。所以丟失的或者多出來(lái)的條目可能會(huì)持續(xù)多個(gè)任期。

     

    要求候選人的日志至少與其他節(jié)點(diǎn)一樣最新。如果不是,則跟隨者節(jié)點(diǎn)將不投票給候選者。

    意味著每個(gè)提交的條目都必須存在于這些服務(wù)器中的至少一個(gè)中。如果候選人的日志至少與該多數(shù)日志中的其他日志一樣最新,則它將保存所有已提交的條目,避免了日志回滾事件的發(fā)生。

    即任一任期內(nèi)最多一個(gè)leader被選出。這一點(diǎn)非常重要,在一個(gè)復(fù)制集中任何時(shí)刻只能有一個(gè)leader。系統(tǒng)中同時(shí)有多余一個(gè)leader,被稱之為腦裂(brain split),這是非常嚴(yán)重的問(wèn)題,會(huì)導(dǎo)致數(shù)據(jù)的覆蓋丟失。在raft中,兩點(diǎn)保證了這個(gè)屬性:

    因此, 某一任期內(nèi)一定只有一個(gè)leader 。

     

    當(dāng)集群中節(jié)點(diǎn)的狀態(tài)發(fā)生變化(集群配置發(fā)生變化)時(shí),系統(tǒng)容易受到系統(tǒng)故障。 因此,為防止這種情況,Raft使用了一種稱為兩階段的方法來(lái)更改集群成員身份。 因此,在這種方法中,集群在實(shí)現(xiàn)新的成員身份配置之前首先更改為中間狀態(tài)(稱為聯(lián)合共識(shí))。 聯(lián)合共識(shí)使系統(tǒng)即使在配置之間進(jìn)行轉(zhuǎn)換時(shí)也可用于響應(yīng)客戶端請(qǐng)求,它的主要目的是提升分布式系統(tǒng)的可用性。

    二、算法可以分為哪兩大類

    算法可以分為多項(xiàng)式算法和指數(shù)型算法大類。

    算法可大致分為基本算法、數(shù)據(jù)結(jié)構(gòu)的算法、數(shù)論與代數(shù)算法、計(jì)算幾何的算法、圖論的算法、動(dòng)態(tài)規(guī)劃以及數(shù)值分析、加密算法、排序算法、檢索算法、隨機(jī)化算法、并行算法,厄米變形模型,隨機(jī)森林算法。

    共識(shí)算法分為哪兩類(共識(shí)算法分為哪兩類)

    算法可以宏泛的分為三類:

    一、有限的,確定性算法 這類算法在有限的一段時(shí)間內(nèi)終止。他們可能要花很長(zhǎng)時(shí)間來(lái)執(zhí)行指定的任務(wù),但仍將在一定的時(shí)間內(nèi)終止。這類算法得出的結(jié)果常取決于輸入值。

    二、有限的,非確定算法 這類算法在有限的時(shí)間內(nèi)終止。然而,對(duì)于一個(gè)(或一些)給定的數(shù)值,算法的結(jié)果并不是唯一的或確定的。

    共識(shí)算法分為哪兩類(共識(shí)算法分為哪兩類)

    三、無(wú)限的算法 是那些由于沒(méi)有定義終止定義條件,或定義的條件無(wú)法由輸入的數(shù)據(jù)滿足而不終止運(yùn)行的算法。通常,無(wú)限算法的產(chǎn)生是由于未能確定的定義終止條件。

    經(jīng)典的算法有很多,如歐幾里德算法,割圓術(shù),秦九韶算法。

    隨著計(jì)算機(jī)的發(fā)展,算法在計(jì)算機(jī)方面已有廣泛的發(fā)展及應(yīng)用,如用隨機(jī)森林算法來(lái)進(jìn)行頭部姿勢(shì)的估計(jì),用遺傳算法來(lái)解決彈藥裝載問(wèn)題,使用信息加密算法進(jìn)行網(wǎng)絡(luò)傳輸,使用并行算法進(jìn)行數(shù)據(jù)挖掘,以及協(xié)同過(guò)濾算法在個(gè)性化推薦中的應(yīng)用等。

    三、金窩窩區(qū)塊鏈技術(shù)中 共識(shí)機(jī)制的類別有哪些?

    重慶金窩窩分析區(qū)塊鏈技術(shù)中的共識(shí)機(jī)制如下:

    區(qū)塊鏈技術(shù)的核心是在沒(méi)有中心控制的情況下,在互相沒(méi)有信任基礎(chǔ)的個(gè)體之間就交易的合法性等達(dá)成共識(shí)的共識(shí)機(jī)制。

    區(qū)塊鏈的共識(shí)機(jī)制目前主要有4類:PoW、PoS、DPoS、分布式一致性算法。

    四、區(qū)塊鏈共識(shí)算法——(二)PoS共識(shí)(Proof of Stake)

    2011 年 7 月, 一 位 名 為 Quantum Mechanic 的 數(shù) 字 貨 幣 愛(ài) 好 者 在 比 特 幣 論 壇 首次提出了權(quán)益證明 PoS 共識(shí)算法. 隨后, Sunny King 在 2012 年 8 月發(fā)布的點(diǎn)點(diǎn)幣 (Peercoin, PPC) 中首次實(shí)現(xiàn). PoS 由 系統(tǒng)中具有最高權(quán)益而非最高算力的節(jié)點(diǎn)獲得記賬 權(quán), 其中權(quán)益體現(xiàn)為節(jié)點(diǎn)對(duì)特定數(shù)量貨幣的所有權(quán), 稱為幣齡或幣天數(shù) (Coin days)

    PoS是考慮到PoW的最大缺陷:浪費(fèi)資源而提出的,簡(jiǎn)單來(lái)說(shuō)就是 誰(shuí)的權(quán)益大,誰(shuí)說(shuō)了算

    PoS共識(shí)機(jī)制(Proof of Stake 權(quán)益證明)通過(guò)權(quán)益記賬的方式,解決效率低下、資源浪費(fèi)、節(jié)點(diǎn)一致性等問(wèn)題。

    各個(gè)節(jié)點(diǎn)需要滿足一定的條件(如抵押一定的代幣)才能成為驗(yàn)證節(jié)點(diǎn)(權(quán)益提高),系統(tǒng)通過(guò)算法在其中選擇一部分作為出塊節(jié)點(diǎn)(礦工),每隔一段時(shí)間重新選擇,算法會(huì)保證完全隨機(jī),不可被操控。只有出塊節(jié)點(diǎn)才能進(jìn)行數(shù)據(jù)處理,爭(zhēng)奪記賬權(quán)。

    權(quán)益主要由權(quán)益因子決定,可以是持幣數(shù)量,也可以是幣齡及兩者的結(jié)合。

    以太坊在之后很有可能會(huì)改用PoS進(jìn)行共識(shí),其更加符合以太坊高效率的特點(diǎn)。

    以上就是關(guān)于共識(shí)算法分為哪兩類相關(guān)問(wèn)題的回答。希望能幫到你,如有更多相關(guān)問(wèn)題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。


    推薦閱讀:

    共識(shí)算法分為哪兩類(共識(shí)算法分為哪兩類)

    幣圈共識(shí)的重要性(幣圈共識(shí)度)

    快手手游賺錢是真的嗎(快手手游賺錢是真的嗎還是假的)

    粉毛排行榜(好看的粉毛)