更新时间:2024-04-08 GMT+08:00

流量分配策略介绍

分配策略类型总览

负载均衡会根据配置的流量分配策略,将来自客户端的请求按照对应的流量分配策略转发至相应的后端服务器。

弹性负载均衡支持加权轮询算法、加权最小连接、源IP算法、连接ID算法等多种分配策略,用于支持不同的业务场景。

本文列出弹性负载均衡支持的所有分配策略,不同类型的负载均衡器和后端服务器组支持的流量分配策略不同。

表1 流量分配策略对比

分配策略类型

描述

加权轮询算法

根据组内后端服务器设置的权重,按照访问顺序依次将请求分发给不同的服务器。

加权最少连接

将请求分发给(当前连接/权重)比值最小的后端服务器进行处理。

一致性哈希算法

  • 源IP算法
  • 连接ID算法

对请求的特定字段进行一致性哈希计算,并根据计算的哈希值将请求均匀地分配到后端服务器中。相同哈希值的请求,将会被分配到相同的后端服务器,即使后端服务器组中的后端服务器个数在发生变化。

  • 源IP算法:根据请求的源IP地址进行哈希计算,源IP相同的请求会被分配到同一台后端服务器。
  • 连接ID算法:根据QUIC协议请求的ID进行哈希计算,相同QUIC ID连接上的请求会被分配到同一台后端服务器。

加权轮询算法

图1展示弹性负载均衡器使用加权轮询算法的流量分发流程。假设可用区内有2台权重相同的后端服务器,负载均衡器节点会将50%的客户端流量分发到其可用区中的每一台后端服务器。

图1 加权轮询算法流量分发
表2 加权轮询算法说明

概述

加权轮询算法根据组内后端服务器设置的权重,将请求分发给不同的服务器。权重大的后端服务器被分配的概率高,相同权重的服务器处理相同数目的连接数。

推荐场景

加权轮询算法常用于短连接服务,例如HTTP等服务。

  • 灵活负载:当对后端服务器的负载分配有更精细的要求时,可以通过设置不同的权重来实现对服务器的灵活调度,使得性能较好的服务器能够处理更多的请求。
  • 动态负载:当后端服务器的性能和负载情况经常发生变化时,可以通过动态调整权重来适应不同的场景,实现负载均衡。

缺点

  • 加权轮询算法需要配置每个后端服务器的权重,对于有大量后端服务器或频繁变动的场景,运维工作量较大。
  • 权重设置不准确可能会导致负载不均衡的情况,需要根据后端服务器的实际性能进行调整。

加权最少连接

图2展示弹性负载均衡器使用加权最少连接算法的流量分发流程。假设可用区内有2台权重相同的后端服务器,ECS 01已有100个连接,ECS 02已有50个连接,则新的连接会优先分配到ECS 02上。

图2 加权最少连接算法流量分发
表3 加权最少连接说明

概述

最少连接是通过当前活跃的连接数来评估服务器负载情况的一种动态负载均衡算法。加权最少连接就是在最少连接数的基础上,根据服务器的不同处理能力,给每个服务器分配不同的权重,使其能够接受相应权值数的服务请求。

推荐场景

加权最少连接常用于长连接服务,例如数据库连接等服务。
  • 灵活负载:当后端服务器的性能差异较大时,同时考虑后端服务器的连接数和权重来进行负载,可以更精确地将请求分配到后端服务器上,避免出现过载或空闲的情况。
  • 动态负载:当后端服务器的连接数和负载情况经常发生变化时,可以通过实时监控连接数变化进行动态的负载调整。
  • 更高稳定负载:对于需要高稳定性的业务场景,加权最小连接算法可以降低后端服务器的峰值负载,提高业务的稳定性和可靠性。

缺点

  • 加权最小连接算法的实现更复杂:需要实时监控负载均衡器与后端服务器之间的连接数变化。
  • 对后端服务器的连接数存在依赖:算法依赖于准确获取负载均衡服务和后端服务器的连接数,如果获取不准确或监控不及时,可能导致负载分配不均衡。同时由于算法只能统计到负载均衡器与后端服务器之间的连接,后端服务器整体连接数无法获取,因此对于后端服务器挂载到多个弹性负载均衡的场景,也可能导致负载分配不均衡。
  • 新增后端服务器时可能导致过载:如果已有的连接数过大,大量的新建连接会被分配到新加入的后端服务器上,可能会导致新加入的后端服务器瞬间过载影响系统稳定性。

源IP算法

图3展示弹性负载均衡器使用源IP算法的流量分发流程。假设可用区内有2台权重相同的后端服务器,ECS 01已经处理了一个IP-A的请求,则IP-A新发起的请求会自动分配到ECS 01上。

图3 源IP算法流量分发
表4 源IP算法说明

概述

根据请求的源IP地址进行一致性哈希计算,源IP地址相同的请求会被分配到同一台后端服务器。

推荐场景

源IP算法常用于需要保持用户状态或会话的应用。
  • 基于源IP的会话保持:源IP算法可以确保源IP相同的请求具有相当的哈希值并被分配到同一台后端服务器上,从而实现会话保持。
  • 保持数据一致:一致性哈希算法将相同哈希值的请求调度到相同后端服务器上,保证多次请求数据的一致性。
  • 均衡性要求较高:一致性哈希算法能够提供相对均衡的负载分配效果,减少后端服务器的负载差异。

缺点

  • 后端服务器数量变动可能导致不均衡:一致性哈希算法在后端服务器数量变动时会尽力保障请求的一致性,部分请求会重新分配。当后端服务器数量较少时,重新分配过程中有可能导致负载不均衡的情况发生。
  • 扩展复杂性增加:由于一致性哈希算法将请求根据哈希因子进行哈希计算,当后端服务器数量变化时,会导致一部分请求需要重新分配,这会引入一定的复杂性。

连接ID算法

图4展示弹性负载均衡器使用连接ID算法的流量分发流程。假设可用区内有2台权重相同的后端服务器,ECS 01已经处理了一个客户端A的请求,则客户端A上新发起的请求会自动分配到ECS 01。

图4 连接ID算法流量分发
表5 连接ID算法说明

概述

根据QUIC 协议请求的QUIC ID进行哈希计算,相同QUIC连接上的请求会被分配到同一台后端服务器。QUIC ID是QUIC连接的唯一标识符,连接ID算法可以实现基于连接级别的负载均衡。

仅QUIC协议的后端服务器组支持连接ID算法。

推荐场景

连接ID算法常用于实现连接级别负载均衡的应用。

  • 基于QUIC连接的会话保持:连接IP算法可以确保源相同QUIC连接上的请求具有相当的哈希值并被分配到同一台后端服务器上,从而实现会话保持。
  • 保持数据一致:一致性哈希算法将相同哈希值的请求调度到相同后端服务器上,保证多次请求数据的一致性。
  • 均衡性要求较高:一致性哈希算法能够提供相对均衡的负载分配效果,减少后端服务器的负载差异。

缺点

  • 后端服务器数量变动可能导致不均衡:一致性哈希算法在后端服务器数量变动时会尽力保障请求的一致性,部分请求会重新分配。当后端服务器数量较少时,重新分配过程中有可能导致负载不均衡的情况发生。
  • 扩展复杂性增加:由于一致性哈希算法将请求根据哈希因子进行哈希计算,当后端服务器数量变化时,会导致一部分请求需要重新分配,这会引入一定的复杂性。