Go Http 框架性能測評: Fiber vs- Gin vs- Go 標準庫

本內容是對知名性能評測博主 Anton Putra  Fiber vs. Gin vs. Go (stdlib): Performance (Latency - Throughput - Saturation - Availability)[1]: Performance (Latency - Throughput - Saturation - Availability) 內容的翻譯與整理, 有適當刪減, 相關內容和結論以原作地址爲準

介紹

在本視頻 [2] 中,我們將對比 Fiber 和 Gin 這兩個 HTTP 框架,以及 Golang 標準庫 和 Go 1.22 版本新增的改進型多路複用器。爲了進行測試,我會將這些應用部署到 Kubernetes,然後使用 Prometheus 監測 CPU 和 內存 的使用情況,並在 Grafana 中進行可視化展示。

我們還會對比 客戶端延遲 以及每個框架所能處理的 每秒請求數(RPS)。在這次測試中,我增加了外部客戶端的數量,以產生足夠的負載,從而迫使 Kubernetes 對這些應用進行調節。最終,我們會得出一個 明確的勝者

爲了運行此次測試,我在 AWS 上創建了一個 生產級 Kubernetes 集羣,並使用了 m6a.4xlarge 實例類型。如果你想了解更多相關內容,我還有一門專門針對 EKS 初學者 的完整課程 [3]。


框架概述

在 Go 1.22 版本之前,僅使用 Go 標準庫 來開發 REST API 是一項十分困難的任務。其主要原因之一是:標準庫中的 HTTP 請求多路複用器(multiplexer)不支持將 URI 模式映射到 HTTP 方法,而這對於設計 RESTful 資源至關重要。因此,許多開發者最終選擇了使用諸如 Gin 或 Fiber 之類的 第三方路由庫。  (還有如 Gorilla Mux,Chi)

但到了 Go 1.22 之後,其標準庫已經足夠強大,你 不再需要 額外的第三方 Web 框架來構建 REST API。當然,你仍然可以使用一些 外部中間件 來提高開發效率,但標準庫 已經具備了所有必要的功能


測試

現在,讓我們開始部署這些應用到 Kubernetes,並讓它們在 空閒狀態 下運行 10-15 分鐘

可以看到,Gin 框架 運行時的 內存和 CPU 佔用略高,而 Go 標準庫 的資源使用情況與 Fiber 相當接近。

正式測試

接下來,我將部署 20 個客戶端 來爲每個應用 生成流量,並逐步 增加請求量。整個測試耗時 約 1.5 小時,在視頻中將其壓縮成數分鐘,並在最後展示最終結果。

從測試流程來看,每 5 分鐘,我們會 增加額外的 1000 RPS 負載 到每個應用。從一開始,我們就能觀察到明顯的趨勢:

Fiber 基於 Fasthttp 框架,但很多人不喜歡它。Fasthttp 是一個 非標準的 HTTP 實現,它主要 專注於特定場景的高性能優化。除非你 確實需要它的特定優勢,並且瞭解相關風險,否則它 並不是一個推薦的默認選擇。甚至 官方文檔 也建議 大多數情況下應使用標準的 http 庫


推至極限

讓我們繼續運行測試,直到所有應用 開始崩潰


測試結果分析

接下來,我們分別查看 整個測試期間的各項數據圖表

  1. 每秒請求數(RPS):展示了每個應用的最大吞吐量。

  2. 客戶端延遲:測量了從客戶端角度的響應時間。

  1. CPU 使用率:直觀反映了每個框架的計算資源消耗情況。

  1. Kubernetes 限流(Throttling):在理想狀態下應爲 0 秒,但由於我們將應用推至極限,Kubernetes 開始對它們進行 限流

  1. 內存使用情況:展示了每個應用的內存消耗。

最終,Fiber 是本次測試毫無疑問的贏家,但它 並不適用於所有場景。從我的個人觀點來看,你可以 嘗試在下一個 Go Web 或 REST 項目中使用標準庫,因爲它 已經具備所有必要的功能


總結

如果你對 源代碼 有任何改進建議,歡迎提交 Pull Request,我一定會 審覈並進行測試。同時,也歡迎在 評論區 告訴我 你希望我測試哪些內容

參考資料

[1] 

Fiber vs. Gin vs. Go (stdlib): Performance (Latency - Throughput - Saturation - Availability): https://www.youtube.com/watch?v=ok5DDDNsOaQ

[2] 

本視頻: https://www.youtube.com/watch?v=ok5DDDNsOaQ

[3] 

EKS 初學者 的完整課程: https://www.youtube.com/watch?v=aRXg75S5DWA&list=PLiMWaCMwGJXnKY6XmeifEpjIfkWRo9v2l

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/3dHv9czhkIBguytGUK6coA