Jes*_*r M 43
HTTP 负载均衡器最常见的负载均衡算法是恕我直言:
循环(有时称为“循环中的下一个”)。
加权轮询——作为轮询,但有些服务器在总体流量中占有更大的份额。
随机。
源 IP哈希。连接根据源 IP 地址分配到后端服务器。如果网络节点出现故障并停止服务,则分布会发生变化。只要所有服务器都在运行,一个给定的客户端 IP 地址将始终转到同一个 Web 服务器。
网址哈希。与源 IP 散列非常相似,不同之处在于散列是在请求的 URL 上完成的。在代理缓存前进行负载平衡时很有用,因为对给定对象的请求将始终只进入一个后端缓存。这避免了缓存重复,将同一对象存储在多个/所有缓存中,并增加了后端缓存的有效容量。
最少连接,加权最少连接。负载平衡器监控每个服务器的打开连接数,并发送到最不繁忙的服务器。
最少流量,加权最少流量。负载平衡器监控来自每个服务器的比特率,并将其发送到具有最少传出流量的服务器。
最少的延迟。Perlbal向后端服务器发出一个快速的 HTTP OPTIONS 请求,并将该请求发送到第一个服务器进行响应。
可以说,以上不是严格的计算机科学意义上的算法,它们是对常见方法的更一般的描述。这是 Cisco 的一篇小论文,其中更详细地描述了他们使用的一些算法。其他供应商的实现会略有不同。
在某些边缘情况下,更奇特的算法很有用——例如,视频流可能很适合“最少流量”。但一般来说,对于大多数 Web 应用程序和网站,最佳的解决方案是:
一个共享/分布式会话系统,因此任何网络节点都可以回答任何用户请求(即用户会话数据,如会话 cookie 对所有服务器都同样可用)。
使用循环(可选加权循环)或随机分布进行负载平衡。Round Robin 和 Random 是简单且有弹性的算法,没有任何“热点”问题,即后端的负载分配在所有情况下都保持公平。
问题不完整:
负载平衡什么?
CPU 可能会饱和;通常的观点是倒退的——推动资源而不是拉动资源。
磁盘有许多不同类型的负载需要平衡,例如空间、读取速度、写入速度、吞吐量等。
网络可以根据延迟或总吞吐量进行负载平衡......
可根据个人能力进行负载均衡;有些人能很好地完成多项任务,有些人则不能,然后就是质量与数量。您可以根据许多因素并对不同属性赋予不同的权重来优化人力资源。
上述内容远非详尽无遗;关键是不同的资源采用完全不同类型的负载平衡。对于它们的可用属性和能力,您必须说明哪些属性和能力对平衡感兴趣。
你想要平衡什么是制定一个好的平衡算法的首要标准。而只有三个的建议是……不明智的。尝试描述“负载平衡”的所有方式,这将是值得获得博士学位的事情。
RT