區(qū)塊鏈共識(shí)機(jī)制分析——論P(yáng)oW,PoS,DPos和DAG的優(yōu)缺點(diǎn)
近期,隨著區(qū)塊鏈技術(shù)在社區(qū)中的聲音越來(lái)越大,業(yè)界已經(jīng)開始從技術(shù)角度對(duì)區(qū)塊鏈進(jìn)行全方位的解讀。作為第一批區(qū)塊鏈技術(shù)的實(shí)現(xiàn),傳統(tǒng)比特幣與以太坊在共識(shí)機(jī)制、存儲(chǔ)機(jī)制、智能合約機(jī)制、跨鏈通訊機(jī)制等領(lǐng)域并沒有非常嚴(yán)密的設(shè)計(jì),從而引發(fā)了一些在數(shù)據(jù)庫(kù)與存儲(chǔ)領(lǐng)域比較常見的問題,導(dǎo)致其數(shù)據(jù)規(guī)模無(wú)法無(wú)限增加(當(dāng)前僅幾百GB就產(chǎn)生了嚴(yán)重的性能瓶頸,幾乎不可能到達(dá)上百TB規(guī)模),吞吐量極為有限,使其不可能適應(yīng)通用分布式數(shù)據(jù)存儲(chǔ)或通用結(jié)算體系的要求。
作為數(shù)據(jù)庫(kù)內(nèi)核行業(yè)十幾年的老兵,筆者將會(huì)從共識(shí)、存儲(chǔ)、智能合約、多鏈、快速檢索、以及通用接口等幾個(gè)維度對(duì)區(qū)塊鏈技術(shù)進(jìn)行闡述,并會(huì)與數(shù)據(jù)庫(kù)及大數(shù)據(jù)分布式計(jì)算技術(shù)進(jìn)行橫向?qū)Ρ取?/p>
區(qū)塊鏈的本質(zhì)即分布式多活數(shù)據(jù)庫(kù)。
從產(chǎn)品功能的角度看,當(dāng)前的區(qū)塊鏈產(chǎn)品與數(shù)據(jù)庫(kù)相比存在極大的差距。尤其是對(duì)于在業(yè)界存在了幾十年的關(guān)系型數(shù)據(jù)庫(kù),其主要核心功能包括增刪改查,而主要結(jié)構(gòu)則包括SQL解析、日志、數(shù)據(jù)管理、以及索引管理幾大模塊。
而大數(shù)據(jù)技術(shù)興起后,業(yè)界開始使用PC服務(wù)器替代傳統(tǒng)小型機(jī),為了避免服務(wù)器掉電導(dǎo)致的數(shù)據(jù)頁(yè)損壞,分布式數(shù)據(jù)庫(kù)或存儲(chǔ)普遍使用三副本對(duì)數(shù)據(jù)進(jìn)行冗余保存。
盡管從功能上看,當(dāng)前區(qū)塊鏈技術(shù)僅僅是數(shù)據(jù)庫(kù)的一個(gè)微小子集,但是其一系列設(shè)計(jì)機(jī)制,與傳統(tǒng)數(shù)據(jù)庫(kù)的內(nèi)核理念極為相似。譬如,從其傳輸和存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu)上來(lái)看,區(qū)塊鏈的鏈?zhǔn)浇Y(jié)構(gòu)來(lái)源于傳統(tǒng)數(shù)據(jù)庫(kù)的事務(wù)日志。任何數(shù)據(jù)庫(kù)的DBA都知道,數(shù)據(jù)庫(kù)的事務(wù)日志本質(zhì)上就是不可更改的鏈?zhǔn)浇Y(jié)構(gòu),事務(wù)中的每一條操作記錄都會(huì)有一個(gè)反向指針指向該事務(wù)中的上一條記錄。因此,區(qū)塊鏈的鏈?zhǔn)浇Y(jié)構(gòu)本質(zhì)上脫胎于數(shù)據(jù)庫(kù)事務(wù)日志,同時(shí)增加了區(qū)塊之間的反向哈希值作為指針,且引入了默克爾樹結(jié)構(gòu)進(jìn)行快速數(shù)據(jù)校驗(yàn)。因而,我們可以安全地進(jìn)行認(rèn)為:區(qū)塊鏈的鏈?zhǔn)浇Y(jié)構(gòu)在存儲(chǔ)體系中等價(jià)于數(shù)據(jù)庫(kù)的事務(wù)日志。本質(zhì)上數(shù)據(jù)庫(kù)的任何操作同樣是不可篡改的,只不過(guò)當(dāng)前大部分?jǐn)?shù)據(jù)庫(kù)不會(huì)對(duì)外暴露事務(wù)日志的解析工具,僅保存每一條記錄的最終狀態(tài)而已。
(圖1:數(shù)據(jù)庫(kù)體系結(jié)構(gòu),黃色部分代表區(qū)塊鏈同樣包含的組建)
1.1 一致性原理對(duì)比
在分布式數(shù)據(jù)庫(kù)中,當(dāng)前普遍采用PAXOS或RAFT算法進(jìn)行數(shù)據(jù)多份冗余的一致性協(xié)商。一般來(lái)說(shuō),在分布式數(shù)據(jù)庫(kù)體系中,每個(gè)數(shù)據(jù)分片由至少3個(gè)互相冗余備份的節(jié)點(diǎn)構(gòu)成,而在正常運(yùn)行時(shí)的數(shù)據(jù)庫(kù)每個(gè)分片都會(huì)存在一個(gè)主節(jié)點(diǎn)與兩個(gè)從節(jié)點(diǎn)。其中主節(jié)點(diǎn)負(fù)責(zé)數(shù)據(jù)的讀寫操作,從節(jié)點(diǎn)進(jìn)行只讀操作。當(dāng)主節(jié)點(diǎn)寫入數(shù)據(jù)時(shí),其事務(wù)日志會(huì)被實(shí)時(shí)同步給其他從節(jié)點(diǎn)進(jìn)行回放,以達(dá)到主從節(jié)點(diǎn)之間數(shù)據(jù)一致性的目標(biāo)。
(圖2:數(shù)據(jù)庫(kù)主從節(jié)點(diǎn)同步)
那么對(duì)比區(qū)塊鏈的體系,可以認(rèn)為數(shù)據(jù)庫(kù)領(lǐng)域的主節(jié)點(diǎn)即日志生成節(jié)點(diǎn),其每次生成事務(wù)日志的功能,與區(qū)塊鏈中每次出塊時(shí)礦工的功能完全等價(jià)。唯一不同的是,數(shù)據(jù)庫(kù)在每次操作時(shí)對(duì)日志實(shí)時(shí)廣播到從節(jié)點(diǎn)中,并且在事務(wù)提交時(shí)進(jìn)行一致性判斷。而區(qū)塊鏈則采用檢查點(diǎn)方式,每個(gè)節(jié)點(diǎn)接收自己的交易請(qǐng)求,并將請(qǐng)求廣播到其他節(jié)點(diǎn)中,而每一次出塊操作即產(chǎn)生一個(gè)檢查點(diǎn),該檢查點(diǎn)包含的信息即出塊節(jié)點(diǎn)向區(qū)塊中寫入的所有記錄。這些記錄被發(fā)送到其他節(jié)點(diǎn)后,每個(gè)節(jié)點(diǎn)對(duì)數(shù)據(jù)塊中的記錄進(jìn)行驗(yàn)證并永久寫入自身的交易日志(即區(qū)塊文件)。
(圖3:區(qū)塊鏈節(jié)點(diǎn)互相對(duì)等)
但是,區(qū)塊鏈和數(shù)據(jù)庫(kù)在一致性選擇上最大的不同在于哪個(gè)節(jié)點(diǎn)成為檢查點(diǎn)發(fā)起的節(jié)點(diǎn)。數(shù)據(jù)庫(kù)由于采用了主從機(jī)制,主節(jié)點(diǎn)永遠(yuǎn)是日志的發(fā)起節(jié)點(diǎn),而從節(jié)點(diǎn)永遠(yuǎn)是日志回放與驗(yàn)證節(jié)點(diǎn)。但是區(qū)塊鏈則不同,其采用某些算法(例如PoW、PoS、DPoS等)在多個(gè)參與節(jié)點(diǎn)之間定期選取一個(gè)節(jié)點(diǎn)進(jìn)行檢查點(diǎn)確認(rèn),這也是區(qū)塊鏈號(hào)稱自身安全的一個(gè)理由所在:在全網(wǎng)大量的節(jié)點(diǎn)中攻擊者無(wú)法確定下一個(gè)檢查點(diǎn)確認(rèn)的節(jié)點(diǎn)是誰(shuí)(當(dāng)然,就算攻擊者確定了下一個(gè)出塊節(jié)點(diǎn),還有一系列的數(shù)字簽名機(jī)制保障事務(wù)不被偽造和篡改)。
因此我們可以安全地認(rèn)為,從檢查點(diǎn)節(jié)點(diǎn)選擇的領(lǐng)域來(lái)看,傳統(tǒng)分布式數(shù)據(jù)庫(kù)確定主節(jié)點(diǎn)生成事務(wù)日志的機(jī)制,是區(qū)塊鏈共識(shí)機(jī)制的一種簡(jiǎn)單實(shí)現(xiàn)。也就是說(shuō),如果區(qū)塊鏈共識(shí)機(jī)制每次都選取同一個(gè)節(jié)點(diǎn)作為出塊節(jié)點(diǎn),其機(jī)制基本等價(jià)于分布式數(shù)據(jù)庫(kù)的主從復(fù)制原理(數(shù)據(jù)庫(kù)按照事務(wù)提交進(jìn)行一致性驗(yàn)證,區(qū)塊鏈不存在事務(wù)的概念,因此按照數(shù)據(jù)塊進(jìn)行一致性驗(yàn)證)。
(圖4:數(shù)據(jù)庫(kù)以提交回滾操作作為檢查點(diǎn),區(qū)塊鏈以生成區(qū)塊作為檢查點(diǎn))
1.2 共識(shí)算法
由于區(qū)塊鏈體系中并不存在某個(gè)節(jié)點(diǎn)永久作為檢查點(diǎn)確認(rèn)的節(jié)點(diǎn),而是每個(gè)參與節(jié)點(diǎn)都有機(jī)會(huì)被選舉成為該角色,因此在每個(gè)節(jié)點(diǎn)都能夠進(jìn)行讀寫操作時(shí),整個(gè)區(qū)塊鏈體系從功能上等價(jià)于一個(gè)不支持事務(wù)機(jī)制的多活數(shù)據(jù)庫(kù)。而具體使用哪種算法選擇出塊節(jié)點(diǎn)(PoW與PoS之爭(zhēng))、哪些節(jié)點(diǎn)在接收到數(shù)據(jù)塊時(shí)該如何驗(yàn)證(PoS與DPoS之爭(zhēng))、節(jié)點(diǎn)之間的數(shù)據(jù)以什么方式進(jìn)行傳播(DAG與鏈?zhǔn)浇Y(jié)構(gòu)之爭(zhēng))、以及如何確保一條交易被大多數(shù)參與節(jié)點(diǎn)所接受(PBFT、Paxos、RAFT、以及各種分叉解決方案等算法之爭(zhēng),Hyperledger 1.0甚至直接使用中央Kafka做排序也是醉了),則是區(qū)塊鏈共識(shí)算法需要回答的問題。不同的解決方式制約著區(qū)塊鏈的一致性、性能、吞吐量、以及可靠性。
1.2.1 挖礦
挖礦是來(lái)自于比特幣的一種說(shuō)法,其本質(zhì)在于多個(gè)節(jié)點(diǎn)通過(guò)PoW算法選舉出一致性檢查節(jié)點(diǎn)。關(guān)于PoW的說(shuō)明業(yè)界已有無(wú)數(shù)文章分析,這里筆者不再贅述細(xì)節(jié)。實(shí)際上,從數(shù)據(jù)管理的角度來(lái)看,PoW是一種效率極為低下的暴力機(jī)制,通過(guò)不停地循環(huán)生成隨機(jī)數(shù)并進(jìn)行散列,通過(guò)網(wǎng)絡(luò)預(yù)先廣播的規(guī)則(復(fù)雜度),讓每個(gè)參與的節(jié)點(diǎn)自證明其是否符合成為檢查點(diǎn)的資格。
對(duì)比分布式數(shù)據(jù)庫(kù)的Paxos或RAFT算法,每個(gè)參與節(jié)點(diǎn)默認(rèn)自身有資格成為主節(jié)點(diǎn),在原本的主節(jié)點(diǎn)無(wú)法連通的情況下通過(guò)最新事務(wù)號(hào)或其他原則相互投票,從而選舉出新的主節(jié)點(diǎn)。而由于競(jìng)爭(zhēng)節(jié)點(diǎn)過(guò)多,區(qū)塊鏈作為一個(gè)擁有幾萬(wàn)甚至幾十萬(wàn)復(fù)制節(jié)點(diǎn)的多活數(shù)據(jù)庫(kù),繼續(xù)采用Raft或Paxos算法一方面復(fù)雜度太高,另一方面無(wú)法解決拜占庭問題,因此比特幣采用PoW機(jī)制,通過(guò)大家公認(rèn)的某種機(jī)制,讓每個(gè)參與節(jié)點(diǎn)首先自己判斷是否符合要求(即生成了隨機(jī)數(shù)后自己進(jìn)行散列并驗(yàn)證)。當(dāng)節(jié)點(diǎn)自身認(rèn)為符合條件后,將之前生成的隨機(jī)數(shù)以及打包好的日志(數(shù)據(jù)塊)廣播給集群中其他節(jié)點(diǎn),從而大幅度減少了節(jié)點(diǎn)間相互投票所需的復(fù)雜度。
節(jié)點(diǎn)通過(guò)循環(huán)生成隨機(jī)數(shù)并自我驗(yàn)證的過(guò)程,即PoW中所謂的“挖礦”階段。
因此,如果把挖礦的概念擴(kuò)展,不論是PoS、PoW或DPoS算法中,節(jié)點(diǎn)間競(jìng)爭(zhēng)成為檢查點(diǎn)的過(guò)程即挖礦過(guò)程。
1.2.2 PoW與PoS的選擇
PoW是一種極為粗暴原始,但卻又及其有效防止惡意攻擊的選舉算法。該算法與計(jì)算機(jī)內(nèi)核中多線程協(xié)作的自旋鎖有異曲同工之處,自旋鎖的原理在于通過(guò)線程自身不停循環(huán)判斷一個(gè)內(nèi)存地址狀態(tài),直到該狀態(tài)設(shè)置為空閑后,通過(guò)CPU原子操作將其置為鎖定狀態(tài),以此和其他線程進(jìn)行互斥的機(jī)制。這種機(jī)制和PoW極為相似。
而PoS更傾向于類似Raft投票機(jī)制,通過(guò)固定時(shí)間協(xié)調(diào)所有節(jié)點(diǎn)參與投票,根據(jù)某種規(guī)則(例如持有代幣數(shù)量、或提供存儲(chǔ)空間大小等)判斷每個(gè)節(jié)點(diǎn)的權(quán)重,最后選取權(quán)重最高的節(jié)點(diǎn)作為檢查點(diǎn)節(jié)點(diǎn)。而在數(shù)據(jù)庫(kù)一致性選擇的Raft算法中,普遍會(huì)根據(jù)最新事務(wù)號(hào)作為權(quán)重,多個(gè)節(jié)點(diǎn)之間優(yōu)先選擇包含最新事務(wù)記錄的節(jié)點(diǎn)作為主節(jié)點(diǎn)。
因此,可以看到PoW與PoS最大的區(qū)別在于,PoW在算法復(fù)雜度足夠高的前提下,基本不需要太多的節(jié)點(diǎn)間互相通訊和確認(rèn),對(duì)代碼的實(shí)現(xiàn)要求極低。而PoS對(duì)于多節(jié)點(diǎn)間一致性驗(yàn)證、防偽等要求較高,但是很大程度上可以沿用傳統(tǒng)一致性選舉的思路進(jìn)行一定程度的優(yōu)化即可。
(圖5:PoW與PoS流程對(duì)比)
但是PoW的缺點(diǎn)與自旋鎖一樣,對(duì)于計(jì)算資源的要求極高。一個(gè)被錯(cuò)誤應(yīng)用的自旋鎖可以輕易消耗掉計(jì)算機(jī)中所有的CPU資源,同樣PoW當(dāng)前被人們?cè)嵅〉淖畲髥栴}也在于資源消耗。PoS在這方面則沒有任何問題。
1.2.3 PoS與DPoS的選擇
類似Paxos與Raft,集群內(nèi)參與的節(jié)點(diǎn)越多則效率越慢。一個(gè)典型的分布式數(shù)據(jù)庫(kù),使用單副本的效率可能會(huì)是三副本的兩倍,而三副本的效率則又是七副本的兩至三倍。因此,為了滿足足夠的吞吐量,使用PoS在進(jìn)行選舉時(shí)務(wù)必不能在成千上萬(wàn)個(gè)節(jié)點(diǎn)之間進(jìn)行投票選舉,而是應(yīng)當(dāng)在有限的集合范圍內(nèi)進(jìn)行投票驗(yàn)證。這就是DPoS的核心原理。
DPoS給出一種思路,將成千上萬(wàn)個(gè)PoS節(jié)點(diǎn),通過(guò)某種機(jī)制(例如持有代幣的數(shù)量)選舉出若干(奇數(shù)個(gè))節(jié)點(diǎn),在這幾個(gè)節(jié)點(diǎn)之間進(jìn)行投票選舉(在一些實(shí)現(xiàn)中甚至?xí)谶@些節(jié)點(diǎn)間以令牌環(huán)的方式進(jìn)行輪詢,進(jìn)一步減少投票開銷)出每次的檢查點(diǎn)(出塊)節(jié)點(diǎn),而不用在網(wǎng)絡(luò)中全部節(jié)點(diǎn)之間進(jìn)行選擇。
這種機(jī)制能夠大幅度提升選舉效率。在幾十個(gè)最多上百節(jié)點(diǎn)之間進(jìn)行一致性投票一般來(lái)說(shuō)可以在秒級(jí)完成并達(dá)到共識(shí),因此DPoS機(jī)制可以將檢查點(diǎn)(事務(wù)確認(rèn)時(shí)間)提升到秒級(jí),通過(guò)減少投票節(jié)點(diǎn)的數(shù)量或采用令牌環(huán)機(jī)制甚至可以降低到毫秒級(jí)。
(圖6:PoS對(duì)比DPoS)
但是,DPoS的性能無(wú)法無(wú)限提升。在一個(gè)完美的軟件實(shí)現(xiàn)中,其性能與吞吐量則物理制約于節(jié)點(diǎn)間通訊的網(wǎng)絡(luò)帶寬。一般來(lái)說(shuō),對(duì)于公網(wǎng)環(huán)境中兩個(gè)節(jié)點(diǎn)之間的帶寬能夠維持在上下行均5MB/s(50兆帶寬)則相當(dāng)優(yōu)秀了,大部分情況下遠(yuǎn)遠(yuǎn)無(wú)法達(dá)到該數(shù)值。而如果每條交易日志需要100字節(jié),由于網(wǎng)絡(luò)即需要廣播交易也需要廣播日志,則網(wǎng)絡(luò)帶寬消耗加倍,因此在兩個(gè)節(jié)點(diǎn)的單鏈中最大吞吐量不超過(guò)2.5萬(wàn)每秒(5MB/100字節(jié)/2=25000),假設(shè)集群中包含更多節(jié)點(diǎn),則最大吞吐量需要根據(jù)其使用的P2P同步機(jī)制成比例縮減。如果需要進(jìn)一步提升則需要進(jìn)行分鏈(類似于數(shù)據(jù)庫(kù)分片的概念),該主題將會(huì)在下面的章節(jié)詳細(xì)討論。
1.2.4 DAG與鏈?zhǔn)浇Y(jié)構(gòu)的選擇
DAG與鏈?zhǔn)浇Y(jié)構(gòu)的本質(zhì)區(qū)別在于異步與同步通訊。在前文中已經(jīng)討論過(guò)鏈?zhǔn)浇Y(jié)構(gòu)的本質(zhì)等同于數(shù)據(jù)庫(kù)事務(wù)日志,而出塊操作則為檢查點(diǎn)操作,那么鏈?zhǔn)浇Y(jié)構(gòu)體系可以看做是定期同步檢查點(diǎn)的數(shù)據(jù)庫(kù)事務(wù)同步機(jī)制。
而DAG則通過(guò)將事務(wù)操作進(jìn)行異步處理來(lái)增加網(wǎng)絡(luò)吞吐量,采用謠言傳播算法在節(jié)點(diǎn)間發(fā)送操作日志,并通過(guò)某種機(jī)制(IOTA每次驗(yàn)證前兩條交易,并計(jì)算一個(gè)PoW代表權(quán)重)將一個(gè)權(quán)重賦給該操作。
相比起同步操作的鏈?zhǔn)浇Y(jié)構(gòu),DAG結(jié)構(gòu)與任何異步機(jī)制一樣,能夠帶來(lái)的提升在于吞吐量(真的么?后文會(huì)有描述),但是產(chǎn)生的問題則在于無(wú)法有效預(yù)測(cè)交易被確認(rèn)的時(shí)間與周期。
而IOTA架構(gòu)對(duì)于DAG的實(shí)現(xiàn)機(jī)制更會(huì)導(dǎo)致幾個(gè)額外問題:
- 在對(duì)歷史交易驗(yàn)證時(shí)采用隨機(jī)方式,而沒有任何先后規(guī)則,那么有可能產(chǎn)生某些交易在極端情況下沒有任何其他節(jié)點(diǎn)對(duì)其驗(yàn)證,從而永遠(yuǎn)不會(huì)被確認(rèn);
- 為了追蹤每一筆交易與之前交易的關(guān)系,整個(gè)DAG圖譜需要被隨時(shí)檢索和訪問。在一個(gè)較大規(guī)模的系統(tǒng)中其交易圖譜溯源會(huì)非常復(fù)雜,同時(shí)幾乎不可能被全部保存在內(nèi)存中以進(jìn)行實(shí)時(shí)更新。而如果將這些數(shù)據(jù)保存在磁盤上,那么實(shí)時(shí)刷新每個(gè)Tangle的權(quán)重會(huì)造成大量隨機(jī)I/O(也許可以通過(guò)大量部署SSD解決),導(dǎo)致極大的性能問題;
- 由于采用謠言傳播的方式將每一筆交易廣播到網(wǎng)絡(luò)中的其他節(jié)點(diǎn),隨著網(wǎng)絡(luò)中節(jié)點(diǎn)數(shù)的增加(IOTA結(jié)構(gòu)中可能會(huì)有百億級(jí)別的設(shè)備節(jié)點(diǎn),而非鏈?zhǔn)浇Y(jié)構(gòu)中幾萬(wàn)個(gè)全賬本節(jié)點(diǎn)),整個(gè)網(wǎng)絡(luò)中的通訊量會(huì)程指數(shù)級(jí)上升。因此,IOTA宣稱其異步機(jī)制能夠大幅度提升網(wǎng)絡(luò)流量,但是忽略了該體系需要在網(wǎng)絡(luò)中傳播的數(shù)據(jù)量遠(yuǎn)超鏈?zhǔn)浇Y(jié)構(gòu),因此在一個(gè)具有大量節(jié)點(diǎn)的網(wǎng)絡(luò)中是否還能夠達(dá)到優(yōu)秀的傳輸速度需要仔細(xì)評(píng)估;
- IOTA宣稱每個(gè)設(shè)備節(jié)點(diǎn)即作為驗(yàn)證節(jié)點(diǎn)又作為交易的發(fā)起節(jié)點(diǎn),會(huì)對(duì)接入IOTA的設(shè)備硬件處理能力要求較高。一般來(lái)說(shuō),類似智能電表、高速公路線圈等設(shè)備使用LoRa等LPWAN協(xié)議進(jìn)行通訊,設(shè)備本身基本不具備任何計(jì)算能力。因此,IOTA才嘗試通過(guò)軟硬件一體化的方式(號(hào)稱3進(jìn)制的設(shè)備)將這些復(fù)雜邏輯寫入芯片,并與其它設(shè)備進(jìn)行集成。
如今從DAG衍生出一些其他數(shù)據(jù)結(jié)構(gòu)(例如哈希樹等),基本上只是從存儲(chǔ)方式上有一些特定的優(yōu)化,但是整體上與DAG所帶來(lái)的問題保持一致。
筆者認(rèn)為,DAG的異步數(shù)據(jù)分發(fā)思路完全可以與鏈?zhǔn)浇Y(jié)構(gòu)相輔相成。在一些完全可以接受部分?jǐn)?shù)據(jù)丟失或最終一致性的非支付類業(yè)務(wù)中,采用受限(避免出現(xiàn)網(wǎng)絡(luò)風(fēng)暴)的謠言傳播算法能夠有效提升吞吐量,但是其無(wú)法滿足類似支付結(jié)算等需要實(shí)時(shí)性與一致性較高的業(yè)務(wù)場(chǎng)景。
1.3 結(jié)論
在區(qū)塊鏈的共識(shí)機(jī)制中,其本質(zhì)與分布式數(shù)據(jù)庫(kù)的一致性算法存在極多的相似之處。拜占庭問題的引入僅僅從算法和選舉節(jié)點(diǎn)數(shù)量上對(duì)網(wǎng)絡(luò)結(jié)構(gòu)做出一些調(diào)整,但是并不從本質(zhì)上改變分布式系統(tǒng)一致性選舉的機(jī)制。
(圖7:區(qū)塊鏈共識(shí)機(jī)制對(duì)比)
PoW采用簡(jiǎn)單粗暴但極為有效的方式,通過(guò)節(jié)點(diǎn)首先自證其資質(zhì)后才進(jìn)行廣播的方式,大幅度減少了網(wǎng)絡(luò)間的通訊壓力,但與之帶來(lái)的問題則在于自證資質(zhì)的計(jì)算資源消耗極大。
PoS采用與傳統(tǒng)分布式一致性驗(yàn)證類似的機(jī)制,通過(guò)代幣數(shù)量(或存儲(chǔ)容量等指標(biāo))作為權(quán)重依據(jù),使用某種分布式算法選舉出每次的檢查點(diǎn)節(jié)點(diǎn)。這種機(jī)制的好處在于沒有消耗計(jì)算資源的自證資質(zhì)過(guò)程,但是帶來(lái)的問題在于每次選舉時(shí)在大量節(jié)點(diǎn)的網(wǎng)絡(luò)中對(duì)網(wǎng)絡(luò)壓力極大。
DPoS作為PoS的變形,通過(guò)縮小選舉節(jié)點(diǎn)的數(shù)量以減少網(wǎng)絡(luò)壓力,是一種典型的分治策略:將所有節(jié)點(diǎn)分為領(lǐng)導(dǎo)者與跟隨者,只有領(lǐng)導(dǎo)者之間達(dá)成共識(shí)后才會(huì)通知跟隨者。該機(jī)制能夠在不增加計(jì)算資源的前提下有效減少網(wǎng)絡(luò)壓力,在優(yōu)秀的軟件實(shí)現(xiàn)中將會(huì)具有較強(qiáng)的應(yīng)用價(jià)值。
DAG則采用異步機(jī)制替代鏈?zhǔn)綑z查點(diǎn)的同步策略,在優(yōu)秀的軟件實(shí)現(xiàn)中如果能夠有效控制網(wǎng)絡(luò)風(fēng)暴帶來(lái)的帶寬需求指數(shù)增加,其不失為一種對(duì)最終一致性場(chǎng)景有較好應(yīng)用前景的算法。但是DAG的局限性也極為明顯,其體系無(wú)法被利用在需要進(jìn)行同步操作或一致性要求較高的操作中(例如支付結(jié)算等)。