我知道在某些情况下,我们会在服务器上遇到大量的http负载,我们应该使用负载平衡器来分配几个后端服务器之间的负载。
但是我在这里混乱了! 假设太多的用户(比如说100,000)试图同时访问example.com:80并且负载平衡器(例如Apache mod_proxy_balancer或任何其他独立的负载均衡器)想要在多个后端服务器之间分配这个负载,但所有stream量仍然需要通过前端服务器,这将导致该服务器上的stream量大,即使所有请求都在后端服务器parsing,前端服务器仍然需要pipe理它们(假设在最好的情况下,它必须为每个请求创build一个唯一的线程,导致此服务器在创build100,000个线程后立即崩溃!
现在我的问题(这可能听起来很有趣)是负载平衡器如何处理这种情况? 换句话说,前端服务器如何在客户端和后端服务器之间直接build立链接,而不必承受如此庞大的networking负载? (我知道在这种情况下,我们不能称后端服务器真的是'后端'!但是现在假设它是可以的)这个场景是否需要特定于应用程序的改变? (例如,为了简单地将具有http Location标题的客户端redirect到其他服务器)
这取决于负载均衡器的目的,即它应该平衡哪种types的工作负载。 基于反向代理的HTTP(S)负载均衡器负责在应用程序后端之间分配生成内容的负载。
反向代理并不试图平衡networking负载,与dynamic应用程序所做的所有任务相比,传递networkingstream量(以及可能服务静态内容)是一项相对简单的任务。
例如,数据库访问也可以进行负载平衡。 大多数数据库查询只涉及从数据库读取数据,所以当需要在所有数据库服务器上立即复制写入数据时,可以均匀分配读取数据。
networking负载平衡是一个不同的领域。 例如,群集服务器之间平衡(networking)负载的一种常用方法是循环DNSlogging ,其中相同的主机名只有一个以上的Alogging。