共識(shí)算法可以解決哪些問(wèn)題
共識(shí)算法定義了一系列動(dòng)作,通過(guò)這些動(dòng)作,獨(dú)立代理在分布式系統(tǒng)的各個(gè)部分上(至少在大多數(shù)代理中)獲得了相同的觀點(diǎn)。例如,這可以由某個(gè)客戶(hù)端(不參與協(xié)商共識(shí))確定,該客戶(hù)端可以從任何(或至少大多數(shù))協(xié)商共識(shí)參與者那里獲得關(guān)于系統(tǒng)協(xié)商共識(shí)狀態(tài)查詢(xún)的相同結(jié)果。
通常,共識(shí)算法用于解決以下問(wèn)題:
· 領(lǐng)袖選舉(在所有共識(shí)參與者中選擇代理人,有權(quán)更新系統(tǒng)的全球狀態(tài))
· 原子交換(不能根據(jù)事件的內(nèi)部屬性確定其順序事件的確切順序)
· 狀態(tài)復(fù)制(維護(hù)所有或大多數(shù)代理共享的全局狀態(tài))
這是共識(shí)算法的三個(gè)主要用例是高度相關(guān)的。例如,狀態(tài)復(fù)制可以通過(guò)狀態(tài)更改的適當(dāng)順序(即原子廣播)來(lái)解決,而適當(dāng)?shù)念I(lǐng)導(dǎo)人選舉過(guò)程本身可能允許有序的原子廣播(但是,在沒(méi)有領(lǐng)導(dǎo)人選舉過(guò)程的情況下,有達(dá)成相同結(jié)果的共識(shí))。
從歷史上看,共識(shí)算法起源于多處理器計(jì)算的研究;它們解決的是處理器可能出現(xiàn)故障(即變得無(wú)響應(yīng))時(shí)的全局狀態(tài)問(wèn)題。在這些情況下通信是同步的,即受一些已知的時(shí)間上限。
后來(lái),隨著電信和計(jì)算機(jī)網(wǎng)絡(luò)的發(fā)展,出現(xiàn)了另外兩個(gè)問(wèn)題:未知的通信延遲和對(duì)手的存在。前者導(dǎo)致了部分新的研究同步和異步共識(shí)算法和創(chuàng)建算法可以容忍任意代理行為(拜占庭行為)——即所謂的拜占庭容錯(cuò)算法(或BFT共識(shí))。
隨著互聯(lián)網(wǎng)的廣泛應(yīng)用,對(duì)手的問(wèn)題變得更加嚴(yán)重。如果在多處理器環(huán)境或電信基礎(chǔ)設(shè)施中可以識(shí)別每個(gè)代理,那么在Internet的許多情況下就不能這樣做。因此,出現(xiàn)了一種新的公共(或無(wú)許可)共識(shí),共識(shí)算法必須成為一種協(xié)議,其中嵌入了識(shí)別和排除拜占庭式代理的規(guī)則和程序——就像一些附帶機(jī)制降低了此類(lèi)代理進(jìn)一步參與協(xié)議的經(jīng)濟(jì)能力一樣。這種制度以POW 和POS的名義引起了公眾的注意。我們將以經(jīng)濟(jì)激勵(lì)(BFT- ei)命名這些協(xié)議。在許多情況下,異步性和無(wú)許可性要求犧牲其他共識(shí)品質(zhì),比如決定論或適用于領(lǐng)導(dǎo)人選舉場(chǎng)景的能力。
在此基礎(chǔ)上,可以根據(jù)不同的準(zhǔn)則對(duì)共識(shí)算法進(jìn)行分類(lèi)。
1. 共識(shí)的主題:原子廣播、領(lǐng)袖選舉、國(guó)家復(fù)制(或者,另一種選擇,基于領(lǐng)袖和無(wú)領(lǐng)袖算法)
2. 容錯(cuò)形式:無(wú)容錯(cuò)、非任意容錯(cuò)和拜占庭容錯(cuò)(BFT)
3. 可以達(dá)成共識(shí)的假設(shè)有:同步、參與方同步、異步
4. 公開(kāi)和非公開(kāi)參與的協(xié)議:許可vs不許可,或公開(kāi)vs私人。
5. 內(nèi)部經(jīng)濟(jì)激勵(lì): BFT-EI
6. 協(xié)商共識(shí)的確定性品質(zhì), 即實(shí)現(xiàn)終結(jié)性的能力: 具有終結(jié)性和非確定性共識(shí)的共識(shí)算法。
這些類(lèi)可以組合在一些自然的組中,比如開(kāi)放的參與會(huì)導(dǎo)致不確定性的共識(shí)屬性(因?yàn)槲覀儾荒茉诮o定的時(shí)間點(diǎn)枚舉所有共識(shí)的參與者),也就是缺乏終結(jié)性,它將是無(wú)領(lǐng)導(dǎo)的。這種共識(shí)的一個(gè)典型例子是比特幣交易。
我們定義了以下典型的共識(shí)屬性組合:
· PoW:無(wú)權(quán)限同步非確定性無(wú)領(lǐng)導(dǎo)BFT-EI。
· POS: 基于BFT-EI的不允許部分同步確定性領(lǐng)導(dǎo)。
· BFT(狹義的): 允許的、確定性的BFT。可以有不同的同步性假設(shè),可以是領(lǐng)導(dǎo)者,也可以是非領(lǐng)導(dǎo)者。
· DAG:無(wú)權(quán)限異步、非確定性領(lǐng)導(dǎo)、無(wú)BFT容忍度。
· 其他混合的類(lèi)型。
許多現(xiàn)實(shí)世界中的共識(shí)算法應(yīng)用, 比如在現(xiàn)代實(shí)驗(yàn)區(qū)塊鏈中發(fā)現(xiàn)的應(yīng)用, 往往會(huì)利用一組不同的共識(shí)機(jī)制,用于領(lǐng)導(dǎo)人選舉的機(jī)制 (通常是基于 bft 協(xié)議的機(jī)制, 但有時(shí)甚至是 pow), 而其他的機(jī)制對(duì)于原子廣播 (pos) 和另一個(gè)實(shí)現(xiàn)確定性的是狀態(tài)復(fù)制-通常是 bft 類(lèi)型的 “小工具” 的形式。
共識(shí)算法本身不需要特定的數(shù)據(jù)結(jié)構(gòu);它們都是關(guān)于代理行為和網(wǎng)絡(luò)通信的。然而,在比特幣(這是第一個(gè)基于公共共識(shí)的應(yīng)用)發(fā)明之后,似乎需要全球狀態(tài)的系統(tǒng)并利用數(shù)據(jù)結(jié)構(gòu)上的一些最佳實(shí)踐來(lái)驗(yàn)證,比如具有加密增強(qiáng)功能的日志類(lèi)賬——所謂的區(qū)塊鏈或者更通用的有向無(wú)環(huán)圖(DAG),通常由我們上面分類(lèi)的#4組共識(shí)使用。