Paradigm:flood——支持EVM節點測試的負載測試工具

marsbit 發佈 2023-12-21T20:26:48.972496+00:00

免責聲明:本文旨在傳遞更多市場信息,不構成任何投資建議。文章僅代表作者觀點,不代表MarsBit官方立場。小編:記得關注哦來源:MarsBit簡介負載測試是開發彈性、高性能數據系統的關鍵步驟。然而,負載測試尚未廣泛應用於加密貨幣基礎設施的開發。

免責聲明:本文旨在傳遞更多市場信息,不構成任何投資建議。文章僅代表作者觀點,不代表MarsBit官方立場。

小編:記得關注哦

來源:MarsBit

簡介

負載測試是開發彈性、高性能數據系統的關鍵步驟。然而,負載測試尚未廣泛應用於加密貨幣基礎設施的開發。我們很高興能夠通過引入flood來彌補這一差距,這是一個專門為RPC端點的性能分析而設計的基準測試工具。

我們最初構建的flood目的是優化Reth,並了解其在各種負載下的延遲和吞吐量。然而,我們認為,除Reth之外,flood在優化許多類型的加密基礎設施的性能方面具有重要的效用。

我們很高興在Apache/MIT許可下將flood作為免費的開源軟體進行開源。它的代碼和安裝說明可以在Github存儲庫中找到。Flood既可以從命令行使用,也可以作為python庫使用。還有一個Docker的flood鏡像,便於集成到CI/CD和其他類型的管道( pipeline)中。

什麼是負載測試,為什麼它很重要?

負載測試指的是測量系統的性能特徵如何受到不同類型的工作負載的影響。這種方法背後的關鍵見解是,當系統承受越來越多的負載時,吞吐量、延遲和錯誤率等性能指標通常會降低。因此,觀察不同受控負載下的系統可以發現系統的瓶頸、故障模式和最終性能能力。

負載測試獲得的信息可以通過多種方式加以利用。當系統處於主動開發狀態時,負載測試會突出顯示最需要改進的系統瓶頸。在比較兩個系統時,負載測試可以揭示哪個系統性能更好或更可靠。作為一種特殊情況,負載測試可以比較單個系統的兩個不同的硬體或軟體配置。在每種情況下,負載測試都可以開發高度優化的系統。

如何加載測試區塊鏈節點?

我們的重點是RPC,這是通常用於從區塊鏈節點提取數據的通信協議。

目前,測量RPC性能最常用的方法不是負載測試,而是延遲測試:你向RPC節點發送請求,並測量獲得響應所需的時間。各種RPC提供程序的延遲測試可以在各種網站上找到。不幸的是,這種類型的測試提供了有限的節點性能視圖,因為它幾乎沒有揭示系統在負載下的行為(詳情請參閱我們關於測量延遲和吞吐量的文章)。

在區塊鏈的環境中,工作負載可以在兩個重要方面發生變化。典型的變量是規模。與每秒100個請求的負載相比,每秒10,000個請求的負載會給系統帶來更大的壓力。另一個負載變量是RPC方法。對於從區塊鏈節點提取的每種類型的數據,都有不同的RPC方法。例如,區塊vs交易vs日誌vs跟蹤。每個RPC方法都將不同類型的負載放在系統上。一些RPC方法受存儲IO的約束,而另一些方法受CPU的約束。

什麼是flood?

考慮到這些原則,我們開發了一個稱為flood的負載測試工具。flood通過以下方式為RPC端點的性能特徵提供了前所未有的視角:

1) 採用負載測試而不是延遲測試;

2) 將測試覆蓋範圍擴展到所有相關的RPC方法。

flood由3個基本部分組成:

調用生成引擎:flood生成大型參數化RPC調用集,隨機抽樣,分布類似於不同類型的區塊鏈工作負載。flood利用Paradigm Data Portal數據集來確保全面覆蓋區塊鏈歷史。

負載測試引擎:flood然後調用Vegeta(一個由@tsenart在Go語言中編寫的高性能負載測試工具),使用這些調用對RPC端點進行負載測試。

報告引擎:在執行測試後,flood用各種圖表、表格和報告總結結果。這些摘要很容易集成到腳本和數據管道中。

這些組件中的每一個都是高度可配置的,使flood能夠覆蓋廣泛的測試場景和環境。

flood能做什麼?

在flood的典型操作中,用戶指定他們想要測試的RPC方法以及RPC端點列表。例如,你可能希望在兩個版本的Reth上測試eth_getLogs的性能。隨後,flood將針對這些RPC端點運行不同的受控負載。例如,它可能以每秒1,000、2,000、4,000和8,000個請求的速度運行eth_getLogs。繼而,Flood將顯示表格和圖表,總結性能指標如何隨負載變化。輸出與下圖相似的圖標:

性能指標在負載下降低的特定方式為了解系統的瓶頸和最終性能容量提供了豐富的見解。有關解釋和利用負載測試數據的詳細信息,我們推薦閱讀Cesarini的「Designing for Scalability with Erlang/OTP」第15章。

除了這一簡單的操作模式,flood還提供了高級功能,以適應各種類型的用戶:

Flood可以使用不同的負載測試計劃,包括:「壓力測試」(隨著時間的推移逐漸增加負載),「峰值測試」(一個大的突然負載隨後是小負載)和「浸泡測試」(長時間運行負載)。

flood可以協調負載測試,在每個RPC節點上以本地模式運行,以消除網絡瓶頸造成的不便。

flood有一個「equality」測試模式,檢查每個RPC端點是否返回相同的響應。

為什麼構建flood?

在Paradigm,我們正在開發一種名為Reth的新節點實現,性能是其主要目標之一。我們開發flood是為更詳細地描述Reth的性能。我們已經使用flood發現了在各種工作負載和系統配置下出現的許多Reth性能瓶頸。這些瓶頸隨後得到了糾正。通過flood,我們創建了一個緊密的反饋循環,Reth開發者可以充分了解任何代碼庫更改如何轉化為端到端系統性能。

在Reth之外,我們相信flood將能夠幫助解決許多與RPC節點相關的未解決的問題:

運行節點時,哪些硬體規格最重要?存儲IO與RAM速度、RAM容量與CPU速度的相對重要性是什麼?RAID值得嗎?

對於每個第三方RPC提供商,每個RPC方法的有效速率限制是什麼?

哪個節點客戶端為不同類型的工作負載提供了最佳性能?

結論

在這篇文章中,我們介紹了flood,這是一個負載測試工具,它提供了一個前所未有的區塊鏈節點性能特徵視圖。雖然我們最初構建flood是為優化Reth的開發,但我們相信它將為其他類型的高性能加密基礎設施的開發釋放更多活力。我們期待看到更多人使用flood來構建其高性能和可靠的系統。

關鍵字: