【问题标题】:Performance Issue with Http2 vs Http1.1Http2 与 Http1.1 的性能问题
【发布时间】:2020-06-03 05:52:23
【问题描述】:

我已经为 tomcat9 应用程序从 http1.1 升级到 HTTP2。这次升级后,我可以看到其余 API 的性能变慢了。我对 1000 个样本进行了负载测试,结果,HTTP1.1 具有更好的吞吐量和平均响应时间,但我期望它适用于 HTTP2。

是否有任何必须完成的配置或我遗漏了什么?

PS:响应的Content-type是application/json类型。

【问题讨论】:

  • 您是在比较两者的 HTTPS 吗?你每次只打一个电话吗(HTTP/2 主要更适合多个调用重用同一连接的用例,并且类似于 HTTP/1.1 我只打一个电话)?您的通话是否通过低延迟、高带宽连接(例如在数据中心内)?
  • 此应用程序在 tomcat 中运行,其中为 http1.1 公开了 8080 端口,为 http2 公开了 8443 端口以及 SSL(HTTPs)。我正在使用 JMeter 从并发线程创建 1000 个请求。这些请求不是一一对应的。

标签: spring tomcat https http2


【解决方案1】:

您将不带 HTTPS 的 HTTP/1.1 与带 HTTPS 的 HTTP/2 进行比较。这并不是单独对协议进行真正的比较,因为 HTTPS 有很大的开销——尤其是对于一个连接。

是的,HTTP/2 通常需要 HTTPS,因为没有浏览器支持没有 HTTPS 的 HTTP/2,但浏览器再次对不安全的仅 HTTP 连接和限制功能(如 HTTP/2、Brotli、Service Workers、Geo)越来越热心。 .. 等等还是到 HTTPS。

HTTP/2 over HTTPS can beat HTTP/1.1 over HTTP 在某些情况下,但总的来说,这是一个非常糟糕的开始。

此外,当每个连接仅发出一个请求 (like you are in jMeter using threads) 时,HTTPS 的开销将占连接的很大一部分,因为建立连接时需要发生 HTTPS 握手。同一连接上的未来请求不会产生与一般情况下相同的费用,加密/解密部分在现代硬件上相对较快,因此不会产生明显的延迟 - 但初始设置部分肯定会。

最后,由于multiplexing 的原因,HTTP/2 通常比 HTTP/1.1 比 HTTP/1.1 速度慢、延迟高。如果在同一网络上进行测试,我怀疑您可能正在这样做,基本上没有网络延迟,那么 HTTP/2 相对于 HTTP/1.1 的优势可能并不明显。

【讨论】:

  • 好的,我用 HTTPS 检查了 HTTP/1.1 和 HTTP/2。结果仍然大相径庭。 HTTP/2 的吞吐量几乎是 HTTP/1.1 的一半。由于没有网络延迟并且两个测试都在本地进行,这是可以接受的行为吗?
  • 老实说这似乎很意外。
  • 内容类型(我使用的是应用程序/JSON。)或 java 版本是否存在问题,因为 java9 中有完整的与 http2 相关的功能,而我使用的是 java8?
猜你喜欢
  • 1970-01-01
  • 2016-08-17
  • 2015-06-11
  • 2016-06-22
  • 2013-04-14
  • 2013-02-27
  • 2017-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多