區(qū)塊鏈是一種分布式系統(tǒng)。不了解分布式系統(tǒng)的工作原理,很難真正理解區(qū)塊鏈。
而不理解區(qū)塊鏈的麻煩,在于會(huì)陷入到對(duì)「去中心化」、「無(wú)需許可」等等概念以及「TPS」、「安全」等等問(wèn)題失去語(yǔ)境的討論中去。這不僅無(wú)助于我們?nèi)?zhǔn)確地分析和判斷一個(gè)區(qū)塊鏈項(xiàng)目,也讓我們無(wú)法認(rèn)清區(qū)塊鏈在技術(shù)上的可能的發(fā)展路線。
更直白來(lái)講,我們需要掌握分布式系統(tǒng)的一些基礎(chǔ)知識(shí)。因?yàn)檫@樣,我們就能看到區(qū)塊鏈本身的局限性,我們就知道任何一個(gè)真正有價(jià)值的區(qū)塊鏈項(xiàng)目都應(yīng)該:為了解決特定的問(wèn)題,在特定的環(huán)境中,做出特定的解決方案。
單純的指標(biāo)比較并不客觀,更好的判斷標(biāo)準(zhǔn)是:這種方案是否適合于解決這個(gè)問(wèn)題。
了解分布式系統(tǒng)的工作原理對(duì)區(qū)塊鏈?zhǔn)澜绶浅V匾?。那么現(xiàn)在,就讓我們開(kāi)啟分布式系統(tǒng)的探索之旅吧。
計(jì)算機(jī)的作用是處理信息,我們輸入條件 A 給它,它輸出結(jié)果 B 給我們。如果處理信息的工作是由一臺(tái)計(jì)算機(jī)完成的,這是一種中心化的結(jié)構(gòu);如果處理信息的工作是由多***立的計(jì)算機(jī)合作完成的,我們可以稱其為「分布式的系統(tǒng)」。
分布式系統(tǒng)有多種不同的架構(gòu),用以實(shí)現(xiàn)不同的處理信息的方法。假設(shè)系統(tǒng)中有十臺(tái)計(jì)算機(jī),一種架構(gòu)是:我們把一個(gè)計(jì)算任務(wù)分成十份,讓每臺(tái)計(jì)算機(jī)獨(dú)立處理一份任務(wù),最后匯總它們的計(jì)算結(jié)果,作為輸出。
還有另一種架構(gòu),就是讓這十臺(tái)計(jì)算機(jī)都去處理這一個(gè)計(jì)算任務(wù),如果所有的計(jì)算機(jī)都正常工作,它們的計(jì)算結(jié)果應(yīng)該是一樣的,那么就把這個(gè)一致的計(jì)算結(jié)果作為輸出。區(qū)塊鏈就是這樣的一種分布式系統(tǒng)。
很容易就能發(fā)現(xiàn),這是一個(gè)「自找苦吃」的系統(tǒng),它相當(dāng)于把同樣的工作做了十次,而且還需要額外增加不同計(jì)算機(jī)之間的溝通工作。
那為什么還需要這種系統(tǒng)?因?yàn)樗梢宰屛覀兠獬龑?duì)中心化的那一臺(tái)計(jì)算機(jī),以及那臺(tái)計(jì)算機(jī)背后的中心化的公司或組織的依賴。這樣一來(lái),既能避免單點(diǎn)故障或作惡,也能減少權(quán)力的集中及濫用。
一、分布式系統(tǒng)的理想目標(biāo)
區(qū)塊鏈所屬的分布式系統(tǒng)也被稱為「復(fù)制狀態(tài)機(jī)模型」(Replicated State Machine),它的目標(biāo)很簡(jiǎn)單:系統(tǒng)內(nèi)全部的計(jì)算機(jī)都同意某一個(gè)輸出值,也就是指:系統(tǒng)內(nèi)所有的節(jié)點(diǎn) / 計(jì)算機(jī)都有相同的初始狀態(tài),在執(zhí)行完一個(gè)事務(wù)后,所有的節(jié)點(diǎn)都有相同的最終狀態(tài) 。
如果計(jì)算機(jī)都運(yùn)行良好,它們之間的通信也完全同步,實(shí)現(xiàn)這個(gè)目標(biāo)并不困難。但現(xiàn)實(shí)不是如此,主要有以下兩類問(wèn)題:
1. 某臺(tái) / 某些計(jì)算機(jī)出現(xiàn)故障,它可能無(wú)法計(jì)算出結(jié)果,也可能連接不上系統(tǒng)。
2. 如果不同計(jì)算機(jī)收到事件的順序不同,對(duì)事件的處理順序就會(huì)不同,導(dǎo)致輸出結(jié)果也不同。比如(a+b)×c 與 a+(b×c)就是兩種不同的計(jì)算順序,會(huì)帶來(lái)不同的計(jì)算結(jié)果。
這些問(wèn)題是常見(jiàn)且不可避免的,而一旦出現(xiàn)問(wèn)題,就無(wú)法實(shí)現(xiàn)全部的計(jì)算機(jī)都同意某一個(gè)輸出結(jié)果。著名的分布式系統(tǒng)「FLP 不可能原理」是這樣描述的:在網(wǎng)絡(luò)可靠,但允許節(jié)點(diǎn)失效的最小化異步模型系統(tǒng)中,不存在一個(gè)可以解決一致性問(wèn)題的確定性共識(shí)算法。通俗而言就是:只要系統(tǒng)中有一臺(tái)計(jì)算機(jī)出問(wèn)題,該系統(tǒng)就無(wú)法在輸出值上達(dá)成共識(shí)。
FLP 不可能原理告訴我們:不要浪費(fèi)時(shí)間去為分布式系統(tǒng)設(shè)計(jì)面向所有場(chǎng)景的共識(shí)算法,那是不可能實(shí)現(xiàn)的。
二、分布式系統(tǒng)的共識(shí)算法
雖然 FLP 不可能原理很殘酷,但分布式系統(tǒng)能夠帶來(lái)的好處是值得我們迎難而上的。既然不存在面向所有場(chǎng)景的共識(shí)算法,那么也許可以找到一些在特定場(chǎng)景中有效的共識(shí)算法。共識(shí)算法,是指讓分布式系統(tǒng)達(dá)成共識(shí)的方法。
讓我們看看科學(xué)家們是如何一步一步限定場(chǎng)景,并實(shí)現(xiàn)該場(chǎng)景下的共識(shí)算法的。
首先,如果系統(tǒng)中的每一臺(tái)計(jì)算機(jī)都可以提出自己的結(jié)果,場(chǎng)面無(wú)疑是復(fù)雜的,因?yàn)槲覀冞B就哪一個(gè)結(jié)果去達(dá)成共識(shí)都無(wú)法知曉。所以解決共識(shí)問(wèn)題的第一步是確定共識(shí)的到底是什么,最簡(jiǎn)單的方法就是某一臺(tái)計(jì)算機(jī)說(shuō)了算,它提出一個(gè)結(jié)果,其他的計(jì)算機(jī)來(lái)表態(tài)是否同意這個(gè)結(jié)果。
說(shuō)了算的那臺(tái)計(jì)算機(jī)被稱為提案者或者領(lǐng)導(dǎo)者。雖然通過(guò)領(lǐng)導(dǎo)者來(lái)實(shí)現(xiàn)共識(shí)并不是唯一解決問(wèn)題的方法,但絕大多數(shù)協(xié)議都是在此基礎(chǔ)上實(shí)現(xiàn)的,包括區(qū)塊鏈系統(tǒng)中使用的共識(shí)算法。
所以你看,并沒(méi)有絕對(duì)的去中心化,實(shí)現(xiàn)共識(shí)的第一步就是要確定一個(gè)中心。
題外話:當(dāng)我們知道這一點(diǎn)后,就能建立起關(guān)于去中心化的更有效的討論,比如在此處就可以不泛泛而談去中心化,而是:選出這個(gè)領(lǐng)導(dǎo)者的方法是否去中心化。
回到主題。需要領(lǐng)導(dǎo)者的共識(shí)算法的工作步驟大致是這樣的:
1. 選出一個(gè)領(lǐng)導(dǎo)者;
2. 領(lǐng)導(dǎo)者提出一個(gè)結(jié)果;
3. 追隨者確定是否同意這個(gè)結(jié)果;
4. 如果大家就結(jié)果達(dá)成了共識(shí),系統(tǒng)輸出最終結(jié)果;如果大家未達(dá)成共識(shí),回到步驟 1 重新開(kāi)始。
這種思路提供了一種可以達(dá)成共識(shí)的方法,但它離真正實(shí)現(xiàn)共識(shí)還很遙遠(yuǎn)。因?yàn)槿绻慌_(tái)計(jì)算機(jī)連接不上系統(tǒng),它就無(wú)法表決自己是否同意領(lǐng)導(dǎo)者的結(jié)果;如果出現(xiàn)問(wèn)題的計(jì)算機(jī)恰好是領(lǐng)導(dǎo)者,情況就會(huì)更糟糕,整個(gè)系統(tǒng)會(huì)進(jìn)入停滯狀態(tài)。
三、同步性假設(shè)共識(shí)算法
如何解決上述宕機(jī)的問(wèn)題?方法說(shuō)起來(lái)很簡(jiǎn)單:如果一臺(tái)計(jì)算機(jī)連不上系統(tǒng),就忽略它,不要它參與這一輪的共識(shí)。
那么新的問(wèn)題來(lái)了,我們?cè)趺粗浪沁B接不上系統(tǒng),還是它正在參與共識(shí)只不過(guò)速度比別的機(jī)器慢?
因此,科學(xué)家們發(fā)展出了解決共識(shí)問(wèn)題的最重要的一個(gè)假設(shè):同步性假設(shè)。同步性假設(shè)引入「超時(shí)」概念,也就是說(shuō)事先設(shè)定一個(gè)時(shí)間范圍,如果領(lǐng)導(dǎo)者無(wú)法在該時(shí)間范圍內(nèi)發(fā)出提案,就淘汰它,選出一個(gè)新的領(lǐng)導(dǎo)者。這樣一來(lái)就可以容忍領(lǐng)導(dǎo)者節(jié)點(diǎn)出現(xiàn)問(wèn)題。(注:同步性假設(shè)不等于同步假設(shè))
Paxos 算法和 Raft 算法都是基于同步性假設(shè)提出來(lái)的。但這兩個(gè)算法還需要對(duì)系統(tǒng)做另一種假設(shè),即認(rèn)為系統(tǒng)內(nèi)所有的計(jì)算機(jī)都是「好人」,它們要么正確地響應(yīng)領(lǐng)導(dǎo)者的提案,要么因?yàn)楣收蠠o(wú)法響應(yīng)。
然后再制定一條規(guī)則:只要系統(tǒng)內(nèi)過(guò)半數(shù)的計(jì)算機(jī)接受了領(lǐng)導(dǎo)者的提案,就把該提案作為系統(tǒng)的最終結(jié)果。這樣一來(lái),就不用等待所有的計(jì)算機(jī)都做出響應(yīng),從而可以容忍追隨者節(jié)點(diǎn)出現(xiàn)問(wèn)題。
于是,我們終于擁有了一個(gè)可以實(shí)現(xiàn)共識(shí)的分布式系統(tǒng),雖然對(duì)它有嚴(yán)格的條件限定。
Paxos 共識(shí)算法是由萊斯利·蘭伯特(Leslie Lamport)在 1990 年提出的一種基于消息傳遞且具有高度容錯(cuò)特性的一致性算法,它在分布式系統(tǒng)應(yīng)用領(lǐng)域有著重要的地位,包括 Google 在內(nèi)的許多公司的大型分布式系統(tǒng)采用的都是該算法。而我們第一階段的探索也可以在此處結(jié)束,接下來(lái)是第二階段。
四、解決掉系統(tǒng)中的「壞人」
Paxos 雖然能實(shí)現(xiàn)共識(shí),但它的算法是建立在所有計(jì)算機(jī)都是「好人」的基礎(chǔ)上的,這些計(jì)算機(jī)要么沉默,要么發(fā)出正確的聲音,因此整個(gè)系統(tǒng)中只有一種聲音,大家就這個(gè)聲音達(dá)成共識(shí)即可。而如果計(jì)算機(jī)中有「壞人」,系統(tǒng)里就會(huì)出現(xiàn)壞人的聲音和好人的聲音,Paxos 算法無(wú)法處理這一情況。
我們需要在有壞人的情況下也可以實(shí)現(xiàn)共識(shí)的算法,有沒(méi)有可能?萊斯利·蘭伯特建立了一個(gè)模型來(lái)討論這種可能性,該模型被稱作拜占庭將軍問(wèn)題,其中的拜占庭節(jié)點(diǎn)就是壞人節(jié)點(diǎn),它們會(huì)傳遞干擾信息阻礙整個(gè)系統(tǒng)達(dá)成共識(shí)。
在論文《The Byzantine Generals Problem》中,蘭伯特提出了幾種解決方案,其中一種可以在拜占庭節(jié)點(diǎn)不到 1/3 時(shí)實(shí)現(xiàn)系統(tǒng)的共識(shí)。也就是說(shuō),如果系統(tǒng)中壞人的數(shù)量少于 1/3,就可以通過(guò)算法實(shí)現(xiàn)共識(shí)。
這之后出現(xiàn)的 DLS 算法、PBFT 算法(實(shí)用拜占庭容錯(cuò)算法)都是在此基礎(chǔ)上發(fā)展出來(lái)的。
PBFT 是具有代表性的一種拜占庭容錯(cuò)算法,其實(shí)現(xiàn)過(guò)程大致如下。不理解該過(guò)程也沒(méi)關(guān)系,知道通過(guò)這種溝通方式能夠達(dá)成共識(shí)就可以。
1. pre-prepare 階段:領(lǐng)導(dǎo)者發(fā)送結(jié)果給所有追隨者。領(lǐng)導(dǎo)者在本圖中是 0 號(hào)節(jié)點(diǎn),它把結(jié)果發(fā)給追隨者 1、2、3 號(hào)節(jié)點(diǎn)。
2. prepare 階段:如果追隨者認(rèn)為結(jié)果沒(méi)有錯(cuò)誤,就告訴所有其他節(jié)點(diǎn)自己認(rèn)可這個(gè)結(jié)果。比如 1 號(hào)節(jié)點(diǎn)會(huì)把自己的認(rèn)可消息發(fā)給 0、2、3 號(hào)節(jié)點(diǎn)。
3. commit 階段:如果追隨者發(fā)現(xiàn)超過(guò) 2/3 的節(jié)點(diǎn)認(rèn)可了領(lǐng)導(dǎo)者的結(jié)果,就告訴所有其他節(jié)點(diǎn)自己接受這個(gè)結(jié)果為最終結(jié)果。
4. reply 階段:如果領(lǐng)導(dǎo)者和追隨者發(fā)現(xiàn)超過(guò) 2/3 的節(jié)點(diǎn)接受了最終結(jié)果,就可以認(rèn)為大部分節(jié)點(diǎn)達(dá)成了共識(shí),就把該共識(shí)反饋給客戶端;如果客戶端收到超過(guò) 1/3 的節(jié)點(diǎn)的相同的共識(shí),就可以認(rèn)為全網(wǎng)達(dá)成了共識(shí)。
到此,我們就解決了有拜占庭節(jié)點(diǎn)的分布式系統(tǒng)的共識(shí)問(wèn)題。不過(guò)如果系統(tǒng)中壞人的數(shù)量等于或多于 1/3,依然是無(wú)法達(dá)成共識(shí)的。我們能做的是通過(guò)系統(tǒng)的準(zhǔn)入條件或激勵(lì)措施,讓壞人可以少于 1/3。
對(duì)分布式系統(tǒng)的第二階段的探索到這里就結(jié)束了,接下來(lái)進(jìn)入到第三階段。
五、中本聰共識(shí)算法
不管 Paxos 還是 PBFT,都使用了同步性假設(shè),事實(shí)上,大家對(duì)共識(shí)算法的研究幾乎都是在該方向上的,直到中本聰共識(shí)的出現(xiàn)。中本聰共識(shí)使用的是非確定性機(jī)制。
這是什么意思呢?我們可以把一個(gè)由 12 臺(tái)計(jì)算機(jī)組成的分布式系統(tǒng)想象成一個(gè)由 12 名陪審員組成的陪審團(tuán)。我們把這 12 個(gè)人關(guān)在會(huì)議室里,遞進(jìn)去一張紙條闡述案情,然后坐在會(huì)議室門(mén)口等他們給出審理的結(jié)果。
這 12 個(gè)人對(duì)于如何判決會(huì)有不同的意見(jiàn),隨著討論的深入也可能改變自己的立場(chǎng),還有的人可能睡著了無(wú)法發(fā)表看法(參考《十二怒漢》)。那么坐在門(mén)口等的人有兩種選擇。第一種選擇是你們?nèi)ビ懻摪?,讓我等多久都可以,但最后你們給我的必須是唯一確定的審理結(jié)果;第二種選擇是我等不了,你們先把最多人同意的那個(gè)結(jié)果給我,如果之后出現(xiàn)一個(gè)更多人同意的結(jié)果,我再改成那個(gè)結(jié)果。
顯而易見(jiàn),我們只能二選一,如果要求結(jié)果確定,就不能保證一定能等到結(jié)果;如果要求拿到結(jié)果,就無(wú)法保證該結(jié)果一定是最終結(jié)果。
分布式系統(tǒng)就是這樣,只能二選一,第一種選擇被稱作 Finality,即「結(jié)果的確定性」或安全性;第二種選擇被稱作 Liveness,即網(wǎng)絡(luò)的活性或可用性。
這兩種選擇決定了分布式共識(shí)兩種不同的設(shè)計(jì)思路:
1. 追求 Finality,是優(yōu)先結(jié)果,就要對(duì)網(wǎng)絡(luò)做出要求。PBFT、Tendermint 都是這一類型的算法,它們走的是網(wǎng)絡(luò)的同步性假設(shè)路線,使用這類算法的系統(tǒng)不會(huì)出現(xiàn)分叉。
2. 追求 Liveness,是優(yōu)先網(wǎng)絡(luò),就要對(duì)結(jié)果做出讓步。中本聰共識(shí)是這一類型的算法,它走的是結(jié)果的非確定性路線,使用這類算法的分布式網(wǎng)絡(luò)始終可用,而且任意節(jié)點(diǎn)都可以隨時(shí)加入 / 離開(kāi)系統(tǒng)。
題外話,在 Finality 和 Liveness 中二選一也是分布式系統(tǒng) CAP 定理(不可能三角)的體現(xiàn)。該定理說(shuō)的是:對(duì)于一個(gè)分布式系統(tǒng)來(lái)說(shuō),不可能同時(shí)滿足一致性、可用性和分區(qū)容錯(cuò)性。因?yàn)榉謪^(qū)容錯(cuò)性是指該系統(tǒng)要能容忍網(wǎng)絡(luò)出現(xiàn)分區(qū),而現(xiàn)實(shí)網(wǎng)絡(luò)是一定會(huì)分區(qū)的,所以這個(gè)條件必須滿足,那么實(shí)際上,CAP 定理說(shuō)的是一個(gè)分布式系統(tǒng)不可能同時(shí)滿足一致性和可用性,這其中,CAP 一致性體現(xiàn)的是 Finality,CAP 可用性體現(xiàn)的是 Liveness。
而不管是 FLP 不可能原理,還是 CAP 不可能定理,它們不是在告訴我們:這條路很難走通,你如果突破就是了不起的創(chuàng)新;它們告訴我們的是:這條路走不通,你要做的是根據(jù)需求來(lái)做權(quán)衡和選擇。
使用同步性假設(shè)的共識(shí)算法在前文已經(jīng)詳細(xì)地介紹過(guò)了,它們通過(guò)引入超時(shí)概念忽略出現(xiàn)問(wèn)題的計(jì)算機(jī),從而達(dá)成共識(shí)。
使用非確定性機(jī)制的中本聰共識(shí)描述起來(lái)也很簡(jiǎn)單:如果你看到某提議的區(qū)塊擁有最多的工作量證明,就接受該區(qū)塊,這也被稱作最長(zhǎng)鏈規(guī)則。它的具體實(shí)現(xiàn)過(guò)程大家都很熟悉,本文就不再贅述了。
現(xiàn)在,讓我們看看使用同步性假設(shè)的系統(tǒng)(Finality,PoS 中使用較多)和使用非確定性機(jī)制的系統(tǒng)(Liveness,PoW 中使用較多)有什么不同。但需要提醒的是,并非所有的 PoS 都是 Finality 路線,比如 Casper FFG 就不是;而 PoW 也不是只能走 Liveness 路線,雖然并沒(méi)有人設(shè)計(jì) PoW 上的 Finality 共識(shí)。
PoW 和 PoS 的不同在于一個(gè)是 Work,一個(gè)是 Stake。之所以需要強(qiáng)調(diào)這一點(diǎn),是因?yàn)樵陉P(guān)于 PoW 和 PoS 的討論中,我們往往不是在討論 Work 機(jī)制與 Stake 機(jī)制的不同,而是在比較 Finality 系統(tǒng)與 Liveness 系統(tǒng)的不同。比如「無(wú)需許可」性,它基本是一個(gè) Finality 系統(tǒng)與 Liveness 系統(tǒng)的話題,而不是 Work 與 Stake 的爭(zhēng)論點(diǎn)。
讓我們回到有 12 個(gè)評(píng)審員的會(huì)議室。為了追求 Finality,每個(gè)評(píng)審員都需要了解其他每一個(gè)人的想法,也需要把自己的想法告訴其他每一個(gè)人,因此通信復(fù)雜度會(huì)隨著評(píng)審員人數(shù)的增加而迅速遞增,整個(gè)系統(tǒng)將因此不可用,所以必須控制陪審員的數(shù)量。
那么對(duì)于一個(gè)分布式系統(tǒng)而言就是,只挑選少數(shù)節(jié)點(diǎn)進(jìn)入會(huì)議室,由它們決定共識(shí),而其他節(jié)點(diǎn)只接受共識(shí)。因此這種系統(tǒng)中有三種角色,領(lǐng)導(dǎo)者、追隨者和學(xué)習(xí)者,領(lǐng)導(dǎo)者和追隨者是會(huì)議室中的評(píng)審員,他們需要好好工作,不然可能導(dǎo)致系統(tǒng)無(wú)法達(dá)成共識(shí)。
中本聰共識(shí)追求的是 Liveness,節(jié)點(diǎn) / 評(píng)審員不需要與其他的每一個(gè)節(jié)點(diǎn)溝通,它只需要與自己身邊的節(jié)點(diǎn)交流即可,因此通信復(fù)雜度不會(huì)因?yàn)楣?jié)點(diǎn)數(shù)量的增加而增加。你想成為評(píng)審員,就可以走進(jìn)會(huì)議室成為評(píng)審員,無(wú)需許可,也不會(huì)增加陪審團(tuán)達(dá)成共識(shí)的難度,同時(shí)你也可以不工作或隨時(shí)離開(kāi)。該系統(tǒng)中只有領(lǐng)導(dǎo)者和追隨者兩種角色,所有人都在那間會(huì)議室里參與共識(shí)。
這樣看來(lái)中本聰共識(shí)似乎更符合大家對(duì)分布式系統(tǒng)的開(kāi)放性的期望,但別忘了它之所以可以如此設(shè)計(jì),是因?yàn)闋奚?Finality,它的輸出結(jié)果是一個(gè)概率上的最終結(jié)果。
試想,你百分百在星巴克得到一杯咖啡,但星巴克并不能百分百收到錢(qián),這并不符合大多數(shù)人能理解的世界運(yùn)轉(zhuǎn)規(guī)則。所以非確定性機(jī)制有它自己的短板,以及不適合的場(chǎng)景。
另一方面,F(xiàn)inality 系統(tǒng)在保證了結(jié)果的確定性后,系統(tǒng)設(shè)計(jì)就要反過(guò)來(lái)追求 Liveness;而 Liveness 系統(tǒng)在保證了網(wǎng)絡(luò)的開(kāi)放性后,系統(tǒng)設(shè)計(jì)就要反過(guò)來(lái)追求 Finality。中本聰共識(shí)為了提高結(jié)果的確定性或安全性,就需要做出其他讓步,比如 TPS。
以比特幣為例。比特幣可以把出塊時(shí)間從 10 分鐘提高到 1 分鐘,TPS 會(huì)大幅提升,但 1 分鐘的時(shí)間不夠把消息傳遍全網(wǎng),系統(tǒng)中就會(huì)出現(xiàn)很多分叉,導(dǎo)致結(jié)果的可確定性變低;比特幣也可以把區(qū)塊大小從 1MB 提高到 100MB,TPS 也會(huì)提升,但大區(qū)塊對(duì)網(wǎng)絡(luò)和節(jié)點(diǎn)的要求高,會(huì)增加節(jié)點(diǎn)的進(jìn)入門(mén)檻從而帶來(lái)中心化,導(dǎo)致輸出結(jié)果容易被篡改。
所以你看,設(shè)計(jì)分布式系統(tǒng)就像與撒旦做交易,你得到一些,必然要交出一些。沒(méi)有最好的系統(tǒng),只有適合解決某類問(wèn)題的系統(tǒng);沒(méi)有單純的指標(biāo)比較,只有是在什么設(shè)定下實(shí)現(xiàn)這種指標(biāo)。
如果你理解了這一點(diǎn),這篇文章的目的就達(dá)到了,而我們對(duì)分布式系統(tǒng)的探索到此也就全部結(jié)束了。
六、更進(jìn)一步
本文是受《How Does Distributed Consensus Work?》一文啟發(fā)寫(xiě)成的,如果你想更進(jìn)一步了解分布式系統(tǒng),推薦這篇文章,它從專業(yè)的角度介紹了分布式共識(shí);同時(shí)推薦《WHAT WE TALK ABOUT WHEN WE TALK ABOUT DISTRIBUTED SYSTEMS》,它系統(tǒng)地羅列出了分布式系統(tǒng)的經(jīng)典論文。
來(lái)源: 鏈聞ChainNews?
評(píng)論
查看更多