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