![典型的 http(s) 负载均衡器如何工作?](https://linux22.com/image/708652/%E5%85%B8%E5%9E%8B%E7%9A%84%20http(s)%20%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E5%99%A8%E5%A6%82%E4%BD%95%E5%B7%A5%E4%BD%9C%EF%BC%9F.png)
我知道有些情况下我们会遇到服务器上 http(s) 负载过重的情况,我们应该使用负载均衡器在多个后端服务器之间分配负载。
但我在这里有一个困惑!假设有太多用户(假设有 100,000 个)试图同时访问,example.com:80
并且负载均衡器(例如 Apachemod_proxy_balancer
或任何其他独立负载均衡器)希望将此负载分配到多个后端服务器之间,但所有流量仍必须通过前端服务器,这会给该服务器带来沉重的流量,即使所有请求都在后端服务器上解析,前端服务器仍然必须管理它们(假设在最好的情况下它必须为每个请求创建一个唯一的线程,这会导致该服务器在同时创建 100,000 个线程后崩溃!)。
现在我的问题(这对专家来说可能听起来很有趣!)是负载均衡器如何处理这种情况?换句话说,前端服务器如何直接在客户端和后端服务器之间建立链接,而不必忍受如此沉重的网络负载? (我知道在这种情况下我们不能将后端服务器称为真正的“后端”!但假设现在没问题)这种情况是否需要任何特定于应用程序的改变?(例如,为了简单地将带有 httpLocation
标头的客户端重定向到其他服务器)
答案1
这取决于负载均衡器的用途,即它要平衡哪种类型的工作负载。反向代理基于 HTTP(S) 负载均衡器在生成内容的应用程序后端之间分配负载。
反向代理不会尝试平衡网络负载,与动态应用程序执行的所有任务相比,传递网络流量(并可能提供静态内容)是一项相对简单的任务。
例如,数据库访问也可以实现负载平衡。大多数数据库查询仅涉及从数据库读取数据,因此虽然写入需要立即复制到所有数据库服务器,但读取可以均匀分布。
网络负载平衡是一个不同的领域。例如,在集群服务器之间平衡(网络)负载的一种常见方法是循环 DNS 记录,其中同一个主机名只是有多个A
记录。