簡述當前區塊鏈各模塊的性能瓶頸和挑戰
注:本文來自@chenxingdotli推特,其簡述了決定區塊鏈各模塊的性能瓶頸和挑戰,看看那些漂亮數據背後的水分。 區塊鏈的性能優化是一個很熱的話題。然而,由於區塊鏈係統的複雜性,係統性理解性能優化門檻很高,這就為“性能虛標”提供了空間。前有 “百萬tps” 大躍進,後有 “80萬tps” 宕機鏈。 所以,我希望展開來講一下決定區塊鏈各模塊的性能瓶頸和挑戰,看看那些漂亮數據背後的水分。 1. 網絡模塊 作為一個去中心化的係統,網絡通信是整個係統的基礎,也有人將其稱為 Layer 0。 我將網絡模塊抽象為三層:網絡設施層、節點連結層、廣播協議層。每一層都是下一層的基礎,每一層的性能都是下一層性能的上限。 網絡模塊的帶寬和延遲構成了區塊鏈係統 tps 和 finality 延遲的基礎。 1.1 網絡設施層 帶寬:主要取決於網絡基礎設施的發展,以及區塊鏈節點的配置要求。前幾年公鏈的網絡配置要求一般在 20Mbps 到 100 Mbps. 到 2022 年,Aptos 已經要求 1 Gbps 網絡帶寬了。總之,帶寬要求越高,節點門檻越高,越中心化。 延遲:延遲有一個優化的極限,就是光速。互聯網中的傳輸延遲比光速延遲要更大一些。Conflux 曾經測得的洲際節點延遲可達 200-300ms。如果是那種所有節點都在一個數據中心的“機房鏈”,延遲可以忽略不計。 1.2 節點連結層 節點連結層主要通過鄰居節點間的通信實現網絡中的消息廣播。 帶寬:一般情況下,節點連結層可以獲得接近於網絡設施層的帶寬。也可以選擇犧牲帶寬來降低延遲:例如,當要廣播一條消息時,同時發給所有鄰居(帶寬要求翻幾倍),而不是發完一個再發下一個。 延遲:消息廣播延遲和節點數量有關,節點越多,延遲越高。 目前比特幣和以太坊大概有幾千個節點。根據我們的實驗,如果全網有一萬個世界各地的節點,廣播延遲中位數 3~6 秒,最大可至 15 秒。通過一些協議優化,最大延遲可以再降低一半。 而一些宣稱確認延遲 1~2 秒的公鏈,顯然隻能支撐更少的節點 1.3 廣播協議層 節點連結層隻負責轉發數據塊,而不管數據是什麼。而廣播協議層則定義具體的區塊、交易轉發規則。 帶寬:主要在於如何減少冗餘傳輸。試想,如果每個鄰居都給你發了同一筆交易,是不是很浪費?Conflux 設計的轉發協議 Shrec,就通過減少冗餘,在同等網絡帶寬下將廣播交易的 tps 提升了 6 倍。 不過,隻要網絡設施層帶寬足夠高(比如 1Gbps),即使不優化,這裡也不會成為瓶頸。 延遲:一些共識協議會將廣播協議層的延遲放大若乾倍,例如,比特幣的出塊間隔需要 5 倍於廣播協議層的延遲,而確認需要 6 個塊。因此,優化這裡的延遲至關重要。2016 年,比特幣通過緊湊區塊的設計,將區塊廣播延遲從 120 秒降低到了不到 10 秒。 緊湊區塊不包含完整交易,隻包含交易哈希前 6 字節,因為這些交易已經在網絡中被廣播過並被多數節點收到。這可以加速區塊廣播,使廣播協議層獲得接近節點連結層的延遲。2017年後,高性能公鏈基本都采取了這一設計。 2. 共識模塊 共識協議是區塊鏈係統中最複雜、最精巧的部分,它協調各個互不信任的節點,並為上層應用提供提供可信的去中心化服務。很長一段時間內,對共識模塊的性能優化都是熱點。 帶寬:中本聰共識自身的缺陷導致它的共識帶寬必須處於一個非常低的水平,否則會增加網絡分叉,降低係統安全性。 2017 年後的新協議基本都可以充分利用帶寬了,這不再是一個難題。 不過,有些項目混淆了共識模塊的 tps 和區塊鏈係統的 tps,把充分利用帶寬稱為“無限可擴展”,仿佛網絡帶寬是無限的。 延遲:共識的延遲指區塊從產生到 finalize 需要多久。中本聰共識的確認延遲很差,大概需要 30~60 倍廣播協議層延遲,後續 PoW 協議例如 Bitcoin-NG, OHIE 等也沒有優化這一延遲。Prism 將延遲優化到了 23 倍,Conflux 優化到了 3 倍。PoS 協議我了解得有限,估算大概需要 5 倍延遲。 不過 PoW 和 PoS 協議有一個很大的不同:PoW 參考最大延遲, PoS 參考中位數延遲,而最大延遲和中位數延遲可能有 3 倍差異,所以 PoS 共識普遍延遲表現更好一些。節點少的話,進入 10 秒也不是不可能。至於以太坊這種上了 PoS 共識反而更慢的,隻能說是一個奇葩吧。 共識模塊是“參數虛標”最嚴重的地方。比如,明明需要等 6 個區塊才能達到安全性要求,項目方告訴你 1 個區塊就行,反正沒人攻擊就不會露餡,沒資產就沒人攻擊。 還有一種叫分片的技術:給節點分組,把交易分給各組,每組隻處理自己的交易、相信其他小組。這種技術通過增加小組數量,容易獲得一個很高的 tps 用於吹噓,但相信其他小組會帶來安全風險。所以分片適用於對安全性要求不高的場景,如國產聯盟鏈。 3. 執行模塊 以太坊之所以能在比特幣外開辟一片天地,在於它創造了可編程的數字資產。因此交易執行模塊也是區塊鏈係統的重要的一環。也是在早期的性能優化中被忽視的一環。 執行不再區分帶寬和延遲,隻關心單位時間內處理的交易或計算任務數量。 執行模塊的效率受到計算機係統各個資源的限製。 3.1 CPU資源 在串行執行中,CPU 的性能瓶頸是非常明顯的。在過去 5 年內,CPU 單核性能提升了不到 1 倍。在 EVM 中,如果不考慮存儲訪問,最快的 CPU 大概 1 秒能執行 1 億 gas , 是現在以太坊性能的 80 倍(僅是量級的粗略估計)。 並行執行是利用 CPU 資源的關鍵一步。一些項目在嘗試提出更利於並行的語言模型,例如 Move。 在 Conflux 一項關於 EVM 並行化的研究表示,目前以太坊鏈上交易的並行化潛力是 9 倍 tps。 但是,並行化 VM 有很多的挑戰。比如,理想情形下,交易高度並行;最差情形下,交易相互依賴,隻能串行。那如何設計 gas 定價與 gas limit,使得理想情況可以充分利用並行優化,而最差情況又不至於跟不上執行? 3.2 存儲訪問資源 和網絡設施層一樣,這裡的性能主要取決於硬件的發展和區塊鏈節點的最低配置。除非數據被緩存在內存裡,執行交易時的讀寫性能不可能超越硬盤的讀寫性能。 還拿 Aptos 舉例,他們節點的存儲要求是 40K IOPS,而一筆交易可能涉及到發送者和接受者兩個賬戶的狀態修改,也就是最差情況下網絡隻能支持 2 萬 tps。 但他們的宣稱 tps 是 16 萬,可想而知這後面有多少不公開的前提條件了。 3.3 可驗證存儲結構 可驗證存儲結構是區塊鏈存儲的一個重要數據結構。它允許一個輕節點向一個它不信任的全節點查詢鏈上狀態,是區塊鏈 trustless 裡的最重要一環。在以太坊中,訪問可驗證存儲結構 MPT 比直接訪問數據庫慢 10 倍。所以,有些區塊鏈乾脆去除了可驗證存儲結構,以換取更好的性能。 最後做個總結,區塊鏈的性能優化不是一個追求極限的過程,而是在各種限製下對安全、效率、去中心化程度的取舍。 有些取舍是可以被優化的,比如中本聰共識中,共識帶寬與安全性的矛盾後來被解決了。 有些取舍是不可避免的,如果你要求每個節點配備 256 GB 的內存,就注定了獨立參與者的數量不會太多。 一味地去追求紙面上的高性能,隻會得到一個中心化的宕機鏈。隻有真正去面對和解決性能優化中的問題,才是性能提升的正途。 受篇幅所限,還有很多安全性相關的考量並沒有提到。不過以上內容足以點破很多大餅了。
PA薦讀 -
GameFi 每週回顧 | 2022 年 11 月 14 日至 11 月 20 日
GameFi 每週回顧 | 2022 年 11 月 14 日至 11 月 20 日
02
簡述當前區塊鏈各模塊的性能瓶頸和挑戰
03
NFT 一週回顧 丨2022 年 11 月 14 日至 11 月 20 日⁠
04
BlockPulse 新用戶註冊優惠 註冊就送Early adopters NFT 靈魂綁定代幣(SBT)
快訊