spring - Http2 与 Http1.1 的性能问题
问题描述
我已经为 tomcat9 应用程序从 http1.1 升级到 HTTP2。这次升级后,我可以看到其余 API 的性能变慢了。我对 1000 个样本进行了负载测试,结果,HTTP1.1 具有更好的吞吐量和平均响应时间,但我期望它适用于 HTTP2。
是否有任何配置必须完成或我错过了什么?
PS:响应的 Content-type 是 application/json 类型。
解决方案
您正在将不带 HTTPS 的 HTTP/1.1 与带 HTTPS 的 HTTP/2 进行比较。这并不是对协议的真正比较,因为 HTTPS 有很大的开销——尤其是对于一个连接。
是的,HTTP/2 通常需要 HTTPS,因为没有浏览器支持没有 HTTPS 的 HTTP/2,但浏览器再次对不安全的仅 HTTP 连接和限制功能(如 HTTP/2、Brotli、Service Workers、Geo...等)越来越热心。 . 无论如何到 HTTPS。
在某些情况下,基于HTTPS 的 HTTP/2可以击败基于 HTTP 的 HTTP/1.1,但总的来说,这是一个落后的起点。
此外,当每个连接只发出一个请求时(就像你在 jMeter 中使用线程一样),由于建立连接需要 HTTPS 握手,HTTPS 的开销将占连接的很大一部分。同一连接上的未来请求不会像一般情况下具有相同的费用,加密/解密部分在现代硬件上相对较快,因此不会产生明显的延迟 - 但初始设置部分肯定会。
最后,HTTP/2 通常比 HTTP/1.1 比 HTTP/1.1 更快,因为在很大程度上是由于多路复用而导致的较慢、高延迟的连接。如果在同一个网络上进行测试,我怀疑你可能正在这样做,基本上没有网络延迟,那么 HTTP/2 相对于 HTTP/1.1 的好处可能并不明显。
推荐阅读
- python - 问题 Tkinter:如何正确调整窗口大小?
- linux - 如何强制 echo 的输出颜色遵循 bash 脚本中定义的颜色?
- visual-studio - 如何通过 Visual Studio 部署到 docker-registry
- python - 使用 sudo motion 运行 python 脚本无法获得输出
- python - 我的 .py 文件在运行后立即关闭而不给出输出
- python - Snakemake on cluster: OutputException and submit one job for each wildcard item
- javascript - 在选择值更改时延迟渲染组件 - React
- git - databricks git 集成是否支持笔记本删除功能?
- java - 如何在java中将元素的值从一个arraylist分配和存储到另一个arraylist
- flutter - 构建项目pipeline.yml时出现错误?