理论上的优点

  • 二进制分帧
  • 首部压缩
  • 流量控制
  • 多路复用
  • 请求优先级
  • 服务器推送

当前Oceanus对标nginx社区版1.17.4 & bugfix 1.17.9。push不建议用,存在BUG

理论参考 https://imququ.com/post/nginx-http2-patch.html

注!实践(实验)结果的科学性

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



  • 无标签