區(qū)塊鏈分片技術研究(1)— 技術解析區(qū)塊鏈
分片技術(Sharding)作為以太坊未來擴容方案的一部分,引起了廣泛的市場關注。同時也有多個主打分片技術的新公有鏈項目加入了競爭,比如Zilliqa,Rchain,Quarkchain等,使這項技術在行業(yè)中的熱度越來越高。
面對公有鏈目前存在的低吞吐量的性能瓶頸,許多公有鏈項目都提出了不同的擴容方案。從方向上來說,可以分為鏈上擴容和鏈下擴容兩個方向,分片技術是屬于鏈上擴容的一種方案。
分片技術(Sharding)作為以太坊未來擴容方案的一部分,引起了廣泛的市場關注。同時也有多個主打分片技術的新公有鏈項目加入了競爭,比如Zilliqa, Rchain, Quarkchain等,使這項技術在行業(yè)中的熱度越來越高。
這篇文章作為區(qū)塊鏈分片技術研究的第一部分將會介紹分片技術的概念。
一、什么是分片
分片技術的概念要比區(qū)塊鏈技術早得多,最早是在傳統(tǒng)的數據庫領域里面提出的,主要用于大型商業(yè)數據庫的優(yōu)化。其概念就是將大型數據庫中的數據劃分成很多數據分片(shard),再將這些數據分片分別存放在不同的服務器中,以減小每個服務器的數據訪問壓力,從而提高整個數據庫系統(tǒng)的性能。
簡單來說,分而治之是分片技術的核心思想。
而把分片技術運用到區(qū)塊鏈網絡中的思想是將擁有許多節(jié)點的區(qū)塊鏈網絡劃分成若干個子網絡,每個子網絡中包含一部分節(jié)點,也就是一個“分片”(shard)。同時網絡中的交易也會被劃分到不同的“分片”中去處理,這樣每個節(jié)點只需要處理一小部分傳入的交易,不同的節(jié)點可以并行處理交易,即可增加交易處理和驗證的并發(fā)度,從而提升整個網絡的吞吐量。
傳統(tǒng)的老牌公有鏈大部分都是單鏈結構,所有礦工都在相互競爭去延伸下一個區(qū)塊。由于產生區(qū)塊的平均時間是固定的,例如比特幣平均每10分鐘產生一個區(qū)塊,隨著越來越多的礦工加入挖礦行列,挖抗難度得到提升,以保證每10分鐘產生一個區(qū)塊。但是,隨著投入更多的礦機,整個系統(tǒng)的吞吐量并沒有得到提升。比特幣處理交易過程如下圖所示:
傳統(tǒng)比特幣交易處理示意圖
在引入分片技術之后,隨著整個網絡算力的線性提升(即節(jié)點數增加),分片的數量也會增加,進而提高了交易處理的并發(fā)度,整個網絡的吞吐量也會線性提升。這個特點被稱為可擴展性,又被稱為水平擴容屬性。分片網絡處理交易過程如下圖所示:
分片網絡處理交易過程示意圖
分片技術給區(qū)塊鏈網絡帶來了如下好處:
1.從理論上講,分片技術可以提高交易處理和確認的并發(fā)度,進而可以對整個網絡的吞吐量提高幾十倍甚至上百倍;
2.吞吐量成倍的增加,使得交易擁堵的問題得以有效的解決,有助于轉賬手續(xù)費的降低;
3.整個網絡的吞吐量大幅提升,改變了人們對于加密貨幣支付效率低的看法,這將很大程度上促進dApp的發(fā)展,使得更多的dApp在分片網絡上運行。雖然單筆交易手續(xù)費降低了,但是總體會提升挖礦收益,從而形成良性循環(huán)。
4.經典的以太坊公鏈狀態(tài)信息都存儲在區(qū)塊鏈上,每個節(jié)點將保存全部的狀態(tài)信息,這使得它的存儲空間變得非常昂貴。狀態(tài)分片具有很好的存儲空間可擴展性,它的實現(xiàn)將極大地解決存儲空間昂貴的問題。
二、網絡分片、交易分片、狀態(tài)分片
分片技術根據不同的分片機制可以劃分為三種:網絡分片(network sharding),交易分片(transaction sharding),狀態(tài)分片(state sharding)。
1.網絡分片
網絡分片是最基礎的一種分片方式,就是將整個區(qū)塊鏈網絡劃分成多個子網絡,也就是一個分片。網絡中的所有分片并行處理網絡中不同的交易。
這里主要涉及到的問題是哪些節(jié)點應該被分配到哪些分片當中。
網絡節(jié)點應該如何分片
⑴通過VFR來生成隨機性
由于網絡分片的特點是多個分片并行處理,提高并發(fā)度的代價是每個分片處理的交易之間沒有冗余或者只有較少的冗余,一個分片中的處理結果將很可能決定了整個網絡的處理最終結果。因此如果一個分片中的大量節(jié)點被一些人控制,那么這些被控制的大量節(jié)點完全可以左右這個分片的處理結果,從而威脅到整個網絡的安全性。
因此,開發(fā)者需要一個合適的機制來對網絡節(jié)點進行劃分,以確定哪些節(jié)點可以安全地保留在哪些分片中,從而避免那些控制大量特定分片的人所發(fā)起的攻擊 。
而防止一些人控制大量特定分片的最好方式就是建立隨機性。在區(qū)塊鏈領域建立隨機性的方式主要是利用可驗證隨機函數(VFR, Verifiable Random Function),即一種非對稱加密算法中的hash函數。利用隨機性,網絡可以隨機抽取節(jié)點形成分片。這樣一種隨機抽樣的方式可以防止惡意節(jié)點過度填充單個分片。
某分片被人控制的后果
⑵ 可通過傳統(tǒng)共識算法在分片中達成共識
然而,僅僅使用隨機機制將節(jié)點分配給分片是不夠的,我們還必須要確保網絡的一個分片中不同成員意見的一致性,即如何達成共識。達成共識的算法可以選擇我們熟知的POW、POS、pBFT等共識機制。 為了在分片的同時不失去去中心化特性,開發(fā)者需要盡可能地提高每個分片中節(jié)點的數量。
一個特定分片內節(jié)點達成共識示意圖
2.交易分片
由于網絡分片是其他所有分片的基礎,因此交易分片的前提是先進行網路分片。交易分片主要涉及的問題是哪些交易應該按照特定的屬性被分配到哪些碎片當中。
⑴ 基于UTXO的賬本系統(tǒng)
在基于UTXO的賬本系統(tǒng)中,一筆交易可能由多個輸入和多個輸出構成,我們沒有辦法按照地址進行交易分片來有效地避免雙花問題。比較直觀的交易分片方式是按照交易的hash值最后幾位進行分片。
假設我們有4個分片,那么我們就按照交易hash值的最后兩位比特進行分片。例如,一筆交易的hash值最后兩位是10,則我們將該交易分配到第3個分片中進行處理(兩位比特的值00,01,10,11分別對應于第1、2、3、4分片區(qū))。
而如果這個時候交易的發(fā)起者同時又發(fā)起了另一筆交易,和之前的交易具有相同的輸入,但是輸出卻不同,而該交易hash值的最后兩位是00,那么該交易則被分配到了第一個分片中進行處理。
如果不采取任何措施,這兩筆交易將同時在兩個分片當中進行處理和驗證,這將導致一筆雙花交易。
基于UTXO系統(tǒng)的交易分片示意圖
為了防止雙花交易,分片1和分片3不得不進行通信,來達到信息的交互。而實際過程中,這種交易的hash值是隨機的,系統(tǒng)必須保證每個分片之間都進行信息的交互。而實際上,這種相互之間的通信可能會破壞交易分片的整個目的。
⑵基于賬戶系統(tǒng)
在基于賬戶系統(tǒng)中,上述問題可以得到很好的解決。即一筆交易只有一個輸入,而輸入的地址將被記錄在賬戶系統(tǒng)中。該賬戶系統(tǒng)在交易分片的每個分片中是全局可見的,因此我們只需要將交易按照發(fā)送者的地址進行分片,即可保證同一個賬戶發(fā)出的多筆交易將被在同一個分片當中被處理,這樣該分片可以有效的檢測雙花交易而不需要復雜的跨分片的通信。
3.狀態(tài)分片
在所有的分片當中,狀態(tài)分片是最具挑戰(zhàn)的分片方式。狀態(tài)分片的關鍵是將整個存儲區(qū)分開,讓不同的分片存儲不同的部分,每個節(jié)點只負責托管自己的分片數據,而不是存儲完整的區(qū)塊鏈狀態(tài)。狀態(tài)分片可以減少狀態(tài)的冗余存儲,使得整個區(qū)塊鏈網絡具有存儲的可擴展性。
⑴ 跨分片信息通信不可避免
在賬戶型系統(tǒng)中,狀態(tài)分片是按照賬戶的地址進行分片的,并且一個特定的分片只會保留一部分狀態(tài),而不像是交易分片那樣每個節(jié)點都保存整個網絡中的所有狀態(tài)。
假設A創(chuàng)建了一筆交易,將支付B一筆錢。這筆交易將由第一個分片進行處理,一旦該筆交易被驗證,關于B的新余額的信息就必須與他所在的分片進行共享。如果這兩個帳戶由不同的分片進行處理,那么這可能需要進行頻繁的跨分片通信和狀態(tài)交換??绶制ㄐ趴赡苡謺档蜖顟B(tài)分片的性能。
⑵數據的可用性是必須考慮的問題
狀態(tài)分片的第二個挑戰(zhàn)是數據的可用性。我們必須考慮這樣的場景:由于某種特定的原因,一些特定的分片遭到了攻擊而導致其脫機。由于分片并沒有復制系統(tǒng)的全部狀態(tài),所以網絡不能再驗證那些依賴于脫機分片的交易。
解決此問題的方法是維護存檔或進行節(jié)點備份,這樣就能幫助系統(tǒng)進行故障修復以及恢復那些不可用的數據。但是,這樣就使得一些節(jié)點將不得不存儲系統(tǒng)的整個狀態(tài),同時這還會引發(fā)一些中心化的風險。
⑶網絡節(jié)點調整需要逐步進行
任何分片機制中需要考慮的另一個要點是,確保分片在抵御攻擊和失敗時是具有彈性的,網絡分片必須接受新的節(jié)點并以隨機的方式將這些分配給不同的分片。簡而言之,網絡必須能夠在一段時間內進行節(jié)點的重新分配。
在狀態(tài)分片的情況下,重新分配節(jié)點是非常困難的。由于每個分片只保留了狀態(tài)的一部分,所以在一次重新調整網絡的過程中,必須要防止調整過大而導致在同步完成前可能會出現(xiàn)的整個系統(tǒng)失效的問題。為了防止系統(tǒng)的中斷,我們必須對網絡進行逐步調整,以確保每個分片在所有節(jié)點被清空前仍有足夠多的舊節(jié)點。
而新節(jié)點在加入分片之前,需要等待同步完該分片中的狀態(tài)信息之后才可以正式加入分片并提供算力。
值得注意的是,一條公鏈可能會同時使用多種分片技術,它們之間并不互相矛盾。從網絡分片到交易分片再到狀態(tài)分片,在技術實現(xiàn)難度上來看,它們的難度依次遞增。我們在描述一條公鏈所采取的分片技術的時候,往往以它用到的最難的技術作為其標簽。
三、采用分片技術的公有鏈:以太坊 vs Zilliqa
1.以太坊分片概述
為了解決可擴展性問題,以太坊2.0的分片引入了鏈上狀態(tài)分區(qū)(on-chain state partition)的概念來獲得更高的吞吐量。以太坊2.0將以太網絡分為兩層,上層為現(xiàn)有的以太坊主鏈,基本保持不變;下層為分片鏈,主要用于分片運算。不同層次的對象區(qū)別如下:
可以簡單地這么認為,分片中的交易都會被裝入“校對快” (collation)。 與側鏈類似,校對器(collator)只有一小部分會被記錄到主鏈:
1) 分片鏈上的交易處于自己獨立的空間中,分片驗證人(shard validator)只需要驗證他們所關注的分片。
2) 分片鏈通過 POS 機制依附于主鏈,以獲得更高層次的共識(higher level of consensus)。
具體過程就是分片中包含多個節(jié)點,即分片驗證人,他們可以通過POS機制在分片中完成交易的驗證,驗證之后產生一個校對塊,而這個校對塊的一頭部信息被加入到主鏈上面,具體的交易并不保存在主鏈上面。
一方面,以太坊2.0通過引入獨立分片,賦予了整個網絡的并行處理能力,提升了整個系統(tǒng)的吞吐量;另一方面,每個分片只保存一部分的歷史狀態(tài)數據,主鏈不需要保存具體的交易信息,可以大大降低節(jié)點的存儲壓力。
2.Zilliqa分片概述
Zilliqa通過Pow算法完成網絡節(jié)點的劃分過程:選出1個Boss分片和多個工作分片,每個分片有不低于600個節(jié)點。其設計思想來源于谷歌提出的Map-reduce編程模型的思想。它的分片分為兩個階段:
1) Map:網絡上的每一筆交易會根據發(fā)送者的地址被映射到工作分片中,工作分片通過pBFT共識算法在各自的分片當中驗證交易,最終形成當前工作分片中的子區(qū)塊。
2) Reduce(Merge):工作分片將子區(qū)塊發(fā)送到Boss分片,Boss分片將多個子區(qū)塊進行驗證、打包,合并生成最終區(qū)塊,保存在各個節(jié)點當中。
Zilliqa分片技術,是屬于網絡分片和交易分片的范疇,網絡的節(jié)點是運作在同一個空間。網絡中的所有節(jié)點都工作在主鏈上,并且每個節(jié)點都保存著所有的歷史記錄。綜上,Zilliqa通過網絡切分,多個工作分片并行工作,能夠極大提升系統(tǒng)的吞吐量,但是每個節(jié)點依然保持所有歷史記錄,并沒有解決存儲空間的擴展性問題。
3.以太坊與Zilliqa分片技術對比
四、總結
在本文中我們講解了分片技術概念的起源以及其在區(qū)塊鏈網絡中的應用,然后介紹了分片技術的三種形式:網絡分片、交易分片、狀態(tài)分片,最后介紹了以太坊與Zilliqa所采用的分片技術的異同。在區(qū)塊鏈分片技術研究的第二部分,我們將詳解分析和講解一些采用了分片技術的區(qū)塊鏈項目。
1.TMT觀察網遵循行業(yè)規(guī)范,任何轉載的稿件都會明確標注作者和來源;
2.TMT觀察網的原創(chuàng)文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創(chuàng)的行為TMT觀察網或將追究責任;
3.作者投稿可能會經TMT觀察網編輯修改或補充。