作为代理或重定向器的负载均衡器

本文关键字:负载 均衡器 重定向 代理 | 更新日期: 2023-09-27 18:30:58

>现状:我写了一个c#应用程序服务器,它与一些应用程序(计算机/智能手机/Web)通信。现在我遇到了一个问题,应用程序服务器必须处理大量请求,而且速度会非常慢。

我的想法是更改应用程序服务器以在软件集群中工作。为了选择正确的应用程序服务器,我想编写一个负载平衡器,该负载平衡器选择工作负载最低的应用程序服务器。

我的问题是,我不知道如何编写负载均衡器。负载均衡器是否应作为代理工作,以便所有流量都通过负载均衡器,或者负载均衡器应重定向到应用程序服务器,并且应用程序应直接与应用程序服务器通信。

作为代理或重定向器的负载均衡器

实际上,

有一些现成的产品可以完全满足您的需求,其中最成熟的产品之一是HAProxy,它充当HTTP/TCP负载平衡器/HA代理,它可以根据以前的客户端请求选择合适的服务器(例如,通过cookie插入,它支持其他方法),我相信它完全可以满足您的需求。

回到问题,

负载均衡器

是否应用作代理,以便所有流量都通过负载均衡器,或者负载均衡器应重定向到应用程序服务器

代理

实现是一种正常的途径,重定向不是一个好主意,并且在客户端特别是浏览器上会导致一些令人不安的问题(例如书签无法按预期工作),我会说它不会比使用代理有太大好处(除了删除负载均衡器节点,如果要在客户端完成平衡)

我不知道如何编写负载均衡器

简短的回答是你不需要编写自己的,正如我之前所说,在这个领域有成熟的产品,但是如果你想编写自己的HAProxy架构手册,从头开始编写负载均衡器代理将是好的开始。

分两部分回答:

  1. 您需要代理功能,而不是重定向或路由器功能。重定向将显示后端服务器的 IP/URL池到客户端,你当然不想要。客户一旦他们知道后端 IP,他们总是可以绕过您的 LB。因此所有流量都必须流经代理

  2. 我不建议进入写一个领域磅。这是一个非常专业的功能,而且有很多可以为此部署的免费/商业烘焙产品。你可能会选择HAProxy,Appache HTTPD Microsoft NLB,NginX之一。每种算法都提供了您可能想要使用的许多负载平衡算法的配置选择。

重定向会更改最终用户的 URL,这通常不是一个好主意。

你尝试做的事情是可能的,但非常复杂。 构成"工作负载"的因素有很多,包括 CPU、驱动器活动(可能在多个驱动器上)、网络活动(可能在多个网卡上)和软件锁定。 能够有效地监控所有这些事情是一个非常大的项目(我什至从未听说过有人考虑锁)。 整个公司都致力于做这样的事情。

对于您的情况,我建议您使用Microsoft的内置网络负载平衡。 它执行更多的随机负载平衡,但它可以完成工作,对于绝大多数应用程序,请求的随机分布会导致相当均匀的工作负载。

如果这还不够,请获取硬件负载平衡器,或计划至少两周的硬核编码,以根据 CPU、驱动器活动和网络活动进行适当平衡。

有现成的负载均衡器,如Apache + mod_cluster。可以像...一样创建配置。 Apache+mod_cluster -> Tomcat1 , Tomcat2 , Tomcat3 ,Tomcat4.所有请求都将来到 Apache+mod_cluster,如果它不是静态的,则分布在 Tomcat1、Tomcat2、Tomcat3、Tomcat4 之间。如果请求是静态类型,则仅由 Apache 处理。可以并且建议配置棒会话。

mod_cluster的主要优点是服务器端负载平衡。Apache + mod_cluster 也可以处理 HTTPS 请求。

http://mod-cluster.jboss.org/