今天要講的是區(qū)塊鏈中另一個(gè)重要技術(shù)——分片計(jì)算。眾所周知,區(qū)塊鏈得到廣泛應(yīng)用的瓶頸之一在于緩慢的交易速度:比特幣的底層設(shè)計(jì)僅支持每秒7
今天要講的是區(qū)塊鏈中另一個(gè)重要技術(shù)——分片計(jì)算。
眾所周知,區(qū)塊鏈得到廣泛應(yīng)用的瓶頸之一在于緩慢的交易速度:比特幣的底層設(shè)計(jì)僅支持每秒7筆交易,還不及傳統(tǒng)支付工具Visa每秒8000筆交易的一個(gè)零頭,更別說支付寶在去年雙十一創(chuàng)造的每秒25.6萬筆的記錄。這嚴(yán)重制約了去中心化應(yīng)用的發(fā)展。
因此,區(qū)塊鏈擴(kuò)容性問題成為了當(dāng)前業(yè)界關(guān)注的熱點(diǎn)。
接下來我們要討論的分片技術(shù),被認(rèn)為是一種有效的、能夠解決區(qū)塊鏈吞吐量問題的解決方案。
什么是分片
在傳統(tǒng)數(shù)據(jù)庫里,分片是指把整個(gè)數(shù)據(jù)庫分成不同的部分,存儲在不同的服務(wù)器里。這可以提高數(shù)據(jù)庫的讀寫效率,突破單一服務(wù)器的性能瓶頸。
類似的,在區(qū)塊鏈里,分片也是將數(shù)據(jù)劃分成若干部分,交給不同的群組處理。每個(gè)群組都被稱為一個(gè)「分片」。
把節(jié)點(diǎn)進(jìn)行分組就是分片。
那為什么要進(jìn)行分片呢?
這是因?yàn)樵诒忍貛胚@類傳統(tǒng)區(qū)塊鏈設(shè)計(jì)中,在一個(gè)鑄塊周期內(nèi),只會選擇一個(gè)節(jié)點(diǎn)來出塊,所以節(jié)點(diǎn)數(shù)量與出塊的速度沒有必然聯(lián)系。
區(qū)塊鏈的性能瓶頸并不是因?yàn)閱喂?jié)點(diǎn)的計(jì)算能力不足,而是受限于無法水平擴(kuò)展。
小T圖解
這就好比,有一個(gè)50人的班級,老師有一份50題的卷子要交給大家做,按照比特幣的方式是,1號學(xué)生做完第一題,才能輪到2號做第二題,然后又要等2號學(xué)生做完第二題,才到3號做,直到50題做完,這其實(shí)是效率很低的做法,即便50個(gè)學(xué)生各個(gè)都聰明絕頂,但是在每一次只能做一題的規(guī)則下,效率也極其有限。很顯然,影響效率的并不是學(xué)生,而是規(guī)則本身。那么就會有人問了,為什么不能50個(gè)學(xué)生一起做題目呢?
沒錯(cuò),分片技術(shù)就可以理解成你可以讓50個(gè)學(xué)生分為10組同來同時(shí)做題。這樣一來,就變成了一個(gè)簡單的算術(shù)題了,如果一個(gè)分片一秒鐘可以處理10個(gè)交易,那10個(gè)分片一秒鐘就可以處理100個(gè)交易。吞吐量(TPS)自然就能得到一定的提升。
TASchain的分片計(jì)算并行框架
Chiron共識機(jī)制下3000+的TPS已經(jīng)可以足夠支撐大多數(shù)的商業(yè)化應(yīng)用,但考慮到對超大規(guī)模應(yīng)用的擴(kuò)展性支持,TAS借鑒了Google的MapReduce和阿里云批量計(jì)算思想,設(shè)計(jì)了分片并行交易執(zhí)行框架,以進(jìn)一步提高吞吐量。
在TAS的并行計(jì)算框架中,將重節(jié)點(diǎn)邏輯上分為計(jì)算節(jié)點(diǎn)和提案節(jié)點(diǎn)。也就是說,在一個(gè)鑄塊周期里,根據(jù)上一區(qū)塊產(chǎn)生的隨機(jī)數(shù)可以選定多個(gè)提案節(jié)點(diǎn)(詳見Chiron共識機(jī)制),而根據(jù)簽名與交易發(fā)起人的地址的運(yùn)算,選定的節(jié)點(diǎn)稱之為計(jì)算節(jié)點(diǎn)。計(jì)算節(jié)點(diǎn)負(fù)責(zé)執(zhí)行交易,提案節(jié)點(diǎn)負(fù)責(zé)塊的生成。
小T解讀
TASchian的分片計(jì)算過程可以這樣理解,一個(gè)班級要大掃除,班主任根據(jù)以往的值日情況,把同學(xué)們分成了若干個(gè)掃地組,掃地組負(fù)責(zé)各個(gè)角落的清潔工作。等大家都掃完了,班主任確認(rèn)這次大掃除的獎品。
其中有幾個(gè)概念小T再為各位做進(jìn)一步解釋。
交易分片:每當(dāng)一筆交易進(jìn)入網(wǎng)絡(luò)時(shí),TAS會根據(jù)交易發(fā)送者的地址和上一塊的簽名,將交易通過VRF輸出隨機(jī)發(fā)送到不同的分片中,這一過程被稱為交易分片。并且相同的交易發(fā)起人發(fā)起的多筆交易,都將落到同一個(gè)計(jì)算節(jié)點(diǎn)。這個(gè)設(shè)計(jì)既提高了效率,又保證了用最小時(shí)間窗口即可驗(yàn)證雙花問題。
交易執(zhí)行:計(jì)算節(jié)點(diǎn)會根據(jù)當(dāng)前賬戶狀態(tài)執(zhí)行交易,同時(shí)記錄賬戶狀態(tài)變化等情況。對于交易的執(zhí)行往往需要依賴狀態(tài)數(shù)據(jù),例如賬戶余額、合約內(nèi)保存的用戶數(shù)據(jù)等。在TAS的設(shè)計(jì)中,計(jì)算節(jié)點(diǎn)保存了完整的狀態(tài)信息,一旦接受到一個(gè)新塊,就會更新本地狀態(tài)。所以計(jì)算節(jié)點(diǎn)本地即可完成交易的執(zhí)行,無需進(jìn)行跨鏈等復(fù)雜交互。
合并:對于每一筆交易的執(zhí)行結(jié)果,計(jì)算節(jié)點(diǎn)提交給提案節(jié)點(diǎn)的內(nèi)容包括賬戶狀態(tài)樹根hash(簡稱根hash)、交易影響的賬戶、賬戶狀態(tài)的差值。提案節(jié)點(diǎn)遍歷收到的所有結(jié)果,對比本地根hash與結(jié)果中的根hash,篩選出交易結(jié)果,稱之為候選集。提案節(jié)點(diǎn)將候選集中的賬戶狀態(tài)差值,合并到本地賬戶之上,生成最終的賬戶狀態(tài)。
驗(yàn)證:驗(yàn)證組接收到候選區(qū)塊后,以組協(xié)作方式來完成候選區(qū)塊驗(yàn)證,并通過門限簽名方式在達(dá)成組內(nèi)共識的同時(shí)也產(chǎn)生當(dāng)前輪的真隨機(jī)數(shù)R1,在新塊B1中寫入R1,將新塊B1向全網(wǎng)廣播。
與有著“分片之王”的Zilliqa相比,TAS系統(tǒng)下驗(yàn)證組內(nèi)所有成員收到門限簽名后均能恢復(fù)出最終組簽名,不需選定某位成員成為Leader,完成最后的多重簽名聚合操作,系統(tǒng)的魯棒性以及安全性要優(yōu)于Zilliqa。(小T)
關(guān)鍵詞: 分片計(jì)算 數(shù)據(jù)庫 存儲