每个程序员都应该知道的 6 种负载均衡算法

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 每个程序员都应该知道的 6 种负载均衡算法

一个大型网络平台能轻松面对数百万请求而不产生崩溃,负载均衡器(Load Balancer)是绝对的关键组件

负载均衡器会在多个服务器之间分配工作流,也就是将用户请求转发到不同的机器上,可以确保服务的高可用性、响应速度和可扩展性。那么问题来了,负载均衡器的背后会有很多服务器,那么这些服务器之间要如何分配请求呢?显然这就涉及到了负载均衡算法,而了解核心的负载均衡算法可以让我们更好地设计和优化应用程序,以及故障排除。

负载均衡算法分为两大类:静态和动态。

0a5809ccccdef88ab5f4d5c301240a1a.png

下面我们就来介绍这每一种算法的区别,并深入讨论它的工作原理和优缺点。

Round Robin(轮询法)

静态负载均衡算法只负责将请求转发到服务器,而不会考虑服务器的实时条件和性能指标,所以它的优势是简单,缺点是适应性和精确性较差。而 Round Robin 在概念上是最简单的静态负载均衡算法,它会将请求均匀地转发给每一个服务器。

9c2e3a2e5159ea76b1cb9561864e6492.png

每来一个请求,就按照顺序转发给每一个服务器,比如请求 1 转发给 A,请求 2 转发给 B,请求 3 转发给 C。然后请求 4 再转发给 A,不断循环往复,就是将请求均匀分配到每个服务器上。当然我们这里只用三台服务器举例,更多的服务器也是同样的转发方式。

Round Robin 这种算法易于实现和理解,如果你的服务器配置都是一样的,那么 Round Robin 也是一个不错的负载均衡算法,虽然它比较简单。但现实情况是,不同服务器的处理能力可能不一致,那么此时 Round Robin 算法就会有几率导致处理能力较弱的服务器出现过载,因此你需要对服务器的资源进行监控。

Sticky Round Robin(粘性轮询法)


Sticky Round Robin 是 Round Robin 的扩展,它会将来自同一用户的连续请求发送到同一台服务器。

58809dcb2b557049221b3b0ee1cb3d7b.png

因为同一个用户的请求会转发到相同的服务器,那么就可以将相关数据提前保存起来,从而提升性能。但由于新来的用户是随机分配的,会容易出现负载不均衡的情况。

Weighted Round Robin(加权轮询法)


Weighted Round Robin 允许操作者为不同的服务器分配不同的权重或优先级,权重较高的服务器将按照比例接收更多的请求。

a63a4498afae6ba1cfb8be3ccbae44c6.png

服务器 A、B、C 的权重比值为 3: 1: 1,所以假设有 5 个请求,服务器 A 要处理 3 个,服务器 B、C 分别处理 1 个。加权轮询法允许我们考虑服务器的异构能力,但缺点是必须手动配置权重,这在动态变化的场景中不够灵活。

IP/URL Hash


除了 Round Robin 系列算法之外,我们还可以对客户端的 IP 地址或请求的 URL 进行哈希,然后来决定请求要被映射到哪一台服务器中。

4e23e1975b1bbd935a8f55b067854093.png

如果哈希函数选择得当,那么请求可以被均匀分发,然而选择一个好的哈希函数是具有挑战性的。

Least Connections(最少连接算法)


说完了静态负载均衡算法,我们再来看看动态负载均衡算法。相比静态,动态均衡算法在分发请求时会考虑到服务器的性能指标以及当前所剩资源,从而动态调整。

Least Connections 算法会将每个新的请求转发到当前活跃连接数最少的服务器,显然这就需要负载均衡器实时跟踪每个后端服务器上的活跃连接数。

如果再来一个新请求,它会被转发给服务器 A。因此最小连接算法可以灵活地对请求进行分配,以确保每台机器都能最大程度的处理请求,不会出现资源闲置。但如果连接不均匀地堆积,负载可能不经意地集中在某些服务器上。

Least Time(最少响应时间算法)


Least Time 和 Least Connections 类似,只不过它是将请求转发到延迟最低或者响应速度最快的服务器,负载均衡器需要持续评估每个服务器的延迟,并最终决定将请求转发到哪一个服务器上。


e2e89d6ead9f37172f81d474ab550c3f.png


这种方法具有高度自适应性和反应迅速的特点,但它需要持续地监测后端服务器的延迟,这会带来显著的开销并增加复杂性。并且它也没有考虑每个服务器已经有多少个正在处理的请求,它只是将请求转发给延迟最低的服务器。

以上就是常见的 6 种负载均衡算法,总的来说,简单的静态算法和更自适应的动态算法之间存在明显的权衡,我们需要考虑特定的性能目标、能力和约束来选择负载均衡策略。

像轮询这样的静态算法很适合无状态的应用程序,而动态算法则有助于优化大型复杂应用的响应时间和可用性,至于具体选择哪种算法则取决于当前的业务。

本文参考自:https://www.youtube.com/watch?v=dBmxNsS3BGE

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
负载均衡 算法 Java
Spring Cloud全解析:负载均衡算法
本文介绍了负载均衡的两种方式:集中式负载均衡和进程内负载均衡,以及常见的负载均衡算法,包括轮询、随机、源地址哈希、加权轮询、加权随机和最小连接数等方法,帮助读者更好地理解和应用负载均衡技术。
364 2
|
10月前
|
存储 负载均衡 算法
负载均衡算法
负载均衡算法
121 1
|
4月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
11月前
|
负载均衡 算法 搜索推荐
Nginx 常用的负载均衡算法
【10月更文挑战第17天】在实际应用中,我们需要根据具体的情况来选择合适的负载均衡算法。同时,还可以结合其他的优化措施,如服务器健康检查、动态调整权重等,来进一步提高负载均衡的效果和系统的稳定性。
288 59
|
7月前
|
人工智能 编解码 算法
DeepSeek加持的通义灵码2.0 AI程序员实战案例:助力嵌入式开发中的算法生成革新
本文介绍了通义灵码2.0 AI程序员在嵌入式开发中的实战应用。通过安装VS Code插件并登录阿里云账号,用户可切换至DeepSeek V3模型,利用其强大的代码生成能力。实战案例中,AI程序员根据自然语言描述快速生成了C语言的base64编解码算法,包括源代码、头文件、测试代码和CMake编译脚本。即使在编译错误和需求迭代的情况下,AI程序员也能迅速分析问题并修复代码,最终成功实现功能。作者认为,通义灵码2.0显著提升了开发效率,打破了编程语言限制,是AI编程从辅助工具向工程级协同开发转变的重要标志,值得开发者广泛使用。
8485 71
DeepSeek加持的通义灵码2.0 AI程序员实战案例:助力嵌入式开发中的算法生成革新
|
10月前
|
缓存 负载均衡 算法
slb支持多种负载均衡算法
slb支持多种负载均衡算法
286 6
|
负载均衡 NoSQL 算法
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
这篇文章是关于Java面试中Redis相关问题的笔记,包括Redis事务实现、集群方案、主从复制原理、CAP和BASE理论以及负载均衡算法和类型。
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
|
8月前
|
负载均衡 算法
架构学习:7种负载均衡算法策略
四层负载均衡包括数据链路层、网络层和应用层负载均衡。数据链路层通过修改MAC地址转发帧;网络层通过改变IP地址实现数据包转发;应用层有多种策略,如轮循、权重轮循、随机、权重随机、一致性哈希、响应速度和最少连接数均衡,确保请求合理分配到服务器,提升性能与稳定性。
1766 11
架构学习:7种负载均衡算法策略
|
10月前
|
负载均衡 算法 应用服务中间件
5大负载均衡算法及原理,图解易懂!
本文详细介绍负载均衡的5大核心算法:轮询、加权轮询、随机、最少连接和源地址散列,帮助你深入理解分布式架构中的关键技术。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
5大负载均衡算法及原理,图解易懂!
|
10月前
|
负载均衡 算法
SLB-Backend的负载均衡算法
【10月更文挑战第19天】
148 5

热门文章

最新文章

相关实验场景

更多