如何通過(guò)分片來(lái)增強(qiáng)區(qū)塊鏈的可擴(kuò)展性
現(xiàn)在有很多研究致力于如何通過(guò)分片來(lái)增強(qiáng)區(qū)塊鏈的可擴(kuò)展性。而據(jù)我所知,這些研究主要的想法是在不犧牲區(qū)塊鏈(包括其所有的分片)的不可篡改性和安全性的前提下,使在相互獨(dú)立的分片中并行執(zhí)行多個(gè)交易成為可能。我能找到的絕大部分研究都聚焦在分片的共識(shí)算法上。盡管所有這些研究看起來(lái)都很有前景,但我想通過(guò)一個(gè)不一樣的視角來(lái)看待分片。
首先,為了論證我的觀點(diǎn),讓我們一起來(lái)討論一下現(xiàn)有分片設(shè)計(jì)中的共識(shí)算法。更準(zhǔn)確地來(lái)說(shuō),是討論當(dāng)下正在開(kāi)放的免信任型區(qū)塊鏈上運(yùn)行且可用的共識(shí)算法。盡管這些算法是可用的,并且已經(jīng)在運(yùn)行了,可是我們真的通過(guò)分片獲得了希望中的可擴(kuò)展性么?讓我們快速了解一下阿爾達(dá)姆定律吧 [1] ,這樣你更能體會(huì)到我的困惑:
上述定律表明,在理論上,執(zhí)行所有任務(wù)的速度會(huì)隨著系統(tǒng)資源的提升而加快,然而,無(wú)論提升的幅度有多大,理論速度總是受限于無(wú)法從改進(jìn)中受益的那部分任務(wù)的執(zhí)行速度 [2]。這帶來(lái)了一個(gè)根本性的難題 —— 一旦所有可并行化部分的吞吐量都達(dá)到最大時(shí),串行化部分的吞吐量將成為系統(tǒng)吞吐量的天花板。
對(duì)于區(qū)塊鏈的分片來(lái)說(shuō),這就意味著吞吐量的潛在增長(zhǎng)受限于當(dāng)前可以在隔離的分片中同時(shí)執(zhí)行的交易數(shù)量。也就是說(shuō),如果分片中的一筆交易需要來(lái)自其它分片的數(shù)據(jù),它就不得不從其它分片中同步該數(shù)據(jù)的轉(zhuǎn)移。這就是一種串行化事務(wù),根據(jù)阿爾達(dá)姆定律,一大堆分片的存在限制了吞吐量。
獨(dú)立的原生貨幣交易
如果兩個(gè)賬戶之間的交易被明確地限制為僅在這兩個(gè)賬戶之間轉(zhuǎn)移貨幣余額,比如在兩個(gè)賬戶之間發(fā)送貨幣, 那就不需要任何其它賬戶中的數(shù)據(jù)。因此,如果兩個(gè)賬戶的數(shù)據(jù)同處于一個(gè)特定的分片中是可用的,那么這筆交易和其它賬戶的交易就可以被異步地執(zhí)行。當(dāng)分片數(shù)量以及賬戶對(duì)之間不相關(guān)的交易數(shù)量上升時(shí),網(wǎng)絡(luò)吞吐量就擴(kuò)展了。隨著賬戶數(shù)量的增長(zhǎng),可以預(yù)見(jiàn)的是,對(duì)獨(dú)立交易進(jìn)行分片的可能性也會(huì)增加。在上述限制條件下,吞吐量的大小由執(zhí)行單筆交易所需花費(fèi)的時(shí)間決定,因?yàn)橥粫r(shí)間我們可以執(zhí)行非常多的交易。這正是我們?cè)诳紤]提高區(qū)塊鏈吞吐量時(shí)想象到的理想情形。
為分片設(shè)計(jì)智能合約
但對(duì)于智能合約而言,情況不會(huì)有想象中那么順利。智能合約是作為一個(gè)單獨(dú)的賬本賬戶被部署在區(qū)塊鏈上的,賬戶中除了數(shù)據(jù)狀態(tài)還有它的程序代碼。代碼上運(yùn)行的每一筆交易都在改變智能合約中的數(shù)據(jù)狀態(tài)。每一個(gè)改變都被記錄在區(qū)塊鏈上,并通過(guò)一個(gè)代表狀態(tài)的哈希值進(jìn)行驗(yàn)證。為了保持區(qū)塊鏈狀態(tài)的確定性和連續(xù)性,每個(gè)智能合約每次只能在一個(gè)分片中執(zhí)行,除非智能合約賬戶本身的狀態(tài)也能被分片??傊?,這使得對(duì)于所有往智能合約發(fā)送交易的賬戶而言,智能合約賬戶的執(zhí)行成為了限制因素。由于智能合約被用于發(fā)行代幣,因此隨著特定代幣流通量的增加,無(wú)論存在多少分片,其智能合約很有可能成為吞吐量的瓶頸,正如阿爾達(dá)姆定律所預(yù)測(cè)的那樣。
就目前有關(guān)智能合約的分片實(shí)現(xiàn)來(lái)看,我只能看到兩種可能通過(guò)分片提升擴(kuò)展性的方式:
· 使用隔離在分片中的多個(gè)智能合約
· 使用確定性的多線程智能合約,(又稱 SIMD)
使用多個(gè)智能合約可以充分發(fā)揮分片的優(yōu)勢(shì)。舉例來(lái)說(shuō),如果每個(gè)智能合約(代表一個(gè)代幣)都被分配到一個(gè)單獨(dú)的分片中執(zhí)行,那么對(duì)于一個(gè)特定的代幣而言,其交易不會(huì)對(duì)其它代幣的交易造成影響。盡管每種獨(dú)立代幣的交易都受限于它所在的特定分片中智能合約的吞吐量,但分片的數(shù)量可以隨著大量且不斷增長(zhǎng)的代幣而線性增長(zhǎng)。這并沒(méi)有解決單個(gè)智能合約的吞吐量問(wèn)題,但是對(duì)于一個(gè)所有合約都在一條鏈上、沒(méi)有分片的區(qū)塊鏈而言,它是一個(gè)改進(jìn)方案。
不過(guò),即便使用這種方法,只要一個(gè)用戶賬戶的狀態(tài)被分散在不同分片間、又同時(shí)被需要(例如,使用原生貨幣來(lái)支付交易),問(wèn)題還是會(huì)出現(xiàn)。
一種來(lái)自超級(jí)計(jì)算的叫做矢量化(vectorization)的技術(shù)使得程序能夠并行地執(zhí)行其部分代碼。這就是為人熟知的的單指令多數(shù)據(jù)流(“SIMD”)。針對(duì) SIMD 編寫(xiě)的程序都是確定性的。從本質(zhì)上來(lái)說(shuō),SIMD 機(jī)器(也就是如今的通用型 GPU(“GUGPU”))是通過(guò)一系列的處理器來(lái)對(duì)其數(shù)據(jù)進(jìn)行分片的。這對(duì)于某些類型的應(yīng)用來(lái)說(shuō)非常有效,諸如圖形以及類似的矩陣運(yùn)算。
理論上來(lái)說(shuō),這項(xiàng)技術(shù)也能被應(yīng)用到區(qū)塊鏈的智能合約中。也就是說(shuō),智能合約可以被明確地編寫(xiě)為通過(guò)某種方式來(lái)支持交易的并行執(zhí)行。至于這要如何實(shí)施,我并不太清楚。也許在這片領(lǐng)域里會(huì)涌現(xiàn)出一些創(chuàng)新的區(qū)塊鏈研究。然而,可以預(yù)見(jiàn)的是,即便有了一個(gè)這樣的解決方案,編寫(xiě)一個(gè)適合 SIMD 運(yùn)行的智能合約也會(huì)變得相當(dāng)復(fù)雜。
無(wú)論是使用隔離在分片中的多個(gè)智能合約,還是使用 SIMD 智能合約,都很難算作一個(gè)理想的解決方案,盡管它們都有可能提高可擴(kuò)展性。
智能對(duì)象資產(chǎn)使分片成為可能
對(duì)于智能合約的分片來(lái)說(shuō),其主要的限制因素在于狀態(tài)的分片和代碼的執(zhí)行。如果存在一種方法可以避免在單個(gè)智能合約狀態(tài)和代碼執(zhí)行中的交易串行化,分片就可以通過(guò)增加吞吐量來(lái)提升擴(kuò)展性。換言之,如果存在一種多指令多數(shù)據(jù)流(“MIMD”)的執(zhí)行方法,通過(guò)區(qū)塊鏈分片來(lái)提升可擴(kuò)展性的機(jī)會(huì)將顯著提高。
正如我們?cè)?“反思區(qū)塊鏈賬戶概念” [3] 這篇文章中所描述的那樣,如果每個(gè)用戶賬戶都有它自己的狀態(tài),而不是使用相互獨(dú)立的智能合約的話,那么每個(gè)用戶賬戶都能包含代表資產(chǎn)的對(duì)象,無(wú)論該對(duì)象是代幣還是其他類型的實(shí)體。正如文章 “可擴(kuò)展的智能對(duì)象資產(chǎn)、智能對(duì)象資產(chǎn)所有權(quán)及基于 DataGrid 區(qū)塊鏈的擴(kuò)展區(qū)塊鏈對(duì)象模型的分?jǐn)?shù)級(jí)智能對(duì)象資產(chǎn)所有權(quán)” [4] 所述,XOSA 和對(duì) XSOA 的引用可以被用于在賬戶狀態(tài)之間通過(guò)交易直接轉(zhuǎn)移賬戶之間的所有權(quán)。
舉例來(lái)說(shuō),假設(shè)有兩組交易,其中每筆交易都介于不同的賬戶之間,也就是說(shuō):一筆交易從賬戶 A 發(fā)送到賬戶 B;另一筆交易從賬戶 C 發(fā)送到賬戶 D,那么這兩筆交易可以在不同的分片中被同時(shí)執(zhí)行。進(jìn)一步來(lái)說(shuō),因?yàn)?XSOA 的代碼獨(dú)立于任何賬戶,且對(duì)于每筆交易來(lái)說(shuō),代碼可能并不相同,因此我們可以使用一個(gè) MIMD 模型實(shí)現(xiàn)分片。在該模型中,每個(gè)分片中的代碼和數(shù)據(jù)都各不相同。
對(duì)于這個(gè)模型而言,限制其可擴(kuò)展性的因素是不相交的賬戶組之間能同時(shí)發(fā)生的交易數(shù)量。我們可以預(yù)見(jiàn)的是,隨著賬戶數(shù)量的增長(zhǎng),不相交的賬戶組之間發(fā)生任意一組交易j的機(jī)會(huì)也會(huì)增加,這反過(guò)來(lái)將導(dǎo)致分片的機(jī)會(huì)也得到增加。
結(jié)論
作為一種已經(jīng)假定可用的分片共識(shí)算法,一個(gè)突出的問(wèn)題在于如何使用這些技術(shù)。智能合約天然地會(huì)將交易串行化,除非使用復(fù)雜的 SIMD 類型的解決方案,就只能通過(guò)使用多個(gè)隔離的智能合約來(lái)提供擴(kuò)展性。即使使用這一方案,每個(gè)智能合約的吞吐量仍會(huì)受到單個(gè)分片的吞吐量限制。通過(guò)重新讓用戶賬戶來(lái)包含狀態(tài)信息,并使用 XBOM 模型,DataGrid 區(qū)塊鏈提供了一種提升分片可擴(kuò)展性的解決方案——根據(jù)賬戶的數(shù)量和賬戶之間的不相交交易來(lái)進(jìn)行擴(kuò)展。除了支持繼承和實(shí)時(shí)代碼重用以外,我們認(rèn)為這是一個(gè)對(duì)于區(qū)塊鏈擴(kuò)展性問(wèn)題的重要的解決方案。