【问题标题】:Algorithms behind load-balancers?负载均衡器背后的算法?
【发布时间】:2010-04-01 15:48:39
【问题描述】:

我需要学习负载平衡器,例如网络负载平衡、Linux 虚拟服务器、HAProxy,...我需要了解一些底层知识:

  • 这些负载平衡器中使用了哪些算法/技术?哪个最受欢迎?最有效率?

我希望这些算法/技术不会太复杂。是否有一些关于它们的资源?

非常感谢您的帮助。

【问题讨论】:

  • 我知道这是一篇很老的帖子,但如果你还在做这个,你可能会对我有所帮助。我目前正在实施一些负载平衡策略并在 OpenStack 云上使用它们。你愿意和我分享想法吗?

标签: windows linux algorithm


【解决方案1】:

例如,Apache 中的负载平衡由名为 mod_proxy_balancer 的模块负责。该模块支持3种负载均衡算法:

  • 请求计数
  • 加权流量计数
  • 待处理的请求计数

更多详情请看这里:mod_proxy_balancer

【讨论】:

    【解决方案2】:

    不确定这是否属于服务器故障,但一些负载平衡技术是:

    • 循环赛
    • 最少连接

    我使用最少的连接。将人送到负载最少的机器上才是最有意义的。

    【讨论】:

    • 我想知道算法,所以我在这里问它^^
    • +1,我使用的也是以合理的 TTL 缓存的保持活动的最少连接。除非涉及超过 50 个左右的节点,否则我从未见过轮循制不会以“收藏夹”结束。
    • @Vimvq1987 - 是的,但系统管理员比程序员更了解硬件 - 至少通常如此。如果你想知道这些算法是怎么写的,那我就不知道了哈
    • 我必须研究基于软件的负载均衡器,然后我想在我的论文中描述这些算法。我认为这里的程序员会对它们有一定的了解:)。
    【解决方案3】:

    一般来说,负载平衡就是将新的客户端请求发送到最不忙的服务器。根据正在运行的应用程序,为每个服务器分配一个“繁忙因素”:基本上是一个反映负载平衡算法(连接的客户端、cpu/mem 使用等)的一个/几个兴趣点的数字,然后在运行时选择得分最低的服务器。基本上任何负载平衡技术都是基于这样的:

    1. 循环法本身并没有实现“忙碌分数”,而是将每个连续请求分配给循环队列中的下一个服务器。
    2. 最少连接的分数 = number_of_open_connections 到服务器。显然,连接较少的服务器是更好的选择。
    3. 随机分配是一种特殊情况 - 您对服务器的负载做出了不知情的决定,但假设函数具有统计上的均匀分布。

    【讨论】:

      【解决方案4】:

      除了已经提到的那些之外,一个简单的随机分配对于负载平衡来说可能是一个足够好的算法,尤其是在有大量服务器的情况下。

      这是来自 Oracle 的一个链接:http://download-llnw.oracle.com/docs/cd/E11035_01/wls100/cluster/load_balancing.html

      【讨论】:

      • 你能给我一个链接,这个方法真的有用吗? :D.