HTTPS 连接保持活动性能

时间:2021-05-01 21:30:17

标签: performance http keep-alive

有谁知道发出允许使用保持活动的 HTTPS 请求与不允许使用的 HTTPS 请求所花费的总时间之间有什么区别,以毫秒和百分比为单位?为了解决这个问题,我们假设一个 Web 服务器有一个名为 /time 的 GET 端点,它只返回服务器的本地时间,并且客户端平均每分钟调用一次该端点。

我的猜测是,将服务器放在我的家庭局域网上,并从局域网上的笔记本电脑调用 /time 需要 200 毫秒。保持活动状态可能需要 150 毫秒。所以这是 50 毫秒的差异,以及 25% 的改进。

我的第二个问题类似,但只考虑服务器处理时间。假设服务器需要 100 毫秒来处理 GET /time 请求,但在保持活动状态下只需要 50 毫秒来处理。这快了 50 毫秒,但性能提升了 50%,这非常有意义,因为它增加了服务器的容量。

2 个答案:

答案 0 :(得分:0)

我认为你在这里混淆了很多东西。 HTTP 协议中的 Keepalive 标头表明客户端不介意通过同一连接接受多个请求。

Connection 是一个与底层 TCP 协议相关的术语,建立它有一个开销(三路握手)。另一方面,过多的连接会同时损害服务器的性能。这就是存在这些选项的原因。

HTTPS 意味着 HTTP 协议之上的安全相关工作流,我怀疑它与您的问题的上下文无关。

因此,如果您花一分钟谈谈请求,则没有任何显着差异。连接建立的开销大约是几十毫秒,因此您会注意到从每秒数百个请求开始的差异。

答案 1 :(得分:0)

这是我的实验。它不是 HTTP,但它很好地说明了保持连接有效的好处。

我的设置是一个服务器网络,它们创建自己的安全连接。 我写了一个压力测试,在 Server1 上创建了 100 个线程。每个线程打开一个 TCP 连接并与 Server2 建立安全通道。 server2 上的线程发送数字 1..1000,Server1 上的线程只是读取它们,然后向 Server2 发送“OK”。 TCP 连接和安全通道“保持活动状态”。

第一次运行:

  • 在 Server1 上创建了 100 个线程
  • 在 Server1 和 Server2 之间建立了 100 个 TCP 连接
  • 在 Server2 上创建了 100 个线程(为 Server1 请求提供服务)
  • 建立了 100 个安全通道,每个线程一个

总运行时间:10 秒

第二次运行:

  • 在 Server1 上创建了 100 个线程(但这些线程可能已被 JVM 在之前的运行中重用)
  • 不需要新的 TCP 连接。旧的被重用。
  • 没有在 Server2 上创建线程。他们仍在等待请求。
  • 未建立安全通道

总运行时间:1 秒