在計(jì)算機(jī)科學(xué)領(lǐng)域,分布式一致性是個(gè)相當(dāng)重要且被廣泛探索與論證的問(wèn)題。對(duì)于區(qū)塊鏈分布式網(wǎng)絡(luò)而言,問(wèn)題的核心在于確保某個(gè)變更在分布式網(wǎng)絡(luò)中得到一致的執(zhí)行結(jié)果,是被多個(gè)參與方都承認(rèn)的。換句話說(shuō),這個(gè)信息是真實(shí)可信未被篡改的。
區(qū)塊鏈百科No.15:分布式一致性
熱力學(xué)第二定律告訴我們,
熵增過(guò)程是一個(gè)自發(fā)的由有序向無(wú)序發(fā)展的過(guò)程。
在物理學(xué)中,熵是描述一個(gè)系統(tǒng)內(nèi)在混亂程度的物理量。對(duì)于一個(gè)孤立的系統(tǒng)來(lái)說(shuō),在沒(méi)有外力干預(yù)做功的前提下,系統(tǒng)內(nèi)在混亂程度是會(huì)不斷增加的,也就是熵是增加的。這個(gè)并不難理解,就像我們?yōu)榱吮3址课菡麧?,定期必須打掃,要不然就?huì)越來(lái)越亂。
分布式系統(tǒng)就是一個(gè)典型的熵增過(guò)程。
在分布式系統(tǒng)中,要協(xié)調(diào)大量機(jī)器有序地完成任務(wù)并不是一件容易的事情。對(duì)于分布式系統(tǒng)而言,如果對(duì)于系統(tǒng)不加以外力的控制和干預(yù),系統(tǒng)將自主走向混亂和無(wú)序。換句話說(shuō),分布式一致性之所以重要,就是需要一步步厘清無(wú)序,通過(guò)使用相應(yīng)的策略和算法抵抗熵增,使整個(gè)系統(tǒng)達(dá)成共識(shí),保持有序和確定。
?
分布式系統(tǒng)中的問(wèn)題
要清楚理解分布式一致性,首先需要對(duì)分布式系統(tǒng)的特性有清晰的認(rèn)識(shí)?;蛘咄ㄋ桌斫?,在分布式系統(tǒng)中,我們可能會(huì)遇到哪些問(wèn)題呢?
Crash Fault 故障錯(cuò)誤
故障錯(cuò)誤是分布式環(huán)境中最常遇到的一類(lèi)問(wèn)題:比如網(wǎng)絡(luò)隨時(shí)可能會(huì)中斷;或者由于信道的不穩(wěn)定,消息的傳送出現(xiàn)延遲;以及物理機(jī)磁盤(pán)或CPU問(wèn)題,部分節(jié)點(diǎn)或者副本隨時(shí)會(huì)宕機(jī)、暫停運(yùn)行等。實(shí)際上,這些問(wèn)題都是由于物理硬件不可靠、不穩(wěn)定多帶來(lái)的一些必然風(fēng)險(xiǎn),也是分布式系統(tǒng)中必須考慮并解決的最基本的錯(cuò)誤。
Byzantine Fault 拜占庭錯(cuò)誤
如果說(shuō)上面的故障錯(cuò)誤,仍然有著非此即彼的假設(shè),并且不帶有主觀上刻意為之的含義。實(shí)際中還存在灰色地帶,就是網(wǎng)絡(luò)中可能存在作惡節(jié)點(diǎn),其會(huì)隨意篡改或偽造數(shù)據(jù),那么一致性問(wèn)題的難度就大幅增加。我們常把這類(lèi)存在“搗亂者”,可能會(huì)篡改或偽造數(shù)據(jù)或響應(yīng)信息的錯(cuò)誤,稱(chēng)之為拜占庭錯(cuò)誤(Byzantine Fault)。
?
解決一致性問(wèn)題的思路
通常而言,如果系統(tǒng)處于可信的內(nèi)部網(wǎng)絡(luò)環(huán)境中,大多時(shí)候只需要考慮故障錯(cuò)誤可能就足夠了。比如傳統(tǒng)的整個(gè)網(wǎng)絡(luò)體系是相對(duì)封閉的,又有多重防火墻的保護(hù),外界很難接入或攻擊;各個(gè)節(jié)點(diǎn)也是由公司統(tǒng)一部署的,機(jī)器或運(yùn)行的軟件遭到篡改的可能性極小。我們需要考慮的是網(wǎng)絡(luò)的延遲、不穩(wěn)定,以及機(jī)器隨時(shí)可能出現(xiàn)的宕機(jī)、故障。因此傳統(tǒng)分布式一致性算法是面向數(shù)據(jù)庫(kù)或文件的。
而在區(qū)塊鏈的分布式系統(tǒng)中,達(dá)成一致的共識(shí)機(jī)制是面向交易對(duì)或價(jià)值傳輸雙方。
顯然,我們此時(shí)面臨的挑戰(zhàn)更大了,除了要考慮通信網(wǎng)絡(luò)和機(jī)器硬件的不可靠之外,還必須要考慮和應(yīng)對(duì)系統(tǒng)中的“搗亂者”。因?yàn)樵谳^為開(kāi)放的網(wǎng)絡(luò),或者是完全開(kāi)放的網(wǎng)絡(luò)中,任何人都可以隨意接入到網(wǎng)絡(luò)中;而節(jié)點(diǎn)機(jī)器和上面部署的軟件也是由各個(gè)公司或個(gè)人自己提供和部署的,那么如果利益足夠大,很可能會(huì)有人對(duì)網(wǎng)絡(luò)中的某個(gè)節(jié)點(diǎn)發(fā)起攻擊、故意篡改軟件代碼改變其執(zhí)行邏輯、甚至可能故意篡改磁盤(pán)上持久化的數(shù)據(jù)。
?
分布式一致性的要求
從傳統(tǒng)的封閉分布式網(wǎng)絡(luò)環(huán)境中的一致性,到有權(quán)限控制的分布式場(chǎng)景中的一致性,再到區(qū)塊鏈網(wǎng)絡(luò)中的共識(shí)機(jī)制,我們面對(duì)的問(wèn)題越來(lái)越復(fù)雜,但規(guī)范的說(shuō),分布式的一致性算法應(yīng)該滿足:
可終止性(Termination):一致性的結(jié)果在有限時(shí)間內(nèi)能完成;
共識(shí)性(Consensus):不同節(jié)點(diǎn)最終完成決策的結(jié)果應(yīng)該相同;
合法性(Validity):決策的結(jié)果必須是其它進(jìn)程提出的提案。簡(jiǎn)單理解即達(dá)成的結(jié)果必須是節(jié)點(diǎn)執(zhí)行操作的結(jié)果,如影院共計(jì)100張票,如果兩個(gè)平臺(tái)分別賣(mài)出10張,那么達(dá)成的結(jié)果是還剩下80張,而不能說(shuō)賣(mài)光了。
從單純的數(shù)據(jù)一致性,到強(qiáng)調(diào)節(jié)點(diǎn)之間的共識(shí)與認(rèn)同,我們已經(jīng)走在路上,而該領(lǐng)域正在進(jìn)行的創(chuàng)新性積極探索,也必將讓世界變得更加可信。