HTTPS下tomcat與nginx的前端性能比較
摘要
之前比較http的web服務器的性能.
發現nginx 比 tomcat 要好 50%
然後想到, https的情況下不知道兩者有什麼區別
所以準備再嘗試一下. 換用https進行檢查.
Springboot的設置
server:
ssl:
key-store: keystore.p12
keyStoreType: PKCS12
key-store-password: Testxxxx
enabled: true
port: 5401
Nginx的設置
listen 5402 ssl;
ssl_certificate cert/perf.xxxx.cloud_bundle.crt;
ssl_certificate_key cert/perf.xxxx.cloud.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
簡單測試
tomcat:
ab -c 1000 -n 50000 -k https://127.0.0.1:5401/index.html
nginx:
ab -c 1000 -n 50000 -k https://127.0.0.1:5402/index.html
簡要結果
文件大小 |
tomcat-http-TPS |
tomcat-https-TPS |
nginx-http-TPS |
nginx-https-TPS |
20KB-長連接 |
44094 |
9719 |
66418 |
14565 |
20KB-短連接 |
14121 |
1305 |
18080 |
1846 |
簡要思考
與http的結論一致.
nginx的性能還是 tomcat的 1.5倍,或者是更高.
更需要注意的是. http下長連接是短連接服務性能的 3 倍 以上.
https下長連接是短連接服務性能的, 更是高達 7 倍 以上
所以前後端分離, 使用nginx 應該比使用tomcat要優秀.
並且前端使用 長連接的收效要更好一些.
結果說明事項
注意: 測試發現, 單worker 1000併發時出現大量的 SSL handshake failed (5).
Nginx 對多線程對併發性能提示還是非常明顯的.
8線程https 1860的吞吐量
1線程https 882.04的吞吐量, 並且錯誤率非常高.
Complete requests: 45647
Failed requests: 266
同時間 8 線程的錯誤率如下:
Complete requests: 49998
Failed requests: 2