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