撰文:PREDA;編譯:ChainFeedsResearch本文的內(nèi)容和目的
無論是在傳統(tǒng)的數(shù)據(jù)庫(kù)領(lǐng)域還是在Blockchain技術(shù)中,并行執(zhí)行模型的設(shè)計(jì)都較為復(fù)雜。這是因?yàn),在設(shè)計(jì)過程中,需要綜合考慮多個(gè)維度,而每個(gè)維度的選擇都會(huì)對(duì)系統(tǒng)的整體性能和可擴(kuò)展性產(chǎn)生深遠(yuǎn)影響。本文將深入探討當(dāng)前最具代表性的幾種Blockchain執(zhí)行層并行架構(gòu),并詳細(xì)呈現(xiàn)我們針對(duì)這些架構(gòu)在性能和可擴(kuò)展性方面所做的實(shí)驗(yàn)結(jié)果。
從一個(gè)維度來說,Blockchain領(lǐng)域一直處在對(duì)鏈的高性能和高可擴(kuò)展性的持續(xù)追求中。即使在多鏈系統(tǒng)和Layer2系統(tǒng)出現(xiàn)后,每個(gè)智能合約的執(zhí)行能力仍受限于單一虛擬機(jī)VM的能力。隨著并行虛擬機(jī)(ParallelVM)的出現(xiàn),這一局限得到了突破。并行虛擬機(jī)允許單個(gè)智能合約的交易在多個(gè)EVM/VM上同時(shí)執(zhí)行,從而利用更多的CPU核心來提高性能。
我們認(rèn)為,在眾多支持并行VM的高性能Blockchain系統(tǒng)中,Sei(V2)、Aptos、Sui、Crystality和 PREDA 最具代表性,每個(gè)系統(tǒng)都具備設(shè)計(jì)上的獨(dú)特優(yōu)勢(shì)。
在本文開篇,我們展示了第一組實(shí)驗(yàn)結(jié)果。下圖展示了在128核的機(jī)器上,執(zhí)行相同的ERC20智能合約時(shí),Sei、Aptos、Sui、Crystality和PREDA的每秒交易數(shù)(TPS)的絕對(duì)值。從這組實(shí)驗(yàn)結(jié)果來看,PREDA模型在五個(gè)并行執(zhí)行系統(tǒng)的TPS和可擴(kuò)展性比較中占據(jù)了顯著優(yōu)勢(shì)。
其他實(shí)驗(yàn)數(shù)據(jù)和分析,我們將在后文詳細(xì)展開。
并行執(zhí)行模型一覽
Aptos和Sui兩個(gè)項(xiàng)目,都衍生于Meta(曾名Facebook)宣告失敗的Blockchain項(xiàng)目Diem。兩個(gè)項(xiàng)目均由前Meta工程師創(chuàng)立——Aptos由AveryChing創(chuàng)立,Sui由SamBlackshear創(chuàng)立。二者隨后沿循的技術(shù)路線卻不盡相同,Aptos嚴(yán)格遵循為Diem開發(fā)的原始Move編程語言,但Sui對(duì)Move進(jìn)行了大量修改。
接下來,我們將探討Aptos和Sui的并行化模型的差異,分析它們采取的不同方法如何影響性能,并重點(diǎn)介紹它們各自的優(yōu)勢(shì)。Aptos:采用樂觀并行化的高性能Layer1
Aptos是一個(gè)Layer1,通過樂觀并行化機(jī)制實(shí)現(xiàn)智能合約的并行執(zhí)行,從而提升高性能。具體來說在樂觀并行化中,交易被初步假設(shè)為無狀態(tài)沖突并以并行方式執(zhí)行。執(zhí)行后,系統(tǒng)會(huì)檢查沖突,并通過回滾和串行執(zhí)行方式或通過不同的調(diào)度,重新執(zhí)行沖突交易來解決沖突。這種推測(cè)執(zhí)行方法假設(shè)大多數(shù)交易不會(huì)發(fā)生沖突,從而最大化并行執(zhí)行的優(yōu)勢(shì),同時(shí)提供了處理沖突的備用機(jī)制。
樂觀并行化的優(yōu)勢(shì):(1)不需要修改程序:無需對(duì)現(xiàn)有代碼進(jìn)行更改即可輕松實(shí)現(xiàn)。(2)在沖突只占低到中等百分比的場(chǎng)景下的效率:通過允許許多交易并發(fā)進(jìn)行,并在出現(xiàn)沖突時(shí)再處理沖突,最大化吞吐量,在許多現(xiàn)實(shí)場(chǎng)景中,沖突相對(duì)較少。
Aptos使用MOVE編程語言進(jìn)行智能合約開發(fā),并在系統(tǒng)實(shí)現(xiàn)中使用AptosMOVE虛擬機(jī)。Sui:采用悲觀并行化的高性能Layer1
Sui采用了一種悲觀并行化策略。在悲觀并行化中,系統(tǒng)在執(zhí)行前會(huì)預(yù)先檢查交易是否可能發(fā)生資源爭(zhēng)用。程序員需要指定每筆交易需要訪問的資源(即狀態(tài))。系統(tǒng)對(duì)每個(gè)接收到的交易進(jìn)行預(yù)檢查,以檢測(cè)潛在沖突。只有不涉及與當(dāng)前執(zhí)行中的交易發(fā)生資源爭(zhēng)用的交易,才會(huì)被送至執(zhí)行引擎進(jìn)行并行執(zhí)行。
悲觀并行化的優(yōu)勢(shì):(1)避免回滾:通過在執(zhí)行前識(shí)別并避免沖突,此方法最小化了回滾和重新執(zhí)行的需求,從而實(shí)現(xiàn)更可預(yù)測(cè)的性能。(2)在高沖突場(chǎng)景中的效率:在高爭(zhēng)用環(huán)境中非常有效,確保只有不沖突的交易并行執(zhí)行,減少?zèng)_突解決所帶來的開銷。
Sui也使用MOVE編程語言,但具有自己的SuiMOVE擴(kuò)展,并在系統(tǒng)實(shí)現(xiàn)中使用SuiMOVE虛擬機(jī)。Sei:與Solidity和EVM兼容的樂觀并行化
Sei最初推出公鏈時(shí),其定位是基于CosmosSDK構(gòu)建的交易型應(yīng)用鏈,現(xiàn)在已升級(jí)為首個(gè)并行化EVM鏈。在并行執(zhí)行這一層面,Sei采用了一種類似于Aptos模型的方法,我們稱之為樂觀并行化。
Sei(V2)所采用的樂觀并行,其與眾不同之處在于使用Solidity編程語言和標(biāo)準(zhǔn)Ethereum虛擬機(jī)(EVM),確保EVM和Solidity兼容性。Crystality和PREDA:并行接力執(zhí)行架構(gòu)
Crystality和PREDA都支持并行接力執(zhí)行分布式架構(gòu)(ParallelRelay-ExecutionDistributedArchitecture)。PREDA是為多EVMBlockchain架構(gòu)里的并行化通用智能合約而專門設(shè)計(jì)。二者的關(guān)系是,Crystality是一種用于并行EVM/GPU的編程語言,其基礎(chǔ)是PREDA模型。從系統(tǒng)的角度來說,PREDA首次在Blockchain領(lǐng)域,使合約功能的完全并行化成為可能,因此能最大化一組交易的并發(fā)性。這確保了所有EVM實(shí)例的高效利用,從而達(dá)到一定硬件配置條件下的最佳性能和可擴(kuò)展性。
與Solidity和Move的順序執(zhí)行,和SharedEverything的架構(gòu)設(shè)計(jì)不同,PREDA模型首次采用了SharedNothing架構(gòu),以打破并行執(zhí)行中的狀態(tài)依賴,并確保不同的EVM實(shí)例永遠(yuǎn)不會(huì)訪問同一片合約狀態(tài),從而幾乎完全避免了寫沖突。
在PREDA中,合約函數(shù)被分解為多個(gè)有序步驟,每個(gè)步驟依賴于狀態(tài)中一個(gè)可并行化且無沖突的部分。用戶發(fā)起的交易首先會(huì)被發(fā)送到一個(gè)持有用戶地址狀態(tài)的EVM上。在交易執(zhí)行過程中,執(zhí)行流可以通過發(fā)出接力交易從一個(gè)持有當(dāng)前管理所需合約狀態(tài)的EVM切換到另一個(gè)EVM的方式,實(shí)現(xiàn)數(shù)據(jù)不動(dòng),而執(zhí)行流根據(jù)數(shù)據(jù)依賴關(guān)系在EVM之間移動(dòng)。五大代表性合約的實(shí)驗(yàn)數(shù)據(jù)
在我們的評(píng)估中,我們測(cè)試了五個(gè)廣泛使用的智能合約——ETHTokenTransfer、Voting、Airdrop、CryptoKitties和MillionPixel,以及MyToken(ERC20)。這些合約在包括Sei、Aptos、Sui、Crystality和PREDA在內(nèi)的各種Blockchain系統(tǒng)上執(zhí)行。我們進(jìn)行了詳細(xì)的實(shí)驗(yàn),以比較不同并行執(zhí)行系統(tǒng)的性能,重點(diǎn)關(guān)注每秒交易量(TPS)和加速比,這些指標(biāo)衡量了在多個(gè)虛擬機(jī)上與各系統(tǒng)單個(gè)虛擬機(jī)上執(zhí)行時(shí)相對(duì)的性能提升。
所有詳細(xì)的實(shí)驗(yàn)數(shù)據(jù),包括絕對(duì)TPS值和加速比,請(qǐng)參閱完整的實(shí)驗(yàn)報(bào)告。
ETHTokenTransfer合約:該實(shí)驗(yàn)使用了與標(biāo)準(zhǔn)ERC20智能合約相同的實(shí)際歷史ETH交易。
Voting合約:Voting合約是PREDA模型如何簡(jiǎn)化并行投票算法的絕好例子。它利用Crystality和PREDA的數(shù)據(jù)拆分、接力和執(zhí)行機(jī)制,在絕對(duì)TPS和加速比上均優(yōu)于樂觀(Aptos)和悲觀(Sui)并行化方法。原本在Solidity中的順序算法現(xiàn)在允許跨虛擬機(jī)并行投票,并將結(jié)果從臨時(shí)數(shù)組中聚合。
AirDrop:此合約從一個(gè)地址向多個(gè)地址觸發(fā)多次Tokens或NFT轉(zhuǎn)移。它具有一對(duì)多的狀態(tài)更改模式。在這種情況下,Sei、Aptos或Sui中的兩個(gè)交易不能并行執(zhí)行。只有通過并行粒度更高的PREDA模型,能使這些交易能夠以流水線模式并行處理。
CryptoKitties:這個(gè)合約是Ethereum上的一款流行游戲合約,涉及根據(jù)父母貓的基因繁殖子代貓。與前述合約不同,這個(gè)合約在處理用戶發(fā)起的交易時(shí)需要訪問多個(gè)地址狀態(tài),包括「父貓」、「母貓」和「新生貓」。該合約在從父母基因中計(jì)算新生貓的基因時(shí)還涉及比前述合約更復(fù)雜的計(jì)算。
MillionPixel:在Ethereum上的這個(gè)游戲合約中,用戶們要搶先在地圖上標(biāo)記坐標(biāo)。這個(gè)智能合約用于展示PREDA模型的靈活性。除了按地址劃分合約狀態(tài)外,程序員還可以定制分區(qū)鍵,例如在這種情況下從地址類型切換為uint32類型。
Aptos交易執(zhí)行包括執(zhí)行和驗(yàn)證兩個(gè)步驟,測(cè)試數(shù)據(jù)顯示其中大量的交易執(zhí)行狀態(tài)被標(biāo)記為「SUSPEND」(掛起),且這些交易執(zhí)行耗時(shí)很長(zhǎng)。「SUSPEND」意味著交易執(zhí)行暫停,直到其狀態(tài)依賴關(guān)系得到解決才可以恢復(fù)執(zhí)行。對(duì)于64個(gè)虛擬機(jī)上的隨機(jī)交易,執(zhí)行和驗(yàn)證的總次數(shù)分別為102,219次和139,426次。而對(duì)于歷史交易,這些數(shù)字增加到186,948次和667,148次,交易掛起次數(shù)從66次增加到46,913次。因此,當(dāng)交易執(zhí)行中發(fā)生大量狀態(tài)沖突時(shí),回滾成為樂觀并行化的沉重負(fù)擔(dān)。
Sui執(zhí)行中的時(shí)間分析
以下圖表展示了Sui在ETHToken轉(zhuǎn)賬合約測(cè)試和Voting合約測(cè)試中的耗時(shí)明細(xì)。在Sui的并行執(zhí)行引擎中,有三個(gè)主要步驟:(1)排隊(duì)時(shí)間:交易被事務(wù)管理器選中之前的等待時(shí)間;(2)任務(wù)管理時(shí)間:交易被放入Sui的ExecutingTxns哈希圖或PendingTxns哈希圖,到它被Sui的ExecutionDriver接收之間的時(shí)間;(3)函數(shù)執(zhí)行時(shí)間:由ExecutionDriver中的工作線程執(zhí)行合約函數(shù)的時(shí)間。
任務(wù)管理時(shí)間涉Locking和等待兩個(gè)部分。對(duì)比這兩個(gè)圖表可以看出,Voting測(cè)試中的任務(wù)管理時(shí)間占整個(gè)執(zhí)行時(shí)間的比例明顯比ETHToken轉(zhuǎn)賬測(cè)試大得多。這是因?yàn)樵赩oting測(cè)試中,訪問共享對(duì)象需要通過Locking和等待來避免沖突,使得任務(wù)管理時(shí)間比函數(shù)執(zhí)行時(shí)間和排隊(duì)時(shí)間多了2到4個(gè)數(shù)量級(jí)。相比之下,在ETHToken轉(zhuǎn)賬測(cè)試中,由于只使用了OwnedObjects,繞過了并發(fā)控制,任務(wù)管理時(shí)間要少得多。
Aptos和Sui的局限性
總結(jié)來說,Aptos采用樂觀并行化,即使在存在沖突的情況下也允許并行交易執(zhí)行。這種基于樂觀并發(fā)控制(OCC)的方法對(duì)以讀取為主的工作負(fù)載非常有效,這在寫入請(qǐng)求稀少的數(shù)據(jù)庫(kù)和大數(shù)據(jù)系統(tǒng)中較為常見。然而,在Blockchain系統(tǒng)中,由于鏈上執(zhí)行涉及的gas費(fèi)用,這種方法可能會(huì)產(chǎn)生巨大的Gas開銷。實(shí)際上,用戶通常將只讀請(qǐng)求(例如歷史交易或區(qū)塊查詢)發(fā)送到像Etherscan這樣的鏈下數(shù)據(jù)庫(kù),而寫入請(qǐng)求則用于鏈上執(zhí)行。在這種情況下,像Aptos這樣的OCC系統(tǒng)將頻繁遇到交易「Suspend」(中止)和掛起,從而降低并行虛擬機(jī)的整體性能。
相比之下,Sui采用悲觀并行化,嚴(yán)格驗(yàn)證交易之間的狀態(tài)依賴性,并通過Locking機(jī)制防止執(zhí)行過程中的沖突。這種基于悲觀并發(fā)控制(PCC)的方法更適合計(jì)算密集型工作負(fù)載,在這種情況下,PCC相關(guān)的開銷甚至小到忽略不計(jì)。但在邏輯簡(jiǎn)單的操作中,PCC相關(guān)的開銷很容易成為性能瓶頸。在現(xiàn)實(shí)世界里,許多在Blockchain系統(tǒng)上執(zhí)行的交易,如ERC20Token轉(zhuǎn)賬、MoveToken轉(zhuǎn)賬或NFT轉(zhuǎn)賬,都涉及相對(duì)簡(jiǎn)單的操作。具體來說,ERC20Tokens轉(zhuǎn)賬通常涉及從一個(gè)地址減去一定金額并將其加到另一個(gè)地址。類似地,MoveToken轉(zhuǎn)賬或NFT轉(zhuǎn)賬涉及將一個(gè)資源或?qū)ο髲囊粋(gè)地址移動(dòng)到另一個(gè)地址。即使要考慮所有權(quán)驗(yàn)證等額外檢查,這些操作也非?焖。此時(shí),PCC的相關(guān)開銷就會(huì)成為并行系統(tǒng)性能的限制因素。
為了解決這些挑戰(zhàn),PREDA提出了一個(gè)幾乎完全避免PCC開銷和OCC重新執(zhí)行需求的系統(tǒng)。該方法通過高效地拆分鏈上狀態(tài)實(shí)現(xiàn)幾乎無沖突的并行執(zhí)行。
Crystality和PREDA的性能表現(xiàn)
在所有合約測(cè)試中,Crystality和PREDA的性能數(shù)據(jù)都顯著優(yōu)于Sei、Aptos和Sui,其中PREDA表現(xiàn)尤為突出,因?yàn)樗栽M(jìn)制模式而非WASM進(jìn)行執(zhí)行。這種高性能得益于幾乎無沖突的并行執(zhí)行。PREDA從設(shè)計(jì)之初就考慮了以下2個(gè)關(guān)鍵環(huán)節(jié):
定義不同的合約狀態(tài)范圍,系統(tǒng)將依據(jù)這個(gè)范圍進(jìn)行狀態(tài)拆分和維護(hù)。
要實(shí)現(xiàn)交易的執(zhí)行流從一個(gè)虛擬機(jī)到另一個(gè)虛擬機(jī)的切換。
PREDA的核心在于引入了可編程作用域(ProgrammableContractScopes),將合約狀態(tài)拆分為不重疊、可并行的細(xì)粒度片段;并引入了異步函數(shù)接力(AsynchronousFunctionalRelay),用于描述不同EVM之間的執(zhí)行流切換。
我們來進(jìn)一步解釋這些概念的含義,在PREDA中,一個(gè)合約函數(shù)被分解為多個(gè)有序步驟,每個(gè)步驟依賴于單一的、可并行的狀態(tài)片段,且不產(chǎn)生沖突。
舉個(gè)例子:通常情況下,Token轉(zhuǎn)賬涉及兩個(gè)步驟:一是提取步驟,即訪問Sender的狀態(tài)并提取指定數(shù)量的Token的,二是存入步驟,即訪問Recipient的狀態(tài)并存入相應(yīng)數(shù)量的Token。像Sei、Aptos和Sui等實(shí)現(xiàn)的最新并行機(jī)制,試圖同步執(zhí)行每個(gè)交易中的所有步驟。如果兩個(gè)交易之間的訪問狀態(tài)是共享的或被更新的,比如當(dāng)Sender或Recipient相同時(shí),這兩個(gè)交易將無法并行執(zhí)行。
然而,PREDA采用了一種可拆分且異步的機(jī)制,其中交易的各個(gè)步驟根據(jù)其數(shù)據(jù)訪問依賴性進(jìn)行分解,使每個(gè)步驟能夠獨(dú)立于其他步驟異步執(zhí)行。對(duì)相同狀態(tài)的訪問嚴(yán)格按照原始交易塊中確定的順序進(jìn)行序列化,并由共識(shí)算法保證,即由區(qū)塊創(chuàng)建者排序。
例如,Token轉(zhuǎn)賬交易Txn0(將Tokens從地址狀態(tài)A轉(zhuǎn)移到狀態(tài)B)和Txn1(從狀態(tài)A轉(zhuǎn)移到狀態(tài)C)可以按照順序兩次訪問A(分別用于Txn0和Txn1),然后并行訪問B和C。
免責(zé)聲明:并行執(zhí)行Blockchain系統(tǒng)調(diào)研文章轉(zhuǎn)發(fā)自互聯(lián)網(wǎng),版權(quán)歸其所有。
文章內(nèi)容不代表本站立場(chǎng)和任何投資暗示。加密貨幣市場(chǎng)極其波動(dòng),風(fēng)險(xiǎn)很高,可能不適合所有投資者。在投資加密貨幣之前,請(qǐng)確保自己充分了解市場(chǎng)和投資的風(fēng)險(xiǎn),并考慮自己的財(cái)務(wù)狀況和風(fēng)險(xiǎn)承受能力。此外,請(qǐng)遵循您所在國(guó)家的法律法規(guī),以及遵守交易所和錢包提供商的規(guī)定。對(duì)于任何因使用加密貨幣所造成的投資損失或其他損失,本站不承擔(dān)任何責(zé)任。
Copyright © 2021.Company 元宇宙YITB.COM All rights reserved.元宇宙YITB.COM