我有一个服务,服务器将 20kb xml 文件上传到我的服务器。
没有会话,它只是一个 POST 请求,仅此而已。每个单独的请求都根据 xml 文件的内容进行身份验证。
我必须进行与套接字相关的调整,因为在负载测试期间服务器耗尽了其套接字池(32K)。
无论如何,我想知道当我将负载均衡器引入到在 2 个以上的 Web 服务器之间轮询请求的方程式中时,情况会发生什么变化。
负载均衡器可以重复使用套接字吗?
再次说明一下,客户端服务器正在将文件发布到我的服务器,一旦文件通过 http 发布,就 100% 完成了。任何后续 http 发布都将被视为新的“事务”。
答案1
我假设您指的是 SO_REUSEADDR 而不是连接复用。这样做的唯一好处是处于 TIME_WAIT 状态的套接字不会阻止新套接字绑定到同一地址。我从未遇到过真正使用 TIME_WAIT 阶段的系统 - 如果您有大量处于 TIME_WAIT 状态的套接字,也许您应该减少超时。
让一切进展得更快也会有帮助 - 但您没有提供太多有关这里的设置和交通模式的信息。
任何类型的代理负载平衡器都会为您提供比现在更少的客户端连接(因为每个传入连接都需要连接到后端设备)。另一方面,RRDNS 将使负载减半,而无需 SPOF 的复杂性和成本。
这是一个单一的 POST 请求
所以我们在这里谈论的是 HTTP?如果是这样,那么就有巨大的调整空间。
答案2
所有领先的负载平衡器都具有某种形式的连接重用和池化,只是叫法不同。它们的最终设计目的是快速高效地处理数据包。
F5 称之为 OneConnect,Netscaler TCP 多路复用…..我对其他供应商或开源解决方案了解不够。
此功能使负载均衡器能够重复使用服务器端的 TCP 连接,从而大大提高后端 Web 应用程序的性能。当某个连接完成时,它会被移至负载均衡器上的重用池中,并在合适时与后续连接匹配(如果不合适,负载均衡器将打开与服务器的新 TCP 连接)。无需拆除连接,因此无需在新连接上进行后续的三次握手,也无需服务器分配或移除分配给打开的套接字的内存。另外需要注意的是,服务器端连接是连续的,而不是流水线式的。
如果没有连接重用,则 (客户端和服务器之间) 是 1-1 关系,根据我的经验,后端服务器的负载高得多,应用程序的性能会大幅降低。如果是 SSL 流量,您会看到由于密钥交换而导致的 CPU 负载增加。
答案3
我认为这取决于负载平衡器。我知道 F5 有一项功能叫做金融一卡通允许负载平衡器多路复用多个打开套接字的请求。这减少了每个高级协议事务的套接字创建/拆除开销。
我知道其他负载均衡器具有类似的功能,尽管我对它们不太熟悉。