作者:Ali Sheikh,加密分析師;翻譯:金色財經xiaozou
本文將概述區塊鏈的並行設計架構,借用三個相關例子:Solana、Sei和Monad。本文強調樂觀並行和確定性並行之間的區別,並了解這些鏈上的狀態和內存訪問的細微差別。
1837年,計算機科學家和數學家Charles Babbage(查爾斯·巴貝奇)設計了“Analytical Engine(分析機)”,爲並行計算奠定了理論基礎。如今,並行化是加密世界的一個關鍵主題,區塊鏈正試圖擴展處理、效率和吞吐量的邊界。
並行計算使許多計算或進程能夠同時執行,而不是必須按順序或一個接一個地執行計算。並行計算指的是將較大的問題分解成多個較小的獨立部分,這些部分可以由多個通過共享內存進行通信的處理器來執行。並行系統具有許多優點,例如提高效率和速度、可擴展性、改進可靠性和容錯性、優化資源利用率以及處理超大數據集的能力。
然而,認識到並行化的效力取決於底層體系結構和實現的細節是至關重要的。區塊鏈的兩個核心瓶頸是加密功能(哈希函數、籤名、橢圓曲线等)和內存/狀態訪問。對於區塊鏈來說,設計高效並行系統的關鍵組件之一在於狀態訪問的細微差別。狀態訪問是指交易讀取和寫入區塊鏈狀態的能力,包括存儲、智能合約和账戶余額。爲了使並行區塊鏈有效且具有高性能,必須優化狀態訪問。
目前在優化並行化區塊鏈的狀態訪問方面有兩個思想流派:確定性並行和樂觀並行。確定性並行要求代碼明確地預先聲明區塊鏈狀態的哪些部分將被訪問和修改。這讓系統可以事先確定哪些交易是可以並行處理的,而不會發生衝突。確定性並行支持可預測性和高效率(特別是在大部分獨立交易的情況下)。然而,它確實給开發人員帶來了更多的復雜性。
樂觀並行不需要代碼預先聲明其狀態訪問就可並行處理交易,就好像不會發生衝突一樣。如果出現衝突,樂觀並行將重新運行、重新處理或串行運行衝突交易。雖然樂觀並行化爲开發人員提供了更大的靈活性,但衝突需要重新執行,因此當事務不衝突時,這種方法是最有效的。至於哪一種方法更好,還沒有正確答案。它們只是實現並行化的兩種不同的可行方法。
下面我們先來探索非加密並行系統相關的一些基礎知識,然後再來看區塊鏈並行執行的設計空間,我們將重點關注三個核心領域:加密並行系統概述、內存和狀態訪問方法以及並行設計機會。
通過我們剛剛了解到的關於並行計算的功能和並行系統的優勢,現在就很容易理解爲什么並行計算的採用在最近幾年开始流行起來。而且在過去的幾十年裏,並行計算就已呈現日益流行之勢並實現了許多突破。
醫學影像:並行處理從根本上改變了醫學影像,帶來各種影像模式(如MRI、CT、X射线和光學斷層掃描)的速度和分辨率的顯著提高。英偉達處在這些進步的最前沿,通過其並行處理工具包爲放射科醫生提供更加強大的人工智能功能,使影像系統能夠更有效地處理更多的數據和計算負載。
天文學:一些新的天文現象,比如對黑洞的理解,只有使用並行超級計算機才能實現。
Unity遊戲引擎:Unity引擎使用GPU能力(專爲大規模圖形工作負載構建)以幫助提高性能和速度。該引擎配備了多线程和並行處理功能,帶來無縫的遊戲體驗,能夠創建復雜逼真的遊戲環境。
讓我們來看看三個已部署並行執行環境的區塊鏈。首先,我們來看Solana,然後是兩個基於EVM的鏈——Monad和Sei。
從高層來看,Solan的設計理念是區塊鏈創新應隨硬件進步而發展。隨着時間的推移,硬件根據摩爾定律不斷改進,Solana的設計將受益於性能和可擴展性的提高。Solana聯合創始人Anatoly Yakovenko在五年多以前就設計了Solana的最初並行架構,今天,並行性作爲區塊鏈設計原則正迅速傳播开來。
Solana使用確定性並行方式,這來自於Anatoly過去處理嵌入式系統的經驗,在嵌入式系統中,通常會預先聲明所有狀態。這使CPU能夠知道所有的依賴關系,從而使它能夠預先載入內存的必要部分。結果就是優化了系統執行,但是再一次,它要求开發人員預先做好額外的工作。在Solana上,程序的所有內存依賴都是必需的,並在構建的交易(即訪問列表)中進行聲明,從而使運行時(runtime)能夠高效地調度及並行執行多個交易。
Solana架構的下一個主要組件是Sealevel VM,它是Solana的並行智能合約運行時。Sealevel原生支持基於驗證者的內核數量並行處理多個合約和交易。區塊鏈中的驗證者是負責驗證交易、提議新區塊以及維護區塊鏈完整性和安全性的網絡參與者。由於交易預先聲明哪些帳戶需要讀寫鎖定,因此Solana調度器能夠確定哪些交易可以並行執行。正因如此,當涉及到驗證時,“區塊生產者”或Leader就能夠對數千個待處理交易進行排序,並且並行調度非重疊交易。
Solana的最後一個設計元素是“pipelining”。當需要以一系列步驟處理數據,並且每個步驟由不同的硬件負責時,就會觸發pipelining。這裏的關鍵想法是獲取需要串行運行的數據,並使用pipelining將其並行化。這些pipelines可以並行運行,並且每個pipeline階段可以處理不同的交易包。
這些優化允許Sealevel同時組織和執行獨立的交易,利用硬件的能力,一次使用一個程序處理多個數據點。Sealevel按programID對指令進行排序,並在所有相關帳戶上並行執行相同指令。
通過這些創新,我們可以看到Solana被有意設計爲支持並行化。
Sei是一個通用的、开源L1區塊鏈,專用於數字資產交易。Sei V2採用樂觀並行方法,因此,它對开發人員來說更加友好。在樂觀並行模式下,智能合約可以更加無縫地並行執行,不需要开發人員預先聲明它們的資源。這意味着鏈樂觀地並行運行所有交易。盡管如此,當發生衝突時(即多個交易訪問相同的狀態),區塊鏈將跟蹤每個衝突交易所影響的特定存儲組件。
Sei區塊鏈使用“樂觀並發控制(OCC)”機制來執行交易。並發交易處理發生在有多個交易同時在系統中活動時。這種交易方式有兩個階段:執行和驗證。
在執行階段,交易被樂觀地處理,將所有讀/寫臨時存儲在特定交易存儲中。此後,每個交易都將進入驗證階段,在驗證階段,臨時存儲操作中的信息將根據先前交易所做的狀態更改進行檢查。如果交易是獨立的,則交易將並行運行。如果一個交易讀取的數據被另一個交易修改過,將產生衝突。Sei的並行系統將通過比較交易的讀取數據集與多版本存儲中的最新狀態變化(這些變化是按交易順序索引的)來識別每個衝突。Sei將在出現衝突的位置重新執行並重新驗證實例。這是一個迭代過程,涉及到執行、驗證和重新運行,才能修復衝突。下圖說明了當出現衝突時Sei是如何處理交易的。
Sei的實現爲EVM开發人員提供了更低的gas費和更廣闊的設計空間。一直以來,EVM環境被限制爲小於50 TPS,這迫使开發人員創建遵循反模式的應用程序。Sei V2讓开發人員能夠接近通常要求高性能和低費用的領域,如DeFi、DePIN和遊戲。
Monad正在建設一個具有完全字節碼兼容性的並行EVM L1。Monad的獨特之處不僅在於它的並行引擎,還在於他們在底層構建的優化引擎。Monad採用了一種獨特的整體設計方法,結合了幾個關鍵特性,如pipelining、異步I/O、共識執行分離,以及MonadDB。
Monad設計的一個關鍵創新是帶有輕微偏移量的pipelining。偏移量允許通過同時運行多個實例來並行化更多進程。因此,pipelining被用來優化許多功能,如狀態訪問pipeling、交易執行pipelining、共識和執行內部pipelining以及共識機制自身內的pipelining。
接下來,我們將具體來看Monad的並行化部分。在Monad中,交易在區塊內是线性排序的,但目標是通過利用並行執行更快地達到最終狀態。Monad的執行引擎設計採用了樂觀並行算法。Monad的引擎同時處理交易,然後執行分析,以確保如果交易被一個接一個地執行,也將取得相同的結果。如果存在任何衝突,則需要重新執行。這裏的並行執行是一個相對簡單的算法,但將它與Monad的其他關鍵創新結合起來,就讓這種方法變得新穎了。這裏需要注意的一點是,即使發生重新執行,通常也很便宜,因爲無效交易所需的輸入幾乎一直保留在緩存中,所以這將是一個簡單的緩存查找。重新執行被確保一定會成功,因爲你已經執行了區塊中之前的交易。
Monad還通過分離執行和共識(類似於Solana和Sei)以及延遲執行來提高性能。其中的想法是,如果你放寬執行條件,以便在達成共識之前完成執行,則可以並行運行執行和共識,從而爲兩者增加額外的時間。當然,Monad使用一種確定性算法來處理這種情況,以確保其中的一個不會跑得太遠而失控。
正如我在本文开頭提到的,狀態訪問是區塊鏈的典型性能瓶頸之一。狀態訪問和內存的設計選擇最終可以決定並行系統的特定實現是否會在實踐中提高性能。下面我們來具體了解並比較Solana、Sei和Monad採用的不同方法。
Solana利用水平擴展來跨多個SSD設備分發和管理狀態數據。如今,許多區塊鏈使用通用數據庫(即LevelDB),這在處理大量並發讀寫狀態數據方面存在限制。爲了避免這種情況,Solana利用Cloudbreak構建了自己的自定義帳戶數據庫。
Cloudbreak是爲跨I/O操作的並行訪問而設計的,而非單純依賴於RAM,這本身就很快。I/O操作(輸入/輸出)是指從外部源(如磁盤、網絡或外圍設備)讀取數據或向其寫入數據的操作。最初,Cloudbreak使用RAM內部索引將公鑰映射到持有余額和數據的帳戶。然而,在撰寫本文時,V1.9索引已經從RAM移到了SSD上。這種轉變允許Cloudbreak在其隊列中同時處理32個(I/O)操作,從而增強了跨多個SSD的吞吐量。因此,可以高效地訪問區塊鏈數據,例如帳戶和交易,就像在使用內存映射文件的RAM中一樣。下圖表明了內存結構。雖然RAM更快,但它的容量比SSD小,而且通常更昂貴:
通過橫向擴展和跨多個設備分發狀態數據,Cloudbreak降低了延遲,提高了Solana生態系統的效率、去中心化程度和網絡彈性。
Sei重新設計了它的存儲——SeiDB——以解決以下幾個問題:寫入放大(維護數據結構需要多少元數據,越小越好)、狀態膨脹、操作緩慢以及性能隨着時間的推移而下降。新的再設計現分爲兩個組件:狀態存儲和狀態承諾。記錄和驗證對數據的任何更改由狀態承諾處理,而在任何時候記錄所有數據的數據庫由狀態存儲(SS)處理。
在Sei V2中,狀態承諾使用內存映射IAVL樹架構(MemIAVL)。內存映射IAVL樹存儲較少元數據,這減少了狀態存儲和狀態同步時間,並使運行完整節點變得更加容易。內存映射IAVL樹表示爲磁盤上的三個文件(kv文件、branch文件和leaf文件);因此,需要跟蹤的元數據更少,這有助於將狀態存儲減少50%以上。新的MemIAVL結構有助於減少寫入放大因子,因爲它減少了維護數據結構所需的元數據。
更新後的SeiDB允許對狀態存儲層提供靈活的數據庫後端支持。Sei認爲,不同的節點運營商的需求和存儲需求不同。因此,SS設計是爲了適應不同的後端需求,爲運營商提供自由度和靈活性,如PebbleDB、RocksDB、SQLite等。
Monad的狀態訪問有一些重要的細微差別。首先,大多數以太坊客戶端利用兩種類型的數據庫:B-Tree數據庫(即LMDB)或日志結構合並樹(LSM)數據庫(即RocksDB、LevelDB)。這兩種都是通用的數據結構,不是爲區塊鏈專門設計的。此外,這些數據庫沒有利用Linux技術的最新進展,特別是在異步操作和I/O優化方面。最後,以太坊本身使用MPT樹管理狀態,MPT樹專用於加密,驗證和證明。主要的問題是,客戶端必須將這個特定的MPT樹集成到更通用的數據庫(即B-Tree / LSM)中,這會帶來嚴重的性能缺陷,例如過多的磁盤訪問。
所有這些都有助於爲Monad決定創建自定義MonadDB數據庫奠定基礎,MonadDB數據庫專用於更高效地處理區塊鏈數據和狀態訪問。MonadDB的一些關鍵特性包括並行訪問數據庫、針對Merkle Trie數據優化的自定義數據庫、優於標准RAM使用的高效狀態訪問、去中心化特性和可擴展性。
MonadDB專爲區塊鏈設計,使其比使用通用數據庫的性能更高。自定義MonadDB專用於高效管理Merkle Trie類型數據,支持同時並行訪問多個Trie節點。雖然MonadDB與上述一些通用數據庫的單次讀取成本是相同的,但MonadDB的關鍵特性是它可以並行運行多個讀取,從而帶來巨大提速。
MonadDB支持對並行訪問數據庫的同步狀態訪問。因爲Monad是從頭开始構建這個數據庫的,所以它能夠利用最新的Linux內核技術和SSD的全部功能來實現異步I/O。使用異步I/O,如果一個交易需要從磁盤讀取狀態,這不應該爲待完成操作帶來阻力。相反,它應該立刻开始讀取並同時繼續處理其他交易。這就是異步I/O顯著加快MonadDB處理速度的做法。Monad能夠通過優化SSD使用以及減少對過多RAM的依賴,收獲更好的硬件性能。這具有與去中心化和可擴展性對齊的額外好處。
總之,通過Solana、Sei和Monad的視角探索區塊鏈中的並行化發展,可以全面了解不同架構和方法是如何提高性能和可擴展性的。Solana的確定性並行注重預先聲明狀態訪問,提供了可預測性和效率,使其成爲高吞吐量需求的應用程序的有力選擇。另一方面,Sei的樂觀並行方法優先考慮了开發人員的靈活性,非常適合交易衝突不頻繁的環境。憑借其獨特的樂觀並行方式和自定義MonadDB,Monad提供了一個創新解決方案,利用最新的技術進步來優化狀態訪問和性能。
每個區塊鏈都提供了一種獨特的方法來解決並行化挑战,並有一套自己的利弊權衡。Solana的設計旨在最大限度提高硬件利用率和吞吐量,而Sei則專注於簡化开發過程,Monad則把重心放在了爲區塊鏈數據提供量身定制的數據庫解決方案。這些差異凸顯了區塊鏈生態系統的多樣性,以及根據應用程序的特定需求選擇合適平台的重要性。
隨着區塊鏈領域的不斷發展,Solana、Monad和Sei所展現出的並行化技術的進步無疑將激發進一步的創新。邁向更高效、更可擴展且對开發人員更加友好的區塊鏈的旅程正在進行中,從這些平台中吸取的經驗將對塑造區塊鏈技術的未來發揮至關重要的作用。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。
標題:以Solana、Sei和Monad爲例 探討並行區塊鏈的設計空間
地址:https://www.torrentbusiness.com/article/97511.html