Rust編寫的HTTP服務器性能竟然遠超Nginx


今天進行了在HTTP服務器上的性能對比測試,Rust的性能竟然是Nginx的兩倍,真是震驚到我了。。。。

自從兩個月前我在gitee上發布了開源HTTP服務器軟件Module Proxy后,一直沒來得及進行性能的壓力測試,今天得空補上這一環。

測試環境

工作筆記本,AMD銳龍處理器 R7 4800U,8核16線程。主操作系統 windows10,虛機安裝CentOS7,分配4核CPU。

測試客戶端:apache ab 程序,運行在宿主機windows上。

測試對象:Nginx 和 Module Proxy 兩款HTTP服務軟件, 運行在虛機Linux上,按默認安裝配置啟動服務。

測試計划

進行靜態html的壓力測試,測試的html文件大約1K字節。

分別用ab進行10萬次的壓力測試,測試進行三輪,配置不同的並發線程數:

ab -n 100000 -c 1 http://192.168.152.128/test.html #無並發 ab -n 100000 -c 5 http://192.168.152.128/test.html #並發5線程 ab -n 100000 -c 10 http://192.168.152.128/test.html #並發10線程

記錄測試總時長,每秒傳輸字節數,CPU使用量三個參數。

測試結果

  Nginx Module Proxy
總時長(秒) 傳輸效率(Kbytes/sec) CPU使用量 總時長(秒) 傳輸效率(Kbytes/sec) CPU使用量
1線程 172.4 802.70 10% 205.5 611.18 44%
5線程 65.4 2117.48 24% 30.7 4096.63 140%
10線程 71.0 1950.02 19%~29% 26.1 4808.24 160%

Nginx在單線程時性能領先Module Proxy,總時長和傳輸效率都領先。

5線程並發,Module Proxy差不多比Nginx快兩倍。

10線程時,已超出了Nginx的性能上限,CPU使用量在19%~29%之間跳躍,這時Nginx已不在線性工作區間內,因此性能還不如5線程並發;而Modue Proxy仍體現了良好的線性,兩者之間的性能對比已無多大意義。

結論分析

Nginx一直以高性能著稱,測試結果確實震驚了我。

Module Proxy是Rust語言開發的HTTP服務軟件,除了Rust本身不弱於C語言的性能外,取得如此成績主要是使用了事件驅動的非阻塞I/O庫Tokio。Tokio是基於多線程,由操作系統的事件隊列(epoll,kqueue,IOCP等)支持的任務調度庫,Tokio也是Rust編程語言編寫的,它本身就非常快。

Module Proxy 不僅僅能搭建靜態HTTP網站,最大特點是反向代理,能將HTTP代理轉發為Socket,相關信息可從下面網站獲取:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM