今天進行了在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,相關信息可從下面網站獲取: