有什么样的负载均衡算法


32

我正在研究HTTP的不同负载平衡算法,但刚发现3.随机,循环和加权循环。还有其他选择吗?

谢谢保罗

Answers:


33

HTTP负载均衡器最常见的负载均衡算法是恕我直言:

  • Round Robin(有时称为“循环中的下一个”)。

  • 加权循环(Righted Round Robin) -与循环(Round Robin)一样,但某些服务器在总流量中所占份额更大。

  • 随机的

  • 源IP哈希。连接根据源IP地址分配到后端服务器。如果某个Webnode发生故障并退出服务,则分发会更改。只要所有服务器都在运行,则给定的客户端IP地址将始终转到同一Web服务器。

  • URL哈希。与源IP哈希非常相似,但哈希是在请求的URL上完成的。当在代理缓存之前进行负载平衡时,此功能很有用,因为对给定对象的请求将始终仅到达一个后端缓存。这避免了缓存重复,将相同的对象存储在多个/所有缓存中,并增加了后端缓存的有效容量。

  • 最少的连接,加权最少的连接。负载平衡器监视每个服务器的打开连接数,并将其发送到最不繁忙的服务器。

  • 流量最少,加权流量最少。负载平衡器监视来自每个服务器的比特率,并将其发送到输出流量最少的服务器。

  • 最小的延迟Perlbal向后端服务器发出快速的HTTP OPTIONS请求,并将该请求发送到第一台服务器进行应答。

可以说,上述并不是严格的计算机科学意义上的算法,它们是对通用方法的更一般性描述。这是Cisco的一篇小论文,其中更详细地描述了他们使用的一些算法。其他供应商的实现将略有不同。

在某些极端情况下,使用更特殊的算法很有用-例如,视频流可能很适合“最少流量”。但是一般来说,对于大多数Web应用程序和网站,最佳的解决方案是:

  • 共享/分布会话系统,使得任何Webnode项目可以回答任何用户请求(即诸如会话cookie用户会话数据同样可用于所有服务器)。

  • 使用Round Robin(可选的加权Round Robin)或随机分布进行负载平衡。Round Robin和Random是简单而有弹性的算法,没有任何“热点”问题,即,在所有情况下,后端的负载分配均保持公平。


5

问题不完整:

负载均衡是什么?

CPU可能会饱和;通常的观点是倒退-推动资源而不是寻求资源。

磁盘具有许多不同种类的负载来平衡,例如空间,读取速度,写入速度,吞吐量等。

可以根据延迟或总吞吐量来平衡网络的负载...

可以根据个人能力对人员进行负载均衡;一些多任务很好,而其他则不行,然后是质量与数量。您可能会基于许多因素并为不同的属性赋予不同的权重来优化您的人力资源。

以上远非详尽无遗;关键是不同的资源需要完全不同的负载平衡。关于平衡,您必须声明其可用属性和容量。

您要平衡的是制定良好平衡算法的首要条件。关于只有三个的建议是不明智的。一位博士应该做一个适当的工作,试图描绘出“负载均衡”的所有方式。

逆转录


2
您缺少Richard的问题,算法是任何方法或实现的基础。
monomyth

2
对不起,我没有错过一个该死的事情。开开心心
理查德T

@ monomyth,@ Richard是正确的-算法选择取决于您要进行负载平衡的方式。您可以开发一种算法来负载平衡磁盘空间使用情况,而该算法可能根本不适用于其他内容,例如HTTP请求。
乔什2010年

@ Josh,@ Richard,负载平衡的概念虽然相同。您可能仍会使用Round Robin来平衡磁盘使用量,iSCSI,HTTP,CPU等等。
Mark Henderson

@Farseeker我同意,Round Robin非常普遍。但是是否没有一些特定于任务的负载平衡算法?
乔什

0

不是您问题的直接答案,而是我们发现有用的实际解决方案。使用LVS和Pulse守护程序,我们的HTTP负载平衡配置为调用自定义bash脚本,该脚本通过简单的SSH连接和正常运行时间来确定“真实服务器”上的负载。

然后,基于服务器的平均负载,为每个服务器设置权重。这不是最科学的方法,因为平均负载不一定表示HTTP连接或由这些连接引起的CPU负载。尽管如此,我们还是取得了令人惊讶的有效结果。

我的2c。YMMV。

PS:看一下LVS项目 -您肯定会找到有关负载平衡调度实现的信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.