正文
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