You need to enable JavaScript to run this app.
导航
负载均衡算法
最近更新时间:2025.06.20 15:07:15首次发布时间:2025.06.19 19:36:30
我的收藏
有用
有用
无用
无用

服务器组层面的调度算法也叫做负载均衡算法。负载均衡算法决定了客户端请求如何在后端服务器之间分发。

加权轮询

实现原理:
加权轮询(Weighted Round Robin,WRR)算法按照预设权重值生成固定的请求分配序列。在一个轮询周期内,权重越高的服务器接收到的请求越多。WRR 算法仅考虑服务器的权重,不考虑负载。

示例:
假设服务器 A 的权重是 100、服务器 B 的权重是 50、服务器 C 的权重是 50。
该情形下:

  • 服务器 A、服务器 B 和服务器 C 接收到的请求数量的比例为 2:1:1。
  • 在一个轮询周期内,请求分配序列为:A→A→B→C(循环重复)。

优点

  • 用户可以根据服务器的性能和处理能力为其设置不同的权重。这样,性能和处理能力强的服务器可以处理更多的请求,充分利用服务器资源。
  • 请求分配可预测,便于进行服务器容量规划。

缺点:
WRR 算法无法感知服务器实时负载状态。在单个请求的处理时间差异较大的情况下,容易造成服务器间的负载不均衡。例如,如果某台服务器接收到的请求处理时间很长,可能会在处理完当前请求之前就接收到新的请求,导致负载累积。

适用场景:
该算法适用于以下场景:服务器性能和处理能力存在差异,但是单个请求的处理时间基本相同。常用于短连接服务,如 HTTP 服务。这类服务的请求处理时间较短且相对一致。

加权最小连接数

实现原理:
加权最小连接数(Weighted Least Connections,WLC)算法动态计算每台服务器的负载指标,然后将新的请求路由到负载指标最低的服务器。一台服务器的负载指标的计算公式为:负载指标 = 当前连接数 / 服务器权重。WLC 算法同时考虑服务器的负载和权重。

示例:
假设:

  • 服务器 A:权重 100,当前连接数 1000
  • 服务器 B:权重 50,当前连接数 500
  • 服务器 C:权重 50,当前连接数 200

负载指标计算:

  • 服务器 A:1000 / 100 = 10
  • 服务器 B:500 / 50 = 10
  • 服务器 C:200 / 50 = 4

服务器 C 的负载指标最低。因此,新的请求会被分发给服务器 C。

优点
WLC 算法能够根据服务器的当前连接数和权重动态调整请求分配,避免出现服务器过载或空闲的情况。

缺点:

  • 算法复杂度高。系统需要实时监控每台服务器的连接数,并基于连接数和权重动态调整请求分配。这可能会增加系统开销,特别是在大规模部署或高并发场景下。
  • 在连接数量比较大的情况下,如果有新的服务器加入,大量新建连接会被调度到新的服务器,可能会导致服务器瞬间流量过大、影响业务稳定性。

适用场景:
该算法适用于以下场景:单个请求的处理时间差异较大、服务器性能和处理能力存在差异。常用于长连接服务。这类服务的请求处理时间较长,需要考虑服务器的实时负载来保持负载均衡。

源地址哈希

实现原理:
源地址哈希(Source IP Hash,SH)算法是一种基于源 IP 地址的负载均衡算法。该算法通过对客户端 IP 地址进行哈希计算,生成一个哈希值,然后将这个哈希值映射到服务器组中的某一台服务器。SH 算法能够将来自同一源 IP 地址的请求始终路由到同一台服务器,从而实现会话保持。SH 算法不考虑服务器的权重和负载。

示例:
假设负责处理客户端请求的服务器为服务器 A 和服务器 B。来自 IP 地址 192.168.1.1 的客户端的请求经过哈希计算后被转发至服务器 A。当该客户端发起新的请求时,由于 IP 地址不变,哈希结果仍然相同。因此,请求仍会被转发至服务器 A。

优点
SH 算法能够将同一源 IP 地址的请求始终路由到同一台服务器,实现了会话保持。这对于需要维护用户状态的应用尤为重要,因为该算法确保了用户的连续请求都由同一服务器处理,避免了状态不一致的问题。

缺点:
当服务器数量发生变化时,哈希运算的结果会发生变化。原本被分配到某台服务器的部分请求会被重新分配到其他服务器上,可能会引起数据不一致等问题。

适用场景:
该算法适用于以下场景:需要会话保持的有状态服务,例如购物车系统、用户登录认证系统。