有哪些类型的负载平衡算法

有哪些类型的负载平衡算法

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

谢谢保罗

答案1

我认为 HTTP 负载均衡器最常见的负载均衡算法是:

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

  • 加权循环—— 与循环算法一样,但有些服务器占据了整体流量的较大份额。

  • 随机的

  • 源 IPhash。连接根据源 IP 地址分配到后端服务器。如果某个 Web 节点发生故障并停止服务,则分配会发生变化。只要所有服务器都在运行,给定的客户端 IP 地址就会始终转到同一个 Web 服务器。

  • 网址hash。与源 IP hash 非常相似,只是 hash 是在请求​​的 URL 上进行的。在代理缓存前进行负载平衡时很有用,因为对给定对象的请求将始终只发送到一个后端缓存。这可以避免缓存重复,避免将同一个对象存储在多个/所有缓存中,并增加后端缓存的有效容量。

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

  • 交通最少,加权最小流量。负载均衡器监控来自每个服务器的比特率,并发送到具有最少传出流量的服务器。

  • 最小延迟佩尔巴尔向后端服务器发出快速 HTTP OPTIONS 请求,并将请求发送到第一个服务器进行应答。

可以说,以上内容并不是严格意义上的计算机科学算法,而是对常见方法的更一般描述。思科的一篇小论文描述了一些他们使用的算法更详细。其他供应商的实现会略有不同。

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

  • A共享/分布式会话系统,以便任何 Web 节点都可以回答任何用户请求(即,用户会话数据(如会话 cookie)对所有服务器都同样可用)。

  • 使用负载平衡循环赛(可选加权循环)或“随机”分布。循环和随机都是简单而有弹性的算法,没有任何“热点”问题,也就是说,在所有情况下,后端的负载分配都是公平的。

答案2

问题不完整:

负载平衡什么?

CPU 可能会达到饱和状态;通常的观点是相反的——推动资源而不是拉动资源。

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

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

可以根据个人能力来平衡人员的负荷;有些人擅长处理多项任务,有些人则不然,因此质量与数量是相互的。您可以根据多种因素优化人力资源,并为不同的属性赋予不同的权重。

以上内容远非详尽无遗;重点是不同的资源需要完全不同类型的负载平衡。您必须说明哪些资源的可用属性和容量值得平衡。

您要平衡的内容是制定良好平衡算法的首要标准。而只有三个的建议是……不明智的。如果能妥善描述“负载平衡”的所有方式,那将值得获得博士学位。

逆转录

答案3

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

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

我的 2c。YMMV。

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

相关内容