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

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

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

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

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

    只需要輸入關鍵詞,就能返回你想要的內容,越精準,寫出的就越詳細,有微信小程序端、在線網頁版、PC客戶端

    官網:https://ai.de1919.com。

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

    本文目錄:

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

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

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

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

    R = Hash(r)

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

    Rd = Hash(r+n)

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

     

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

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

    節(jié)點通過PoS算法出塊的過程如下:普通的節(jié)點要成為出塊節(jié)點,首先要進行資產的質押,當輪到自己出塊時,打包區(qū)塊,然后向全網廣播,其他驗證節(jié)點將會校驗區(qū)塊的合法性。

     

    DPoS算法和PoS算法相似,也采用股份和權益質押。

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

    選民把自己的選票投給某個節(jié)點,如果某個節(jié)點當選記賬節(jié)點,那么該記賬節(jié)點往往在獲取出塊獎勵后,可以采用任意方式來回報自己的選民。

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

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

     

    拜占庭問題:

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

    但是,在軍隊內可能有叛徒,這些人將影響將軍們達成共識。拜占庭將軍問題是指在已知有將軍是叛徒的情況下,剩余的將軍如何達成一致決策的問題。

    BFT:

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

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

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

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

    另外,拜占庭容錯系統(tǒng)需要達成如下兩個指標:

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

     

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

    PBFT算法的共識過程如下:客戶端(Client)發(fā)起消息請求(request),并廣播轉發(fā)至每一個副本節(jié)點(Replica),由其中一個主節(jié)點(Leader)發(fā)起提案消息pre-prepare,并廣播。其他節(jié)點獲取原始消息,在校驗完成后發(fā)送prepare消息。每個節(jié)點收到2f+1個prepare消息,即認為已經準備完畢,并發(fā)送commit消息。當節(jié)點收到2f+1個commit消息,客戶端收到f+1個相同的reply消息時,說明客戶端發(fā)起的請求已經達成全網共識。

    具體流程如下

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

    主節(jié)點收到客戶端的請求,需要進行以下交驗:

    a. 客戶端請求消息簽名是否正確。

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

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

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

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

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

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

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

    主節(jié)點和副本節(jié)點收到PREPARE消息,需要進行以下交驗:

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

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

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

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

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

    主節(jié)點和副本節(jié)點收到COMMIT消息,需要進行以下交驗:

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

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

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

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

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

     

    如果主節(jié)點作惡,它可能會給不同的請求編上相同的序號,或者不去分配序號,或者讓相鄰的序號不連續(xù)。備份節(jié)點應當有職責來主動檢查這些序號的合法性。

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

    View Change協(xié)議

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

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

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

     

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

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

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

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

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

     

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

     

     

    Raft基于領導者驅動的共識模型,其中將選舉一位杰出的領導者(Leader),而該Leader將完全負責管理集群,Leader負責管理Raft集群的所有節(jié)點之間的復制日志。

     

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

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

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

     

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

    日志:阿里巴巴的 DLedger

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

    集群調度:HashiCorp Nomad

     

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

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

     

    Raft通過解決圍繞Leader選舉的三個主要子問題,管理分布式日志和算法的安全性功能來解決分布式共識問題。

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

    系統(tǒng)剛開始啟動的時候,所有節(jié)點都是follower,在一段時間內如果它們沒有收到Leader的心跳信號,follower就會轉化為Candidate;

    如果某個Candidate節(jié)點收到大多數(shù)節(jié)點的票,則這個Candidate就可以轉化為Leader,其余的Candidate節(jié)點都會回到Follower狀態(tài);

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

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

    Follower 達到其超時時間時,它將通過以下方式啟動選舉程序:

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

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

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

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

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

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

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

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

     

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

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

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

    因此, 某一任期內一定只有一個leader 。

     

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

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

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

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

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

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

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

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

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

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

    經典的算法有很多,如歐幾里德算法,割圓術,秦九韶算法。

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

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

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

    區(qū)塊鏈技術的核心是在沒有中心控制的情況下,在互相沒有信任基礎的個體之間就交易的合法性等達成共識的共識機制。

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

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

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

    PoS是考慮到PoW的最大缺陷:浪費資源而提出的,簡單來說就是 誰的權益大,誰說了算 。

    PoS共識機制(Proof of Stake 權益證明)通過權益記賬的方式,解決效率低下、資源浪費、節(jié)點一致性等問題。

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

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

    以太坊在之后很有可能會改用PoS進行共識,其更加符合以太坊高效率的特點。

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


    推薦閱讀:

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

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

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

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