作者: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 來構建自己的高性能、可靠的系統。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。