5大负载均衡算法详解(图文全面总结)

5大负载均衡算法详解(图文全面总结)

负载均衡是将请求分发到多个服务器上,以提升分布式场景的性能,下面详解常见5大负载均衡算法@mikechen

在早期淘宝等大型网站面临用户流量增长的挑战时,通过增加服务器数量实现横向扩展是一种常见的应对策略。

如下图所示:

5大负载均衡算法详解(图文全面总结)

初始阶段,当网站流量较小时,可能只需要一台服务器来处理用户请求。

但随着用户量的增加,单台服务器很快会达到其处理能力的极限,导致性能下降,甚至可能发生故障。

所以,为了解决单台服务器的性能瓶颈,网站需要增加服务器的数量,即横向扩展,这个时候就会涉及到负载均衡。

以下是五种常见的负载均衡算法:

 

1.轮询(Round Robin)

轮询: 就是将请求按顺序轮流分配给服务器,每个请求按顺序依次分配给服务器,直到所有服务器都被分配一个请求。

如下图所示:

5大负载均衡算法详解(图文全面总结)

优点: 简单、均匀,适用于每个服务器性能相近的场景。

缺点: 如果服务器性能不均匀,可能导致性能差的服务器负载过重。

适用场景:轮询适用于服务器性能相近的情况,因为它不会考虑服务器的实际负载和处理能力。

 

2.IP 哈希(IP Hash)

IP哈希负载均衡,是一种根据客户端IP地址进行负载均衡的策略。

如下图所示:

5大负载均衡算法详解(图文全面总结)

这种方式的核心思想是:将请求的源IP地址通过,哈希算法映射到一台服务器,使得相同IP的请求始终被分配到相同的服务器上。

工作流程:

  1. 获取客户端IP:
    • 负载均衡设备或服务首先获取请求的客户端IP地址。
  2. 哈希算法:
    • 使用哈希算法对客户端IP进行计算,得到一个哈希值。
  3. 服务器选择:
    • 将哈希值与服务器列表的数量取模,得到一个索引值。
    • 将请求分发到对应索引值的服务器上。

优点:

算法相对简单,不涉及复杂的权重计算。

缺点:

当服务器数量发生变化时,需要重新计算哈希值,可能导致大量请求需要重新分配。

如果负载均衡设备是单点,存在单点故障风险。

适用场景:

适用于相同 IP 的客户端,但在大规模、动态变化的环境下可能不如其他负载均衡算法灵活和高效。

 

3.最少连接(Least Connection)

最少连接,是将请求分配给当前连接数最少的服务器,如下图所示:

5大负载均衡算法详解(图文全面总结)

优点: 能够根据服务器当前连接数分配请求,避免过载。

缺点: 可能因为某个连接占用资源较多而导致性能下降。

 

适用场景:

服务器性能差异较大: 最少连接数算法特别适用于服务器性能差异较大的情况,通过确保负载较小的服务器获得更多的请求,可以最大程度地利用服务器资源。

需要动态负载均衡: 由于最少连接数算法具有动态性,可以根据实时连接数的变化进行调整,适用于需要动态负载均衡的场景。

 

3.加权轮询(Weighted Round Robin)

在轮询算法的基础上引入权重值,按照权重比例分配请求,如下图所示:

5大负载均衡算法详解(图文全面总结)

服务器的性能越高,权重值设置得越大,分配到的请求就越多。

优点: 可以根据服务器性能差异进行调优。

缺点: 无法动态适应服务器性能的变化。

适用场景:

服务器性能存在差异: 加权轮询适用于服务器性能存在差异的情况,在一些服务器可能比其他服务器更强大,能够处理更多的负载。

负载需求不均衡: 当负载需求不均衡,一些服务器需要处理更多的请求时,通过调整权重可以更灵活地满足不同的业务需求。

 

5.随机策略

将请求随机分配给服务器,通过随机选择服务器来分配请求,如下图所示:

5大负载均衡算法详解(图文全面总结)

优点: 简单、适用于每个服务器性能相近的场景。

缺点: 可能导致不均匀分配,无法保证服务器负载的均衡。

适用场景:

  1. 简单场景: 随机策略适用于一些简单的场景,特别是当服务器性能相近且请求分布相对均匀时。
  2. 无需精确负载均衡: 如果对负载均衡的要求不是非常高,且无需考虑服务器性能差异,随机策略可以是一种简便的选择。

这些负载均衡算法可以根据实际场景和需求进行选择,每种算法都有其适用的场景和局限性。

在实际应用中,通常会根据系统的特点和性能要求选择合适的负载均衡算法。

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧