區(qū)塊鏈正在試圖實(shí)現(xiàn)分散的新的數(shù)據(jù)存儲(chǔ)和組織結(jié)構(gòu)
Tanenbaum將分布式系統(tǒng)定義為“分布式系統(tǒng)是一組獨(dú)立的計(jì)算機(jī),它們看起來(lái)像是一個(gè)用戶的單一、連貫的系統(tǒng)”,在“分布式系統(tǒng)原理和范式”當(dāng)中。
區(qū)塊鏈,通過(guò)構(gòu)建一個(gè)全球性的分布式系統(tǒng),試圖實(shí)現(xiàn)分散的新的數(shù)據(jù)存儲(chǔ)和組織結(jié)構(gòu)。
首先,面向分布式系統(tǒng)的原因主要是可擴(kuò)展性、局部性和可用性。區(qū)塊鏈也不例外。地理可擴(kuò)展性,以形成用于信息保護(hù)的全局值存儲(chǔ)網(wǎng)絡(luò)/位置,包括非集中式結(jié)構(gòu)/零停機(jī)時(shí)間的可用性下的防篡改。這些都是用分布式系統(tǒng)實(shí)現(xiàn)的。
1.引言(一致性概述和一致性原因)
在分布式系統(tǒng)中,數(shù)據(jù)主要是為了“可靠性”和“性能”而復(fù)制的。復(fù)制是必需的,特別是如果分布式系統(tǒng)需要在數(shù)量上和地理上增長(zhǎng)。復(fù)制是縮放技術(shù)中的一種。此外,它還可以應(yīng)對(duì)數(shù)據(jù)損壞和副本崩潰。
此時(shí),需要保持?jǐn)?shù)據(jù)和副本的狀態(tài)的一致性。然而,這直接導(dǎo)致可擴(kuò)展性問題。當(dāng)你考慮一致性時(shí),理想的情況是“保持所有副本處于完全相同的狀態(tài)和操作”,即,實(shí)現(xiàn)了原子性,但這是一個(gè)相當(dāng)大的挑戰(zhàn)。
在現(xiàn)實(shí)中,我們不能解決可擴(kuò)展性問題,除非我們放棄一些一致性約束。因此,有必要了解系統(tǒng)需要多少一致性,以及如何實(shí)現(xiàn)一致性的程度。
在本章中,副本之間的一致性將按以下順序解釋。
有什么樣的一致性模型?
關(guān)于復(fù)制管理
-何時(shí)何地進(jìn)行復(fù)制
-誰(shuí)放置伺服器(客戶端)?服務(wù)器?)
如何保證拷貝之間的一致性
特定一致性協(xié)議實(shí)例及實(shí)現(xiàn)
2.以數(shù)據(jù)為中心的一致性模型
傳統(tǒng)上,主要從數(shù)據(jù)(數(shù)據(jù)存儲(chǔ))來(lái)討論一致性。
在分布式系統(tǒng)中,每個(gè)進(jìn)程都保存自己的本地副本。此時(shí),包括每個(gè)本地副本的存儲(chǔ)數(shù)據(jù)集合被稱為分布式數(shù)據(jù)存儲(chǔ)。
當(dāng)進(jìn)程從數(shù)據(jù)存儲(chǔ)中讀取時(shí),它期望最后寫入操作的結(jié)果作為數(shù)據(jù)返回。為了闡明哪一個(gè)是最后一個(gè)寫,我們把序關(guān)系稱為一致性。
如第1節(jié)所述,幾乎不可能保持完全一致性。允許某種程度的不一致導(dǎo)致兼容性與性能,但它取決于你的應(yīng)用程序,你可以容忍什么,你可以容忍多少。你應(yīng)該根據(jù)應(yīng)用程序、系統(tǒng)選擇一個(gè)一致性級(jí)別。因此,有必要首先理解什么樣的一致性存在。
順序一致性是最流行和最重要的一致性模型。偶然一致性是其弱變量。
2–1.序列一致性
當(dāng)滿足以下條件時(shí),數(shù)據(jù)存儲(chǔ)順序一致。
任何執(zhí)行序列的結(jié)果是,所進(jìn)程到數(shù)據(jù)存儲(chǔ)區(qū)的讀/寫操作與以特定順序特定順序執(zhí)行的結(jié)果相同,并且各個(gè)進(jìn)程的操作按其進(jìn)程所指定的順序執(zhí)行。
關(guān)鍵在于,當(dāng)比較每個(gè)過(guò)程的操作時(shí),它們處于完全相同的順序。
在下面的圖中,(a)順序一致,但是(b)不是因?yàn)樘幚鞵3和處理P4中的讀數(shù)順序不同。具體而言,在P3中,P1將由處理P2的寫入結(jié)果的值r(x)b改變?yōu)橹祌(x)a,但在P4中相反。
W(x)a表示寫入數(shù)據(jù)“x”的值“a”,R(x)b表示從數(shù)據(jù)“x”讀取值“b”。
2–2.偶然一致性
當(dāng)滿足以下條件時(shí),數(shù)據(jù)存儲(chǔ)是偶然一致的。
潛在因果關(guān)系的寫入必須按所有進(jìn)程以相同的順序來(lái)觀察。對(duì)于不同的機(jī)器,可以以不同的順序觀察并發(fā)寫入。
換句話說(shuō),它減少了序列一致性的約束,并且沒有因果關(guān)系的處理序列可以處于不同的順序。
此時(shí),每個(gè)操作取決于哪些操作(其中兩個(gè)操作是否具有因果關(guān)系)非常重要,為此,使用“向量時(shí)間戳”是有效的。
在下面的圖中,在上面的圖中,由于值“b”和值“c”的寫入是并行操作,因此它滿足因果一致性。
2–3.入口一致性
首先,準(zhǔn)備同步變量。通過(guò)獲取同步變量并僅允許具有同步變量的進(jìn)程更新數(shù)據(jù),還可以保持一致性。這就是所謂的“條目一致性”。
為了保持條目的一致性,同步變量在獨(dú)占模式訪問時(shí)不應(yīng)該有兩個(gè)所有者,比如寫入。在可讀但不可寫的非排他模式中,多個(gè)進(jìn)程可以同時(shí)擁有同步變量。
在下面的圖中,由于Process2不擁有對(duì)數(shù)據(jù)項(xiàng)“y”的訪問權(quán)(=同步變量),所以讀取結(jié)果變成NIL。
此時(shí),如何正確地關(guān)聯(lián)數(shù)據(jù)和同步變量成為一個(gè)問題。在面向?qū)ο蟮那闆r下,可以通過(guò)隱式地將同步變量與每個(gè)對(duì)象相關(guān)聯(lián)來(lái)實(shí)現(xiàn)。
3.以客戶為中心的一致性模型
最終一致性和以客戶為中心的一致性模型
一般來(lái)說(shuō),過(guò)程之間的不一致在某種程度上是可以接受的。例如,在Web緩存中,響應(yīng)客戶機(jī)的緩存頁(yè)面可能比實(shí)際存在的Web服務(wù)器版本要舊。然而,對(duì)于許多用戶來(lái)說(shuō),這種不一致在某種程度上是可以接受的。
即使如上所述的不一致,隨著時(shí)間的推移,所有的副本也將逐漸變得一致。這種形式的一致性被稱為最終一致性。
只有客戶端總是訪問相同的副本,最終一致的數(shù)據(jù)存儲(chǔ)才正常工作。然而,如果移動(dòng)用戶在短時(shí)間內(nèi)移動(dòng)和訪問不同的副本,又會(huì)怎樣呢?例如,如果你使用Express, 客戶端將在短時(shí)間內(nèi)移動(dòng)到另一個(gè)位置并訪問不同的副本,但是在這里,除非已經(jīng)傳播了之前完成的更新,否則它看起來(lái)是不一致的。
對(duì)于上述問題,引入以客戶為中心的一致性是一種解決方案。與前一節(jié)中的以數(shù)據(jù)為中心的一致性模型不同,該模型旨在保證單個(gè)客戶端的一致性。
單調(diào)閱讀
下面的句子是滿足單調(diào)閱讀一致性的條件。
如果進(jìn)程讀取數(shù)據(jù)項(xiàng)x,則該進(jìn)程對(duì)x的任何后續(xù)讀取要么使用相同的值進(jìn)行應(yīng)答,要么使用更新的值進(jìn)行應(yīng)答。
在下面的圖中,在(b)中,不能保證寫入操作WS(x1)的內(nèi)容包含在L2的讀取結(jié)果中,因此不存在單調(diào)的讀取一致性。
無(wú)論何時(shí)在任何地方連接到郵件服務(wù)器,都保證在訪問服務(wù)器時(shí)直到最后一次都可以讀取的所有郵件在目的地讀取。
單調(diào)令狀
下面的句子是滿足單調(diào)寫作一致性的條件。
通過(guò)一個(gè)進(jìn)程到數(shù)據(jù)項(xiàng)X的寫入操作在同一進(jìn)程的任何后續(xù)寫入到X之前完成。
單調(diào)寫入一致性類似于以數(shù)據(jù)為中心的FIFO一致性。FIFO一致性的本質(zhì)是以相同的順序進(jìn)行寫入操作,其順序是正確的。在單調(diào)寫入一致性中,它是相同的順序約束,但是僅針對(duì)單個(gè)進(jìn)程,而不是并發(fā)進(jìn)程集合。
讀寫你編寫的文章
以下句子是在寫作后滿足閱讀一致性的條件。
通過(guò)對(duì)同一過(guò)程的后續(xù)讀取操作,總是觀察到對(duì)數(shù)據(jù)項(xiàng)X的寫入操作的結(jié)果。
也就是說(shuō),寫入操作總是在相同進(jìn)程執(zhí)行的后續(xù)讀取操作之前完成,而不管在哪里完成。
示例1:在更新網(wǎng)頁(yè)之后,新瀏覽器內(nèi)容將始終顯示在瀏覽器中。
示例2:當(dāng)密碼被更新時(shí),保證更新的密碼可以在你移動(dòng)到的地方使用。
寫后續(xù)閱讀
以下句子是閱讀后滿足寫作一致性的條件。
通過(guò)對(duì)同一過(guò)程的后續(xù)讀取操作,總是觀察到對(duì)數(shù)據(jù)項(xiàng)X的寫入操作的結(jié)果。
4. 復(fù)制管理
到目前為止,我們已經(jīng)詳細(xì)地解釋了一致性的類型。在本節(jié)中,我們將解釋復(fù)制安排、放置副本的位置、時(shí)間、時(shí)間和方式,以及如何實(shí)現(xiàn)一致性。
復(fù)制放置有兩種類型:
1. 復(fù)制服務(wù)器放置問題
2. 內(nèi)容放置問題
4–1.復(fù)制服務(wù)器布局問題
對(duì)于服務(wù)器放置問題,有一種方法基于客戶端和服務(wù)器之間的距離來(lái)安排它。距離可以通過(guò)傳輸延遲和帶寬來(lái)測(cè)量。選擇一個(gè)服務(wù)器是很好的,使得服務(wù)器和客戶端之間的平均距離最小化。
作為另一種選擇,有一種考慮網(wǎng)絡(luò)拓?fù)涞姆椒?。將服?wù)器放置在具有最大網(wǎng)絡(luò)接口數(shù)(即鏈路)的路由器上是很好的方法。
它們的問題是大量的計(jì)算復(fù)雜度。它不能容忍在“閃光云”(一個(gè)特定地點(diǎn)的突然爆炸請(qǐng)求)時(shí)的計(jì)算。此時(shí),有一些解決方案來(lái)提高效率,例如通過(guò)劃定區(qū)域?qū)ふ易罱咏膮^(qū)域。
4–2.內(nèi)容復(fù)制與布局
關(guān)于內(nèi)容,三種不同類型的副本被區(qū)分和組織,如下圖所示。
永久復(fù)制品
這是組成分布式數(shù)據(jù)存儲(chǔ)區(qū)的初始副本集。在許多情況下,永久性復(fù)制品的數(shù)量很小。
服務(wù)器啟動(dòng)副本
通過(guò)啟動(dòng)數(shù)據(jù)存儲(chǔ)區(qū)所有者生成的用于提高性能的數(shù)據(jù)存儲(chǔ)的副本。動(dòng)態(tài)放置復(fù)制意味著動(dòng)態(tài)地將性能需要改進(jìn)的文件復(fù)制到Web托管服務(wù)中的服務(wù)器。
例如,對(duì)于紐約的web服務(wù)器,如果在遠(yuǎn)離服務(wù)器的某個(gè)意外位置的客戶端幾天內(nèi)請(qǐng)求的數(shù)量爆炸性的增加,則臨時(shí)在該區(qū)域放置副本是有效的。
客戶端啟動(dòng)副本
這通常被稱為客戶端緩存。這僅用于改善對(duì)數(shù)據(jù)的訪問時(shí)間。當(dāng)需要讀取相同的數(shù)據(jù)時(shí),將副本僅保存在客戶端有限時(shí)間的緩存函數(shù)是有效的。
4–3.內(nèi)容分發(fā)
復(fù)制管理還包括將更新內(nèi)容傳遞到復(fù)制服務(wù)器(如何更新)。
要傳播的信息類型
實(shí)際傳播的信息有三種可能性。
只傳播通知更新
將更新數(shù)據(jù)從一個(gè)副本發(fā)送到另一個(gè)副本
將更新操作傳播到其他副本
1通知的傳播是通過(guò)無(wú)效通知協(xié)議來(lái)完成的。你只能注意到副本信息不再有效。有利地,它使用很少的網(wǎng)絡(luò)帶寬,并且當(dāng)副本不需要頻繁更新時(shí)使用它。
2是在副本之間傳輸更新的數(shù)據(jù)。更新往往更有效和實(shí)用。
3只通知應(yīng)該執(zhí)行什么類型的更新操作。此時(shí),可以假設(shè)每個(gè)副本始終具有保持?jǐn)?shù)據(jù)最新的能力,因此一致性從1得到改進(jìn)。
拉與推
有兩種方法的更新傳播,拉和推。
當(dāng)讀/寫比率高時(shí),效率更好,因?yàn)楫?dāng)從服務(wù)器推送更新時(shí),保持一致性。
另一方面,當(dāng)讀寫比低時(shí),高更新頻率會(huì)浪費(fèi)帶寬等資源,因此拉動(dòng)更合適。
推拉有以下特點(diǎn)。
*輪詢:用于平滑地鏈接多個(gè)設(shè)備和軟件的控制方法之一,用于主系統(tǒng)詢問其他系統(tǒng)是否存在定期間隔的方法。
單播與多播
通過(guò)使用組播,可以有效地實(shí)現(xiàn)基于推送的方法。相反,單播是基于拉的方法最有效的解決方案。
5.一致性協(xié)議
在這一節(jié)中,我們將具體檢查具體的協(xié)議。
5–1.基本基礎(chǔ)協(xié)議
主要基礎(chǔ)協(xié)議通常用于實(shí)現(xiàn)順序一致性。在該協(xié)議中,與項(xiàng)目X相關(guān)聯(lián)的主服務(wù)器負(fù)責(zé)地執(zhí)行其寫入操作。
主要基礎(chǔ)協(xié)議有兩種方式。
?確認(rèn)主服務(wù)器到特定服務(wù)器的方法
?在將主服務(wù)器移動(dòng)到啟動(dòng)寫入操作的服務(wù)器之后執(zhí)行寫操作的方法
5–1–1.遠(yuǎn)程寫入?yún)f(xié)議
所有的寫入操作被傳輸?shù)焦潭ǖ膯蝹€(gè)主服務(wù)器并執(zhí)行。在遠(yuǎn)程寫協(xié)議(主備份協(xié)議)中,它直接實(shí)現(xiàn)了順序一致性,因?yàn)橹鞣?wù)器可以按照全局唯一時(shí)間順序?qū)λ袑戇M(jìn)行排序。
(然而,該協(xié)議具有相對(duì)長(zhǎng)的等待時(shí)間的性能問題,這通過(guò)采用非阻塞方法得到改進(jìn),但是是更新可靠性的折衷。)
5–1–2.本地寫協(xié)議
一種移動(dòng)權(quán)限的協(xié)議,以便運(yùn)行寫操作的服務(wù)器可以作為主副本操作。它被應(yīng)用到許多分布式存儲(chǔ)系統(tǒng)中。
5–2。復(fù)制寫協(xié)議
在主基本復(fù)制中,對(duì)一個(gè)副本執(zhí)行寫操作,但是在復(fù)制寫協(xié)議中,對(duì)多個(gè)副本執(zhí)行寫操作。
復(fù)制的寫協(xié)議有兩種方式,
?主動(dòng)復(fù)制協(xié)議將操作指令傳輸?shù)剿懈北?/p>
?基于多數(shù)表決的一致性協(xié)議
5–2–1 主動(dòng)復(fù)制協(xié)議
每個(gè)副本具有執(zhí)行更新操作的過(guò)程,并且執(zhí)行寫入操作。此時(shí),所有RePCAS必須以相同的順序執(zhí)行操作。
利用Lamport時(shí)鐘的全序組播可以實(shí)現(xiàn)訂購(gòu),但是很難將規(guī)模擴(kuò)展到大型分布式系統(tǒng),通常使用中央?yún)f(xié)調(diào)器或定序器來(lái)實(shí)現(xiàn)全序化。
5–2–2 恒基協(xié)議
這是用投票實(shí)現(xiàn)的復(fù)制操作。基本上,在執(zhí)行數(shù)據(jù)項(xiàng)的讀寫之前,向多個(gè)復(fù)制服務(wù)器發(fā)出操作請(qǐng)求許可,并且當(dāng)獲得許可時(shí)執(zhí)行該操作。
此時(shí),如果N是服務(wù)器的數(shù)量,NR是讀取常數(shù),NW是寫入常數(shù),那么我們有以下限制:
1。NW+NR》 N
2。NW》 N/2
當(dāng)滿足這兩種情況時(shí),可以防止閱讀和寫作比賽和寫作比賽。這兩個(gè)常數(shù)根據(jù)每個(gè)讀/寫的頻率進(jìn)行優(yōu)化。
5–3 緩存一致性協(xié)議
與前兩個(gè)不同的是,一致性由客戶端控制,而不是服務(wù)器。緩存一致性協(xié)議可以分為幾種設(shè)計(jì)方法。
首先,根據(jù)檢測(cè)不一致的情況,可以將其劃分如下。
?在交易期間訪問緩存的數(shù)據(jù)項(xiàng)時(shí)驗(yàn)證一致性的情況
?你希望交易在驗(yàn)證數(shù)據(jù)項(xiàng)時(shí)繼續(xù)進(jìn)行的情況。
?只有在交易提交時(shí)才驗(yàn)證一致性。
接著,根據(jù)副本之間保持一致性的方法,將其劃分如下。
?更新時(shí),服務(wù)器總是使所有緩存無(wú)效。
?當(dāng)簡(jiǎn)單地傳播更新時(shí)
在許多情況下,更新操作僅由服務(wù)器完成,并且更新由客戶端從拉基傳播。
還有一種類似于主基本地寫協(xié)議的方法,它允許客戶端修改緩存的數(shù)據(jù)。該方法用于分布式文件系統(tǒng),稱為寫通緩存方法。此時(shí),為了保證順序一致性,客戶端需要保留獨(dú)占的寫權(quán)限。如果延遲更新的電磁波,并在通知服務(wù)器之前允許多次寫入,則可以進(jìn)一步提高性能,這稱為回寫緩存。
6. 區(qū)塊鏈的一致性
正如我們提到的,為了在分布式系統(tǒng)中保持過(guò)程和數(shù)據(jù)之間的一致性,需要各種各樣的獨(dú)創(chuàng)性。
通常,在大型分布式系統(tǒng)中保持一致性是一項(xiàng)非常艱難的任務(wù)。區(qū)塊鏈確實(shí)是實(shí)現(xiàn)分布式系統(tǒng)的精確機(jī)制,但它是一種新技術(shù),通過(guò)其將區(qū)塊連接在鏈中的基本體系可以實(shí)現(xiàn)完全順序一致性。
6–1 區(qū)塊鏈序列一致性
在區(qū)塊鏈中,兩個(gè)交易之間的順序總是一致的。例如,在比特幣的情況下,關(guān)于某個(gè)比特幣的交易的命令,例如A的UTXO轉(zhuǎn)移到B,然后B通過(guò)該UTXO向C付款,在每個(gè)節(jié)點(diǎn)上是一致的。這是由于包含交易的區(qū)塊在鏈上連接的特點(diǎn)。此外,這是由于比特幣的特性使得對(duì)于創(chuàng)建新區(qū)塊達(dá)成了共識(shí),并且除非交易與過(guò)去的交易一致,否則不會(huì)批準(zhǔn)交易。
從上面的特性中可以看出,缺省情況下,對(duì)于所有節(jié)點(diǎn)中的區(qū)塊鏈上的交易,都保持順序一致性。通過(guò)這種方式,可以說(shuō)區(qū)塊鏈通過(guò)一種非常簡(jiǎn)單的機(jī)制來(lái)實(shí)現(xiàn)分布式系統(tǒng)及其一致性。
然而,考慮到鏈鏈的一致性更精確,可以說(shuō)它是相當(dāng)不一致的一致性。為了進(jìn)一步考慮,我想首先確認(rèn)CAP定理。
6–2 CAP定理與區(qū)塊鏈
“CAP定理”是Brewer在2000年預(yù)測(cè)并隨后由Gilbert等人制定和驗(yàn)證的分布式系統(tǒng)的性質(zhì)。CAP定理指出,分布式系統(tǒng)可以滿足一致性、可用性和碎片化兩個(gè)系統(tǒng),但不能同時(shí)滿足這三個(gè)系統(tǒng)。
在采用PoW作為協(xié)商一致算法(如比特幣)的許可較少的公共區(qū)塊鏈中(詳細(xì)信息在“區(qū)塊鏈比較公共私有聯(lián)合體類型”的文章中),它處于可用性和分區(qū)容忍性的高標(biāo)準(zhǔn)中。即使某些節(jié)點(diǎn)出現(xiàn)故障,區(qū)塊鏈網(wǎng)絡(luò)仍然繼續(xù)移動(dòng)(可用性),即使網(wǎng)絡(luò)斷開,它也可以通信(分區(qū)容忍)。另一方面,在一致性方面則是不完善的。如前節(jié)所述,盡管交易的順序一致性的確是隨著時(shí)間推移而建立的,但是在PoW.每個(gè)小號(hào)都在自己的時(shí)間廣播,當(dāng)他們找到一個(gè)隨機(jī)數(shù)和更新到最新的狀態(tài),所以頻繁的叉子發(fā)生。將其應(yīng)用于CAP定理,我們?cè)谝欢ǔ潭壬线x擇了可用度和劃分容限和犧牲一致性。
然而,隨著時(shí)間的推移,它的一致性將變得更加確定。盡管沒有終結(jié)性的事實(shí)仍然被當(dāng)作一個(gè)問題來(lái)討論,即使討論仍在進(jìn)行中,它是一個(gè)極好的系統(tǒng),它隨時(shí)間保持完全的順序一致性,并且還具有抗篡改性。這就是為什么區(qū)塊鏈技術(shù)在當(dāng)今世界越來(lái)越受到關(guān)注的原因之一。
Seth Gilbert和Nancy Lynch。Brewer猜想和一致性、可用性、可區(qū)分性的Web服務(wù)的可行性。
6–3 區(qū)塊鏈與復(fù)制管理
正如我們?cè)诒疚闹刑岬降?,在運(yùn)行分布式系統(tǒng)時(shí),復(fù)制管理的問題很重要;在何時(shí)、由誰(shuí)來(lái)管理復(fù)制,應(yīng)采取何種機(jī)制來(lái)確保復(fù)制之間的一致性。那么,如何在連區(qū)塊鏈中進(jìn)行復(fù)制管理呢?
首先,關(guān)于副本服務(wù)器放置問題。通常,在考慮服務(wù)器布局問題時(shí),我們發(fā)現(xiàn)最有效的布局是基于通信集中的位置等。然而,諸如比特幣之類的區(qū)塊鏈正在進(jìn)行非集中式管理,這取決于每個(gè)參與者是否以全部節(jié)點(diǎn)的形式加入網(wǎng)絡(luò)。也就是說(shuō),難以全面靈活地安排系統(tǒng)。
那么,副本之間的更新內(nèi)容的分布是如何操作?正如我們所提到的,在更新時(shí)信息傳播的可能性有三種。
1. 只傳播通知更新
2. 將更新數(shù)據(jù)從一個(gè)副本發(fā)送到另一個(gè)副本
3. 將更新操作傳播到其他副本
在區(qū)塊鏈中,為了防止分叉或篡改,希望所有節(jié)點(diǎn)盡可能保持網(wǎng)絡(luò)上的最新信息。此外,因?yàn)橹挥凶铋L(zhǎng)的鏈條被認(rèn)為是合法的鏈,所以設(shè)計(jì)一個(gè)激勵(lì)結(jié)構(gòu),使所有礦工能夠快速捕獲最新區(qū)塊的信息,以便盡快找到下一個(gè)現(xiàn)值。由于上述原因,在區(qū)塊鏈中,更新數(shù)據(jù)本身在副本之間傳輸,并且盡快執(zhí)行更新內(nèi)容的交換。也就是說(shuō),“傳播更新操作到其他副本”是區(qū)塊鏈中所選擇的方法。
此外基本上,非集中式系統(tǒng)區(qū)塊鏈,通過(guò)P2P通信來(lái)執(zhí)行。組播主要用于區(qū)塊鏈網(wǎng)絡(luò)中的P2P通信。
首先,當(dāng)?shù)V工發(fā)現(xiàn)一個(gè)臨時(shí)值時(shí),立即對(duì)所有網(wǎng)絡(luò)參與者執(zhí)行基于推送的多播。礦工在收集來(lái)自其他驗(yàn)證器的確認(rèn)之后,通過(guò)盡快通知礦工自己找到的新的區(qū)塊,試圖創(chuàng)建新區(qū)塊而得到報(bào)酬。
新加入網(wǎng)絡(luò)的節(jié)點(diǎn)和斷開連接并重新加入的節(jié)點(diǎn)執(zhí)行基于拉的多播以同步網(wǎng)絡(luò)的最新信息。為了防止表單被欺騙而受到雙重篡改等,客戶端試圖盡可能地獲取最新數(shù)據(jù),同時(shí)試圖盡可能地與多個(gè)節(jié)點(diǎn)通信。
此外,對(duì)于可靠的完整節(jié)點(diǎn),存在基于拉協(xié)議的單播客戶端,并捕獲應(yīng)用程序中的最新數(shù)據(jù)。
6–4. 區(qū)塊鏈與主基協(xié)議
在區(qū)塊鏈中,節(jié)點(diǎn)分散在世界各地,副本分散在所有區(qū)域。在POW一致性的情況下,每個(gè)交易都是由第一個(gè)找到下一個(gè)NoCE的節(jié)點(diǎn)新編寫的。也就是說(shuō),每個(gè)交易都有與其相關(guān)的主服務(wù)器。
由此,我們可以得出結(jié)論,用于維護(hù)區(qū)塊鏈一致性的POW協(xié)議被歸類為5–1–2中描述的主基協(xié)議的本地寫協(xié)議。在比特幣區(qū)塊鏈中,作為主服務(wù)器的寫權(quán)限是通過(guò)查找PoW的nonce值作為獨(dú)占控制/領(lǐng)導(dǎo)選擇算法獲得的;查找頭上有N個(gè)數(shù)字0的散列的nonce值的算法是每個(gè)區(qū)塊的權(quán)利。然而,當(dāng)一個(gè)具有同時(shí)成為主服務(wù)器的權(quán)限的節(jié)點(diǎn)同時(shí)出現(xiàn)時(shí),BooStand會(huì)做分叉。
6–5. 區(qū)塊鏈和新的復(fù)制寫協(xié)議
另一方面,包括Tendermint在內(nèi)的各種基于PBFT的協(xié)商一致算法沒有首先負(fù)責(zé)地執(zhí)行更新每個(gè)數(shù)據(jù)的主服務(wù)器。它們沒有權(quán)利為每個(gè)應(yīng)用程序中的其他副本寫操作,并且保留該權(quán)限僅限于參與協(xié)商算法的節(jié)點(diǎn),然而,所有參與節(jié)點(diǎn)可以在同一時(shí)間段內(nèi)執(zhí)行寫操作。換句話說(shuō),PBFT類型一致性協(xié)議接近復(fù)制類型的主動(dòng)復(fù)制協(xié)議。
主動(dòng)復(fù)制協(xié)議的主要挑戰(zhàn)之一是難以在所有副本中以相同的順序執(zhí)行操作。雖然這可以通過(guò)使用Lamport的邏輯時(shí)鐘執(zhí)行全序多播來(lái)解決,但是因?yàn)楹茈y擴(kuò)大規(guī)模,所以通常需要中央?yún)f(xié)調(diào)器的支持。Hyperledger中的PBFT算法與此表單完全相同,值得信任的組織成為管理區(qū)塊更新順序的領(lǐng)導(dǎo)者(Order)。
另一方面,Tendermint使用獨(dú)特的Tenderimint一致性,該一致性引入了三相提交格式,以保持總訂單的一致性。為了進(jìn)一步解釋,“在形成區(qū)塊鏈的分布式系統(tǒng)中的容錯(cuò)性”是一種全新的革命性的主動(dòng)復(fù)制協(xié)議,并且實(shí)現(xiàn)了完整性。