區塊鏈的可擴充套件性問題及解決方案對比
編者按:本文來自 迅雷鏈(ID:xunleilian),作者:周茂青,網心科技軟體工程師,現從事迅雷鏈底層技術研發工作,星球日報經授權釋出。
區塊鏈的效能問題
VISA是目前世界上廣泛使用的信用卡品牌,區塊鏈要達到實用水平,效能上至少需要能跟VISA之類的支付系統作比較。根據VISA在2015年的記錄,全年共產生92,064百萬筆支付交易,平均2920tps,按平均每筆交易512位元組左右計算,全年交易資料量約47TB。
而目前主流區塊鏈效能情況是,比特幣每秒只能進行大約7筆交易;以太坊每秒10-20筆。目前這些區塊鏈的交易效能都無法與VISA相比。更嚴重的是,目前比特幣和以太坊的礦機都需要儲存全量資料,而單個機器的儲存容量是有限的,若無法解決這個問題,即使交易效能提升了,若按每年新增資料量47 TB算,那麼這些資料很快就會超過單機的容量,到時候整個區塊鏈網路都無法繼續執行。
那麼,比特幣和以太坊這種擁有海量節點的區塊鏈系統,為什麼效能卻這麼低呢?為什麼區塊鏈的可擴充套件性這麼差呢?
原因分析
區塊鏈是去中心化的賬本技術,需要保證開放性、自治性、不可篡改等特性。去中心化是指使用分散式核算和儲存,不存在中心化的硬體或管理機構,任意節點的權利和義務都是均等的,系統中的資料塊由整個系統中具有維護功能的節點來共同維護。也就是說,系統中任意節點都需要對交易資料進行全量計算和儲存。因此,區塊鏈是沒有可擴充套件性的,即系統的總體效能受限於單個節點的效能上限,即使加入了大量節點,系統的總體效能也無法提升。
可擴充套件性是傳統分散式系統的基本特性,但區塊鏈由於去中心化的要求,可擴充套件性卻難以滿足。業界總結了一個三元悖論描述去中心化與可擴充套件性之間的矛盾,它尚未被嚴格證明,只能被稱為猜想,但實際系統設計過程中卻能感覺到時時受其挑戰:
去中心化(Decentralization),安全性(Security)和可擴充套件性(Scalability)這三個屬性,區塊鏈系統無法同時滿足,最多隻能三選其二。
上圖演示了區塊鏈如何在這三個因素之間作選擇及對應的策略,例如若若要滿足安全性與去中心化,則需要所有節點參與共識、計算、全量儲存,但由此帶來的問題是失去可擴充套件性,也就是系統的總體效能無法隨著節點的增多而提升;若要滿足可擴充套件性與安全性,則需要中心化管理,需要保證參與共識的節點是可信的;若要滿足可擴充套件性與去中心化,則採用分散儲存、計算的策略,不做全量共識,則攻擊網路的難度降低,安全性難以保證。
提升區塊鏈系統性能的方案
我們知道,影響區塊鏈交易效能的主要因素包括共識機制、交易驗證、廣播通訊、資訊加解密等幾個環節。從這些環節入手,我們可以得到一些提升效能的方法。
共識機制
從PoW到PoS再到DPoS和各種BFT類演算法,共識機制不斷創新,區塊鏈平臺效能也得到大幅提升。
交易驗證
從交易驗證機制角度出發,目前有幾種優化處理方式:
1)閃電網路(Lightning Network)和狀態通道(State Channels),這兩種策略是保持底層的區塊鏈協議不變,將交易放到鏈下執行,通過改變協議用法的方式來解決擴充套件性問題。鏈下的部分可以用傳統的中心化的分散式系統實現,效能具有可擴充套件性。在這種策略下,分散式賬本上只是記錄粗粒度的賬本,而真正細粒度的雙邊或有限多邊交易明細,則不作為交易記錄在分散式賬本上。缺點是存在中心化的系統。
2)分片處理(sharding),以太坊專案正在研發中的分片(shard)方案的總體思路是每個節點只處理一部分交易,比如一部分賬戶發起的交易,從而減輕節點的計算和儲存負擔。
3)多鏈架構(Multi-chain)的思路則是將原本的一條鏈分成多條鏈,每條鏈都負責部分計算和儲存業務,並且有可擴充套件性,即鏈的數量可以隨著業務量和資料的增加而增加,系統的總體效能隨著鏈的數量的增加而提升,系統的儲存空間也能隨著鏈的數量的增加而擴大。
廣播通訊
P2P網路是區塊鏈的核心技術之一,因此P2P網路通訊的效率對效能的影響非常重要。為了能改善廣播通訊效能,需要提高節點機器的物理配置,提供高速網路連線,並採用減少廣播的共識演算法,如DPoS等。
資訊的加解密
資訊的加解密是區塊鏈的關鍵環節,主要是雜湊函式和非對稱加密兩類演算法。區塊鏈系統中可以採用更高效能的加密演算法以提升交易驗證的效能。
方案對比
上述優化方法中,共識機制、廣播通訊、資訊加解密是演算法層面的優化,儘管這些方案也是重要的優化,但其沒有解決根本性的問題,其效能提升仍然受限於單機效能,不是可擴充套件的,因此效能提升有限,本文不再詳述;交易驗證的幾個優化方案則是可擴充套件的方案,其中閃電網路和狀態通道是鏈下執行的方案,採用中心化的系統提升區塊鏈效能,與區塊鏈去中心化的理念相悖,而且使用複雜、使用者體驗差(例如閃電網路要求交易中的雙方以及中間人都必須同時線上、線下系統開發複雜因為要尋找可用的支付通道、不適用於大額交易等),無法得到廣泛使用。因此EOS、以太坊、Cosmos及迅雷鏈等高效能區塊鏈專案均採用分片或多鏈方案。
分片或多鏈方案的思路是一樣的,都是讓每個分片或分鏈進行部分交易資料的處理和儲存,每個分片和分鏈可以並行處理不同的交易資料,這樣分片或分鏈的數量越多,系統的總體效能就越高,這兩者都是可擴充套件性很強的方案。
1、EOS的多鏈實現方案
EOS的技術白皮書中並沒有描述多鏈的實現方案,只描述了支援跨鏈通訊的IBC(Inter Blockchain Communication)協議,跨鏈互動通過簡化生成訊息存在的證明和訊息序列的證明來實現。EOSIO聲稱主鏈可以支援3000以上的TPS,通過IBC可達到100萬TPS。
EOS的多鏈架構其實是側鏈方案。開發者可以單獨部署一條EOS側鏈(公鏈、私鏈都可以),執行自己的Dapp,這些側鏈有可以有自己的委員會,見證人以及計算資源,有自己的代幣,這些代幣有自己的增發方式,而且代幣可以和EOS通過介面進行錨定去實現包括鎖定在內的某種操作。側鏈最大的特徵雙向錨定(two-way-peg)技術,它使得在側鏈流通的Token價格總是與EOS價格保持一定比例或者直接採用EOS。
因此EOS的多鏈架構並不是對主鏈本身進行可擴充套件性改造,只是期望通過子鏈來分擔主鏈的壓力。
2、以太坊的分片技術(Sharding)
分片(Sharding)是以太坊正在開發中的技術,其大致設計思路是:將區塊鏈網路中的每個區塊變為一個子區塊鏈,子區塊鏈中可以容納若干(目前為100個)打包了交易資料的Collation(大概可以稱為“校驗塊”,為了在分片的情景中將其與區塊的概念區分開),這些Collation最終組成一個在主鏈上區塊;因為這些Collation是整體作為區塊存在的,所以其資料必定是全部由某個特定的礦工所打包生成,本質上和現有協議中的區塊沒有區別,所以不再需要增加額外的網路確認。這樣,每個區塊的交易容量就大概擴大了100倍;而且這種設計還有利於未來的繼續擴充套件。
跨分片通訊: 利用 UTXO 模型,並通過在主鏈上進行交易和建立一個 receipt(帶有 receipt ID),使用者可以將以太存入一個指定分片。分片鏈上的使用者可以給定 receipt ID 建立一個消費 receipt(receipt-consuming)的交易,來花費該 receipt。但UTXO適用於交易,對於合約狀態資料儲存不適用。
3、Cosmos的多鏈技術
Cosmos專案的目的是解決區塊鏈互動操作和可擴充套件性問題,其區塊鏈間通訊協議可以實現區塊鏈的互聯,支援不同區塊鏈之間的資產轉移。
網路主要由兩部分組成,Cosmos Hub和若干個Zone。
Cosmos網路裡第一條鏈是Hub,從名字和功能上都可以把它理解為Cosmos的中心鏈或者管理員鏈,所有其它區塊鏈的交易都會在Hub記錄,一條區塊鏈上的token可以通過Hub轉移到另一條區塊鏈。Hub是Cosmos網路的核心,和其餘的Zone是不平等的,從嚴格意義上講Cosmos網路不是真正的分散式系統,如果Hub發生了單點故障(當然Hub本身是分散式的,發生問題的機率很小),Cosmos網路的很多特性會不可用。關於這點,白皮書中強調Hub必須得到嚴格保護。
每個Zone可以看做是單獨的區塊鏈空間。每個Zone會和Hub保持狀態同步。Hub通過去中心化的驗證人組來保證安全性。Zone1向Zone2做跨鏈訊息時,Zone1先生成訊息包,並將其證明發布在Hub上,接下來Hub會生成Zone1的跨鏈訊息包已在Hub上的存在證明的證明發佈於Zone2,接下來Zone2收妥訊息包,並給出證明發佈於Hub上,最後,Hub再給出Zone2的收妥證明的證明發佈於Zone2。完成整個跨鏈訊息傳遞。
4、迅雷鏈同構多鏈架構
迅雷鏈是同構多鏈的架構,即每條鏈的結構相同、地位平等。即系統由一條條相對獨立(獨立進行共識)的鏈組成,每條鏈有多個節點,每個節點被分配到其中一條鏈上,不同的賬戶資料被錨定在不同的同構鏈上,然後接入層將交易路由到傳送方所在的鏈上進行區塊打包與共識。系統中鏈的數量能夠按業務需求動態增加。因此同構多鏈的架構首先保證了系統的可擴充套件性。
不同於EOS等區塊鏈系統需要昂貴的高效能伺服器作為記賬節點,迅雷鏈使用廉價省電的玩客雲裝置作為記賬節點,構建了自己的大規模共享計算平臺。目前玩客雲節點數量已超過150萬個節點數,如此龐大的節點數量,對區塊鏈系統的可擴充套件性提出了嚴峻的挑戰。挑戰主要來自兩個方面:
1)玩客雲裝置廉價省電,效能也低,這就要求共識演算法必須使用綠色環保、適應家庭使用者的網路環境的演算法。針對這個挑戰,迅雷鏈在改進的PBFT的基礎上,還融合了DPoS的思想,在每條鏈上,都會週期性地(例如每隔5000個區塊)選舉出驗證人節點參與共識。與傳統的DPoS不同之處在於,迅雷鏈並不是根據礦工持有的代幣數量或幣齡作為選舉標準投票權重,而是按玩客雲節點的儲存容量、網路穩定性、頻寬、時延等標準作為衡量標準,以獲得更好的公平性和網路效率。
2)玩客雲節點數量龐大,家庭網路環境複雜,要求區塊鏈系統必須設計成可擴充套件性高、自治能力強的架構。得益於同構多鏈的架構非常強大的可擴充套件性,迅雷鏈能夠充分利用海量玩客雲節點,可以將鏈數“無限”擴充套件,從而具備百萬級的併發處理能力。
綜上所述,迅雷鏈採用多鏈架構實現了可擴充套件性 + 使用PBFT實現了強一致性 + 使用更綠色環保和公平的DPoS進一步提升了共識效率、也得到了更高的可用性。從去中心化(Decentralization),安全性(Security)和可擴充套件性(Scalability)三要素的角度看,由海量的廣泛分佈的玩客雲裝置支撐了去中心化和安全性,採用多鏈架構以實現可擴充套件性。
總結
共識機制、廣播通訊、資訊加解密等演算法層面的優化,無法解決大規模去中心化系統的可擴充套件性問題;而閃電網路和狀態通道是鏈下執行的方案,則與區塊鏈去中心化的理念相悖,而且使用複雜、使用者體驗差,無法得到廣泛使用。因此前沿的區塊鏈專案均採用可擴充套件性強的分片或多鏈方案。
其中,EOS目前是多執行緒的架構,總體效能還是受到單臺機器的效能所限,需要昂貴的伺服器來執行區塊鏈節點,可擴充套件性並不算強;以太坊正在開發中的分片技術則需要主鏈負責驗證子鏈的區塊,由於主鏈會存在效能瓶頸,因此子鏈數量受到限制(100個子鏈);Cosmos也是同樣的問題,Hub必須得到嚴格保護;迅雷鏈採用的同構多鏈架構則避免了上述缺點,適用於大規則廉價節點的部署, 可以將鏈數“無限”擴充套件,從而具備百萬級的併發處理能力。