负载均衡调度算法介绍

负载均衡会根据配置的调度算法,将来自客户端的请求按照对应的算法规则转发至相应的后端服务器。负载均衡支持轮询、加权轮询、加权最小连接数、一致性哈希等多种调度算法,用于支持不同的业务场景。

本文列出所有负载均衡系列产品支持的调度算法,不同负载均衡产品支持的调度算法不同。

  • 应用型负载均衡ALB:加权轮询、加权最小连接数、一致性哈希(源IP、URL参数)。

  • 网络型负载均衡NLB:轮询、加权轮询、加权最小连接数、一致性哈希(源IP、四元组、QUIC ID)。

  • 传统型负载均衡CLB:轮询、加权轮询、一致性哈希(源IP、四元组、QUIC ID)。

轮询算法

介绍

轮询算法按照访问顺序将外部请求依序分发到后端服务器。轮询算法常用于短连接服务,例如HTTP等服务。

例如负载均衡后端服务器组挂载了2个ECS,则客户端新请求将在后端服务器之间轮流分发。

image.png

优点

  1. 实现简单:轮询算法是一种最基本的负载均衡算法,实现非常简单,容易理解和维护。

  2. 均衡性好:轮询算法可以很好地将请求均匀地分配到各个服务器上,使得各个服务器的负载相对平均。

缺点

  1. 服务器性能不能有较大差异:轮询算法无法区分服务器的实际负载情况,如果服务器的性能不同,可能会导致某些服务器过载,而其他服务器处于空闲状态。

  2. 连接可能被长时间占用:轮询算法无法考虑连接的持续时间,如果某些连接需要较长时间才能完成,可能会导致其他连接需要等待较长时间。

适用场景

  1. 服务器性能相似:如果服务器的性能相似,轮询算法可以很好地实现负载均衡,将请求均匀地分配到各个服务器上。

  2. 简单场景:对于简单的应用场景,不需要考虑服务器的实际负载情况或连接的持续时间,轮询算法可以是一个简单且有效的选择。

加权轮询算法

介绍

加权轮询算法在轮询算法的基础上引入了权重的概念,对服务器的负载分配更加灵活。权重值越高的后端服务器,被轮询到的概率也越高。加权轮询算法常用于短连接服务,例如HTTP等服务。

例如负载均衡后端服务器组挂载了2个ECS,分配的权重分别为60、40,则客户端新请求转发到相应后端服务器的概率为60%、40%。

image.png

优点

  1. 灵活性:加权轮询算法可以根据服务器的性能和处理能力设置不同的权重,实现对不同服务器的灵活调度,使得性能较好的服务器能够处理更多的请求。

  2. 均衡性:加权轮询算法仍然能够保持请求的均衡性,将请求按照权重进行分配,使得各个服务器的负载相对平均。

缺点

  1. 配置复杂:相比于简单的轮询算法,加权轮询算法需要配置每个服务器的权重,对于大量服务器或频繁变动的场景,配置和维护工作量较大。

  2. 需要准确的权重设置:权重设置不准确可能会导致负载不均衡的情况,需要根据服务器的实际性能进行调整。

适用场景

  1. 服务器性能不同:当服务器的性能存在差异时,可以通过设置不同的权重来实现负载均衡,使得性能较好的服务器能够处理更多的请求。

  2. 动态负载调度:当服务器的性能和负载情况经常发生变化时,可以通过动态调整权重来适应不同的场景,实现负载均衡。

  3. 需要更精细的负载分配:当对服务器的负载分配有更精细的要求时,可以通过设置不同的权重来实现对服务器的灵活调度。

加权最小连接数算法

介绍

加权最小连接数算法除了根据每台后端服务器设定的权重值来进行轮询,同时还考虑负载均衡服务与后端服务器的实际连接数。当权重值相同时,当前连接数越小的后端服务器被轮询到的次数(概率)也越高。加权最小连接数算法常用于长连接服务,例如数据库连接等服务。

例如负载均衡后端服务器组挂载了2个ECS,分配的权重均为100,当前连接数分别为100、50,则客户端新请求将优先转发到连接数较少的后端服务器。

image.png

优点

  1. 动态性能调整:加权最小连接数算法可以根据服务器的当前连接数和权重来进行动态调整,将请求发送到连接数最少且性能较好的服务器上,实现负载均衡。

  2. 负载均衡效果好:由于算法会考虑服务器的连接数和权重,加权最小连接数算法可以实现更精确的负载均衡,将请求合理地分配到各个服务器上,避免出现过载或空闲的情况。

缺点

  1. 算法复杂性高:相比于轮询算法或加权轮询算法,加权最小连接数算法的实现较为复杂,需要实时监控负载均衡服务与后端服务器之间的连接数,并进行计算和选择。

  2. 对服务器连接数的依赖:算法依赖于准确获取负载均衡服务和后端服务器的连接数,如果获取不准确或监控不及时,可能导致负载分配不均衡。同时由于算法只能统计到负载均衡服务与后端服务器之间的连接,后端服务器整体连接数无法获取,因此对于后端服务器挂载到多个负载均衡实例的场景,也可能导致负载分配不均衡。

  3. 新增后端服务器时可能导致新服务器瞬间压力过大:如果存量的连接数过大,当有新的服务器加入时,大量的新建连接会被调度到新加入的服务器上,可能会导致新服务器瞬间压力过大影响系统稳定性。

适用场景

  1. 服务器性能差异较大:当服务器的性能差异较大时,通过考虑连接数和权重来进行负载均衡,可以更精确地将请求分配到性能较好的服务器上。

  2. 动态负载调度:当服务器的连接数和负载情况经常发生变化时,可以通过实时监控连接数并进行动态调整,实现动态的负载均衡。

  3. 高稳定性要求:对于需要实时响应和高稳定性的应用场景,通过加权最小连接数算法可以降低服务器的负载,提高系统的稳定性和可靠性。

一致性哈希算法

介绍

一致性哈希算法根据不同的哈希因子将访问请求均匀地分配到后端服务器,并在后端服务器个数发生变化时,依然保持均匀分配。相同哈希因子计算结果的请求,将会调度到相同的后端服务器。

包括如下哈希因子:

  • 源IP哈希:根据请求的源IP地址进行哈希计算。相同源IP的请求会分发到同一台后端服务器。

  • 四元组哈希:根据请求的四元组(源IP、源端口、目标IP、目标端口)进行哈希计算。相同四元组的请求会分发到同一台后端服务器。

  • QUIC ID哈希:根据请求的QUIC ID进行哈希计算。由于QUIC ID是QUIC连接的唯一标识符,使用它进行负载均衡可以实现基于连接级别的负载分配。相同QUIC连接的请求会分发到同一台后端服务器。

  • URL参数哈希:根据请求的URL参数进行哈希计算。相同URL参数的请求会分发到同一台后端服务器。

例如负载均衡后端服务器组挂载了2个ECS,上次请求已转发至ECS01进行处理,如果新请求计算后的hash值相同,则客户端新请求将转发到ECS01上。

image.png

优点

  1. 会话保持:一致性哈希算法可以确保同一hash值的请求会被分配到同一台服务器上,从而实现了会话的保持。这对于需要保持用户状态或会话的应用非常重要。

  2. 均衡性:一致性哈希算法能够提供较好的负载均衡效果,因为相同的哈希因子经过哈希计算后,会被分配到同一台服务器上,使得负载相对均衡。

缺点

  1. 后端服务器变动可能导致数据不均衡:一致性哈希算法在服务器数量变动时,算法会尽力保障请求一致性,部分请求会重新调度,当后端服务器数量越多时,重新调度的请求会越少。当后端服务器数量较少时,重新分配过程中有可能导致数据不均衡的情况发生。

  2. 扩展复杂性增加:由于一致性哈希算法将请求根据哈希因子进行哈希计算,当有新的服务器加入或旧的服务器离开时,会导致一部分请求需要重新分配,这会引入一定的复杂性。

适用场景

  1. 会话保持:对于需要保持用户状态或会话的应用,一致性哈希算法可以确保相同哈希因子的请求会被分配到同一台服务器上,实现会话的连续性。

  2. 均衡性要求较高:对于负载均衡要求较高的场景,一致性哈希算法能够提供相对均衡的负载分配效果,减少服务器的负载差异。

  3. 需要保持数据一致性:对于某些应用场景,需要保持数据的一致性,将相同哈希因子的请求分配到同一台服务器上可以避免数据不一致的问题。

说明
  • QUIC ID哈希算法,仅适用于基于QUIC协议的应用,对于其他协议不适用。QUIC协议正在快速演进,无法保证所有QUIC版本的兼容性,建议充分测试后再用于生产环境。

  • NLB与CLB支持QUIC ID哈希算法,支持的QUIC协议版本为Q10、Q29。

相关文档

您可参考下列文档了解相应的负载均衡产品及差异: