理论上的优点
- 二进制分帧
- 首部压缩
- 流量控制
- 多路复用
- 请求优先级
- 服务器推送
当前Oceanus对标nginx社区版1.17.4 & bugfix 1.17.9。push不建议用,存在BUG
注!实践(实验)结果的科学性
1、实验的目标要明确且相对独立单一
2、实验的环境要足够干净,且基于可复制最小单元进行
3、实验的结果一定经过实践才可靠
4、实验结果的应考虑时间、空间和不同指标的变化趋势(非单一值)
5、实践需要基于场景的各项单一指标异同表现
搭套环境体验一下细节
需要的东西
openssl1.0.2e以上
Chrome 51以上
nginx 1.9.5以上
验证地址 https://wiki.ida8.cn:5001
查看启用结果:chrome://net-internals/#http2
nginx配置:listen 增加 http2 ,TSL版本
nginx版本: nginx -V 查看是否有 http_v2_module 模块,没有需要编译替换nginx二进制文件
查看openssl版本$ openssl version 版本不够需要升一下
下载 $ wget https://www.openssl.org/source/openssl-1.0.2r.tar.gz
解压 $ tar zxvf openssl-1.0.2r.tar.gz
进入 $ cd openssl-1.0.2r
配置 $ ./config
编译 $ make
安装 $ make install
软硬环境描述
CPU i3 10010 4核8线
内存 16G
网络 10G
链路 用户访问 -
http1 50M上行 - 内网10G webbro - docker nginx - docker confluence wiki
http1.1 50M上行 - 内网10G webbro - docker nginx - docker confluence wiki
http2 50M上行 - 内网10G webbro - docker nginx(https) - docker confluence wiki
容器版本 Linux version 4.4.59+ (root@build3) (gcc version 4.9.3 20150311 (prerelease) (crosstool-NG 1.20.0) ) #25426 SMP PREEMPT Wed Jul 8 03:21:29 CST 2020
应用及版本
nginx version: nginx/1.16.1
OpenSSL 1.0.2u-fips
nginx docker
结果指标
基于http2优点,推测几项验证指标
1、二进制分帧,可能带来的CPU消耗
2、头部压缩,能压掉多少
3、多路复用,从TCP短连切换到TCP长连接的时间消耗有多少
4、服务器推送能节省多少请求耗时
横向维度,包体大小、动静态资源
结果汇总
- 单个请求分析(非整个页面),每个请求能节省不到30个字节。奇怪的是H2的请求头会比H1.1的大,可能是头内容不一致,一致的情况下会省一点
- 整体流量上看是有节省,大约2%,而非SRE给出的20%。每秒10并发,每个并发20+请求,每个请求约省30字节,刚好对上7.4K的宽带减少
- 多路复用不符合预期,连接数上没有明确的TCP长链接感受,依然看到TIME_WAIT,跟H1.1没区别
- 响应上没变化。头一次测试有一点点提升,平均耗时由35.1ms提升到34.1ms。而且数据可能不准,对比看区别在长尾H1.1有一次4个9的长尾,随后做了补测,结果证明响应没有明显提升
- CPU没有明显变化
第一轮验证
第一列,通过nginx https+http2访问wiki
第二列,直接访问wiki
第三列,通过docker nginx 访问wiki
结果表现没有明确方向性变化
主页面请求
静态文本资源
静态图片资源
第二轮验证
相同的nginx 指向同一个wiki 都用https,第一列是1.1 第二列是2
第三轮验证
压力测试,观测带宽,连接数,CPU消耗(带宽有限,先试试)
请求侧报告
http://quake.sankuai.com/agentMonitorController/getTaskReport.do?taskId=828114
http://quake.sankuai.com/agentMonitorController/getTaskReport.do?taskId=828120