淘寶基於Nginx二次開發的Tengine Web服務器聲稱對Nginx做了眾多優化,達到性能提升xx倍雲雲。為了驗證及評估替換Nginx的必要性,筆者自行使用apache的ab工具對Tengine和Nginx做了一次簡單的性能比較
測試工具:Apache HTTP server benchmarking tool
測試機:OS X YOSEMITE(10.10.2)
測試機內存:16G
測試服務器操作系統:CentOS 7.0.1406
測試服務器內存:2G
測試程序Web服務器:NGINX+Netty
測試程序語言:Scala 2.10.3
測試頁面:/login
測試頁面css:4個獨立的css文件
測試頁面js:6個獨立js文件
測試頁面圖片:6個png文件
測試頁面總大小:2744字節
Tengine版本:2.1.0(基於NGINX1.6.2)
NGINX版本:1.6.2
配置優化情況:都使用缺省配置
受限於測試環境和測試時間,只是簡單測試了單用戶單並發到100個用戶5000次並發的情況。每種測試分別執行了10次取平均數。最終測試數據如下:
用戶&並發連接 | 1&1 | 1&100 | 100&5000 | 500&5000 | ||||
Web服務器 | Tengine | Nginx | Tengine | Nginx | Tengine | Nginx | Tengine | Nginx |
平均響應時間(s) | 0.002 | 0.002 | 0.115 | 0.134 | 4.62875 | 4.5275 | 4.76175 | 4.43075 |
測試方式
1. 為盡量保證測試結果的可靠,每種測試都進行10次,取平均值
2. 測試服務器采用VMWARE虛擬機,保證硬件配置一致
3. 每次測試完后,通過鏡像snapshot功能恢復干凈的測試環境
可得到的結論有
1. Tengine和NGINX在單用戶單並發的情況下,性能沒有明顯差異。
2. 在單用戶並發數量少例如100的情況下,Tengine具備微弱優勢;而在用戶量和並發數都增加的情況下,NGINX具備明顯優勢。
其他測試結論
1.在測試過程中還發現,當使用nginx缺省配置做前段反向代理時,比起直接用Netty做Web服務器,訪問效率會下降66%
整個測試並不十分完善和嚴謹,也期待有人可以有更多時間得到更充分的測試數據。沒有測試到的情況有
1. Tengine與nginx在不同頁面大小和復雜度種的表現。因為Tengine聲稱對css,js在web服務器層面進行了合並處理,是否Tengine在特定頁面表現會更加優異,比如獨立css和js數量增加到一定臨界點,但這點在本次測試中沒有發現Tengine的優勢。
2. Tengine與nginx在不同的服務器硬件環境中的性能表現。
但這些測試也足以說明,從訪問效率上來看, Tengine並沒有宣傳的那么優秀。從穩定性考慮,使用原生態的Nginx或許是一個更佳的選擇,畢竟二次開發的產品出問題的可能性要大得多。