作者:Storm Slivkoff, Georgios Konstantopoulos;編譯:深潮TechFlow
介紹
負載測試是構建開發彈性高、性能優秀數據系統的關鍵步驟。然而,負載測試在加密貨幣基礎設施開發中並沒有得到廣泛應用。我們非常高興地引入了Flood,這是一款專門針對RPC 端點性能分析的基準測試工具,以填補這一空白。
最初,我們將Flood 作為一種工具來優化Reth,並了解其在不同負載下的延遲和吞吐量權衡。後來,我們發現除了Reth 之外,Flood 在優化許多類型的加密貨幣基礎設施性能方面具有重要的實用價值。
讓我們一起看看吧。
什麼是負載測試,為什麼它很重要?
負載測試是指測量系統受不同工作負載影響時性能特徵的變化。這種方法背後的關鍵見解是,當系統承受越來越多的負載時,吞吐量、延遲和錯誤率等性能指標通常會降低。因此,觀察系統在不同控制負載下的表現可以揭示系統瓶頸、故障模式和最終性能容量等信息。
通過負載測試獲得的信息可以用於許多方面。當系統正在開發時,負載測試可以突出顯示哪些系統瓶頸需要優先改進。當比較兩個系統時,負載測試可以揭示哪個系統更具性能或可靠性。作為其中一種特殊情況,負載測試可以比較單個系統的兩個不同硬件或軟件配置。在每種情況下,負載測試都可以實現高度優化的系統開發。
如何對區塊鏈節點進行負載測試?
我們的重點是RPC,這是通常用於從區塊鏈節點提取數據的通信協議。
目前,衡量RPC 性能最常見的方法不是負載測試,而是延遲測試:您向RPC 節點發送一個請求,並測量獲得響應所需的時間。各種RPC 提供商的延遲測試可以在各個網站上找到。不幸的是,這種類型的測試對節點性能提供了有限的視圖,因為它幾乎沒有揭示系統在負載下的行為。
在區塊鏈中,工作負載可以通過兩種重要方式變化。經典的變量是大小。每秒10,000 個請求的負載對系統的壓力比每秒100 個請求的負載更大。另一個負載變量是RPC 方法。對於從區塊鏈節點中提取的每種類型的數據,都有不同的RPC 方法。例如,塊vs 事務vs 日誌vs 踪跡。每個RPC 方法對系統施加不同類型的負載。一些RPC 方法受存儲IO 限制,而其他方法受CPU 限制。
什麼是Flood?
我們根據這些原則開發了一個負載測試工具,稱為Flood。與延遲測試不同,Flood 通過負載測試以及擴展測試覆蓋範圍到所有相關的RPC 方法,為RPC 端點的性能特徵提供了前所未有的視圖。
Flood 由三個基本組件組成:
-
調用生成引擎:Flood 生成大量參數化的RPC 調用集,隨機採樣分佈類似於不同類型的區塊鏈工作負載。 Flood 利用Paradigm Data Portal 數據集確保完全覆蓋區塊鏈歷史。
-
負載測試引擎:然後,Flood 編排Vegeta(用Go 編寫的高性能負載測試工具)使用這些調用進行對RPC 端點的負載測試。
-
報告引擎:Flood 在執行測試後,使用各種圖表、表格和報告總結結果。這些摘要易於集成到腳本和數據中。
每個組件都可以高度配置,使Flood 能夠涵蓋廣泛的測試場景和環境。
Flood 能做什麼?
在Flood 的常規操作過程中,用戶指定要測試的RPC 方法以及RPC 端點列表。例如,您可能想測試Reth 的兩個版本的eth_getLogs 的性能。 Flood 將運行不同的控制負載來測試這些RPC 端點。例如,它可能以每秒1,000、2,000、4,000 和8,000 個請求的速度運行eth_getLogs。 Flood 然後將顯示表格和圖表,總結性能指標如何隨負載變化。輸出看起來像這樣:
在負載下性能指標降級的特定方式提供了豐富的見解,可揭示系統瓶頸和最終性能容量。
除此之外,Flood 還提供了高級功能,以適應各種類型的高級用戶:
-
Flood 可以使用不同的負載測試計劃,包括:“壓力測試”(隨著時間的推移逐漸增加負載),“峰值測試”(大量突然的負載,然後是小負載)和“浸泡測試”(長時間運行負載)。
-
Flood 可以編排負載測試在每個RPC 節點上原生模式運行,以消除由網絡瓶頸引起的噪聲。
-
Flood 具有“相等性”測試模式,可檢查每個RPC 端點是否返回相同的響應。
為什麼要構建Flood?
在Paradigm,我們正在開發一種名為Reth 的新節點實現,性能是其主要目標之一。我們開發了Flood 來詳細描述Reth 的性能特徵。我們已經使用Flood 揭示了在各種工作負載和系統配置下出現的眾多Reth 性能瓶頸。然後,解決了這些瓶頸。通過Flood,我們創建了一個緊密的反饋循環,使Reth 開發人員可以高度可見地了解任何代碼庫更改如何轉化為端到端系統性能。
除了Reth 之外,我們認為Flood 將能夠幫助解決許多與RPC 節點有關的未解答的問題:
-
當運行節點時,哪些硬件規格最重要?存儲IO 相對於RAM 速度、RAM 容量和CPU 速度的重要性如何? RAID 值得嗎?
-
每個第三方RPC 提供商的每個RPC 方法的有效速率限制是多少?
-
哪個節點客戶端為不同類型的工作負載提供最佳性能?
結論
在本文中,主要介紹了Flood,一種負載測試工具,它為區塊鏈節點的性能特徵提供了前所未有的視圖。雖然最初構建Flood 是為了優化Reth 的開發,但我們認為它將成為其他類型的高性能加密貨幣基礎設施開發的重要工具。我們期待看到其他人如何使用Flood 來構建自己的高性能、可靠的系統。