我有一个 api,我会在其中收到很多 https 请求。由于它是 restful,每次发送 api 时都需要完整的 ssl 握手。启用 http-keepalive 后,请求的延迟大大减少(第一个请求需要相同的时间,但后续请求与 http 一样快)。
现在,我正在尝试使用亚马逊的 elb(我也将使用云端)。我的问题是,在相同的设置下,keep alive 如何工作,来自客户端的请求可以随机路由到不同的机器?
或者每次发出请求时都不可能防止 SSL 握手?
答案1
是的,AWS ELB 将在可能的情况下重新使用与后端的开放连接,同时仍尝试按照配置分配负载。AWS 甚至将此作为最佳实践推荐在他们的文档中:
对于 HTTP 和 HTTPS 侦听器,我们建议您在 EC2 实例中启用保持连接选项,这样负载均衡器就可以重复使用与您的实例的连接来处理多个客户端请求。这可以减少 Web 服务器上的负载并提高负载均衡器的吞吐量。保持连接超时应至少为 60 秒,以确保负载均衡器负责关闭与您的实例的连接。
ETA:请注意,ELB 实际上不会将客户端连接转交给后端。客户端和后端之间的所有请求仍会双向通过 ELB。您可以让 ELB 终止来自客户端的 SSL(假设是 HTTPS),然后创建或重新使用其自己的 HTTPS 连接(如果已配置)到后端,或者您可以选择仅在后端终止 SSL。