连接多路复用控制 HTTP 1.0 和 1.1 请求切换和服务器 TCP 连接重用行为。该功能将客户端 TCP 和 HTTP 连接与服务器端 TCP 和 HTTP 连接分离。
多路复用是通过
配置的,它提供了三个重要优势以提高服务器的效率和性能。减少在给定时间段内必须打开和关闭的服务器连接数。
相对于打开的客户端连接数,减少同时打开的服务器连接数。
允许使用任何打开的服务器端连接在服务器之间分配 HTTP 请求和进行负载均衡。
对于 HTTP/2 和 SPDY,仅第三个优势适用。这些较新版本的 HTTP 本身提供了 1 和 2 中概述的功能。
减少的确切服务器连接数取决于几个因素,例如:
客户端连接。
客户端延迟和连接空闲时间。
协商的 HTTP 版本。
新连接
在客户端连接与服务器连接具有一对一映射关系时,服务器上的负载可能会非常大。如果启用了多路复用,在客户端关闭连接时,NSX Advanced Load Balancer 拦截客户端连接关闭事件并关闭客户端连接,但在服务器端将连接保持打开状态。在下一个客户端需要打开连接时,NSX Advanced Load Balancer 打开客户端连接,但通过打开的空闲服务器端连接转发客户端的请求。客户端(虚拟服务)的每秒新连接数统计信息可能明显高于服务器端(池)。每秒请求数是相同的,除非使用缓存等其他功能。
并发连接数
从客户端到 NSX Advanced Load Balancer 的大多数连接将处于空闲状态。对于 HTTP 1.0 和 1.1,每次只能通过连接传输一个请求或响应。在服务器发送响应时,甚至在它发送响应后,它也无法将该连接用于其他用途。它必须等到客户端收到响应,由于典型的 Internet 延迟,这可能需要一段时间。它必须等待客户端决定发送另一个请求,并等待接收该请求。服务器的实际数据发送或接收往往只占很小的时间比例。
如果启用了多路复用,NSX Advanced Load Balancer 接收服务器响应,缓冲响应,向服务器确认收到响应,并将响应发送到客户端。同时,如果收到另一个客户端请求,NSX Advanced Load Balancer 可以通过当前空闲的服务器连接发送该请求。对于典型的 HTTP 站点,特别是存在典型延迟的站点,到服务器的打开并发连接数将明显少于来自客户端的打开并发连接数。
对请求进行负载均衡
不进行多路复用:源自一个客户端连接的流量的请求分配。
使用多路复用:源自一个客户端连接的流量的请求分配。
在 SE 从一个或多个客户端收到多个连接时,可以通过任何服务器对请求进行负载均衡。在 NSX Advanced Load Balancer 收到下一个客户端请求时,这确保绕过对特定请求响应缓慢的服务器。在使用负载均衡算法(例如循环)时,如果服务器的连接当前忙于传输请求或响应,它们将跳过使用该连接传输下一个请求。因此,与处理更快请求的其他服务器相比,处理复杂且缓慢的数据库查询的服务器可能会收到更少的请求。
连接是指 TCP 连接,请求是指 HTTP 请求和后续响应。
HTTP 1.0 和 1.1 每次仅允许通过打开的 TCP 连接传输一个请求或响应。很多浏览器尝试打开大约 6 个到目标网站的并发 TCP 连接以缓解该瓶颈。
HTTP/2 使用不同的连接方法,并且不使用或不要求使用连接多路复用功能。
对其他功能的影响
多路复用改变了管理员的固有观念。例如,查看来自客户端的连接计数以及到服务器的连接计数是截然不同的。静态负载均衡算法(例如循环或最少连接)可能表现出不同的行为。
保留源 IP - 在将流量发送到目标服务器时,多路复用明确摒弃了客户端连接与服务器连接的一对一映射关系。如果启用了“保留源 IP”并将服务引擎作为服务器的默认网关,则无法对 HTTP 流量进行多路复用。
NTLM - NTLM 身份验证通常与多路复用不兼容。依赖于 NTLM 的应用程序(例如 SharePoint 或 StoreFront)必须配置为禁用连接多路复用。
持久性 - 持久性对于多路复用非常重要,如下所述。
多路复用加持久性
如果启用了服务器持久性,多路复用行为将发生变化:
启用了多路复用,停用了持久性:客户端连接及其请求与服务引擎的服务器端分离。将使用到池中的服务器的新连接或已有的连接,在这些服务器之间对请求进行负载均衡。来自任何客户端的请求可以共享到这些服务器的连接。
启用了多路复用,启用了持久性:客户端连接及其请求将发送到单个服务器。这些请求可以与始终使用同一服务器的其他客户端共享连接。不执行 HTTP 请求的负载均衡。
停用了多路复用,启用了持久性:对于从客户端收到的每个连接,NSX Advanced Load Balancer 打开一个到服务器的新 TCP 连接。不会与其他客户端共享连接。通过来自同一客户端的所有连接收到的所有请求将发送到一个服务器。HTTP 客户端浏览器可能会打开很多并发连接,客户端连接数将与服务器连接数相同。
停用了多路复用,停用了持久性:客户端连接和服务器连接是一对一映射关系。请求始终保持它们开始时使用的同一连接。可以在可用服务器之间分配来自同一客户端的多个连接。
池组支持禁用连接多路复用。
fwd_close_hdr_for_bound_connections
选项
如果应用程序配置文件停用了连接多路复用,即,如果客户端连接和服务器连接绑定在一起,则 fwd_close_hdr_for_bound_connections 选项适用。它默认为 TRUE
。在 fwd_close_hdr_for_bound_connections 为 TRUE
时,如果后端服务器使用 Connection: Close
标头进行响应,则 SE 将该标头转发到客户端并关闭后端连接。在收到 Connection: Close
时,客户端关闭前端连接。