负载均衡原理详解(万字图文总结)

服务器 服务器产品
负载均衡(Load Balancing),是指将流量、或计算,负载均匀分配到多个服务器、或资源上。比如:在处理大量的用户请求时,负载均衡器可以分配流量到多个 Web 服务器上,以保证应用的高可用性和响应速度。

负载均衡

负载均衡(Load Balancing),是指将流量、或计算,负载均匀分配到多个服务器、或资源上。

比如:在处理大量的用户请求时,负载均衡器可以分配流量到多个 Web 服务器上,以保证应用的高可用性和响应速度。

如下图所示:

图片图片

通过有效分配负载、提高系统的可用性、和性能,从而满足高可用、和高性能的业务需求。

比如:随着业务量的增加,可以通过增加更多的服务器来扩展系统,负载均衡器会自动将流量分配到新增加的服务器上,从而实现平滑的扩展。

以及,通过将流量或请求分配到多个服务器上,可以避免单一服务器故障导致的服务中断。

即使某些服务器出现故障,其他服务器仍可以继续处理请求。

负载均衡原理

负载均衡的基本原理:是使用一个负载均衡器(或称负载分配器),作为前端,将来自客户端的请求分配到后端的多个服务器上。

图片图片

负载均衡器通常位于网络流量的入口处,扮演着流量管理的角色。

整个负载流程,大致如下:

第一:请求接收

首先,客户端发起请求,负载均衡器接收到这些请求。

第二:流量分配

其次,负载均衡器根据设定的算法、或策略,将请求分配到多个后端服务器上。

第三:请求转发

再次,负载均衡器将客户端的请求转发给选定的后端服务器。

第四:响应返回

最后,后端服务器处理请求并生成响应,负载均衡器接收响应后,将其转发回客户端。

负载均衡算法

如果想更加深入的掌握负载均衡原理,还需要掌握负载均衡的算法。

比如:当客户端到达负载均衡后,通过”负载均衡的算法“,将请求分发到不同的服务器上。

图片图片

1. 轮询(Round Robin)

轮询:将请求按顺序依次分配给每个服务器,每个服务器依次接收请求,形成一个循环。

图片图片

比如:

服务器列表: A, B, C

请求顺序: R1, R2, R3, R4, R5

请求分配:

R1 -> A;

R2 -> B;

R3 -> C;

R4 -> A;

R5 -> B;

适用场景:

适用于服务器性能相似的场景,因为它不考虑服务器的负载、或性能,只是简单地轮流分配请求。

优点:

实现简单,易于配置。

缺点:

不考虑服务器的实际负载情况,可能导致某些服务器过载,而其他服务器空闲。

2. 加权轮询

为每个服务器分配一个”权重“,权重值表示服务器处理请求的能力。

图片图片

比如:服务器列表及权重: A (3), B (1), C (2)

请求顺序: R1, R2, R3, R4, R5, R6, R7, R8, R9, R10

请求分配:

R1 -> A;

R2 -> A;

R3 -> A;

R4 -> B;

R5 -> C;

适用场景:

适用于服务器性能不均等的情况,比如:一些服务器性能较高,能够处理更多请求,而其他服务器性能较低。

优点:

能够根据服务器的性能差异动态调整流量分配。

缺点:

需要准确配置权重值,权重的选择可能需要经验、或实时监控数据来优化。

最少连接数

将请求分配给当前连接数最少的服务器,即选择处理请求数量最少的服务器。

图片图片

比如:

服务器连接数: A (5), B (2), C (3);

请求到来顺序: R1, R2, R3, R4

请求分配:

R1 -> B (最少连接数);

R2 -> C (最少连接数);

R3 -> B (最少连接数);

R4 -> A (最少连接数);

适用场景:

适用于服务器处理请求时间长短不一的情况,能够有效分配负载,避免某些服务器过载。

优点:

动态平衡负载,适应服务器的实时负载情况。

缺点:

需要实时监控每个服务器的连接数,可能增加管理开销。

IP 哈希(IP Hash)

根据客户端的 IP 地址计算哈希值,将请求分配给特定的服务器。相同的客户端 IP 地址通常会被分配到同一台服务器。

图片

比如:

IP 地址: 192.168.1.1, 192.168.1.2, 192.168.1.3;

服务器列表: A, B

IP 哈希结果:

192.168.1.1 -> A;

192.168.1.2 -> B;

192.168.1.3 -> A;

适用场景:

适用于需要会话粘性(Session Affinity)的场景,即要求同一客户端的请求始终发送到同一服务器上。

优点:

提供会话粘性,保证客户端的请求连续性。

缺点:

不均匀的流量分布可能导致负载不均衡,特别是在客户端 IP 地址分布不均的情况下。

随机(Random)

随机选择一个服务器来处理请求,不考虑服务器的当前负载或性能。

图片图片

比如:

服务器列表: A, B, C

请求到来顺序: R1, R2, R3, R4

请求分配(随机选择):

R1 -> C;

R2 -> A;

R3 -> B;

R4 -> A;

适用场景:

适用于负载均衡较简单的场景,或者在性能差异不大的情况下。

优点:

实现简单,容易配置。

缺点:

可能导致负载不均衡,特别是在服务器性能差异较大时。

这些负载均衡算法,可以根据不同的需求、和环境进行选择和配置,以实现最优的资源利用和系统性能。

负载均衡分类

负载均衡根据其工作在网络协议栈中的不同层次,可以分为以下几种类型:

图片图片

1)二层负载均衡

在 OSI 模型的第二层,即数据链路层进行负载均衡,所以有时候也叫:二层负载均衡(数据链路层),

二层负载均衡(数据链路层),这种负载均衡器基于 MAC 地址进行流量分配。

比如:通常用于局域网 (LAN) 环境中,主要处理 Ethernet 帧。

2)三层负载均衡

三层负载均衡:在 OSI 模型的第三层,即网络层进行负载均衡,基于 IP 地址进行流量分配。

可以使用到:IP 负载均衡、数据中心网络中的流量管理、以及互联网流量分配。

3)四层负载均衡

在 OSI 模型的第四层,即传输层进行负载均衡,基于 TCP 、或 UDP 端口进行流量分配。

由于操作在较低层级,通常具有较低的延迟、和较高的吞吐量。

比如:典型的Dubbo RPC就是基于TCP来进行负载均衡,原因很简单:就是我刚讲到的性能高的原因。

4)七层负载均衡

在 OSI 模型的第七层,即应用层进行负载均衡,基于应用层数据进行流量分配。

比如:可以根据 HTTP 请求的内容、URL、主机头、Cookie .........等信息进行流量分配。

常见的七层负载均衡器有:Nginx、HAProxy...等。

可以应用到:Web 应用负载均衡、API 管理、内容分发网络 (CDN)、微服务架构....等等服务路由。

总之,二层、和三层负载均衡器通常用于低层次的流量管理,适合高性能、和简单的流量分配。

而四层、和七层负载均衡器,提供更高级的流量管理、和路由功能,适合处理复杂的应用需求、和动态环境。

责任编辑:武晓燕 来源: mikechen的互联网架构
相关推荐

2024-08-13 15:07:20

2021-10-18 11:58:56

负载均衡虚拟机

2021-03-16 08:21:29

Spark系统并行

2023-10-31 12:58:00

TypeScriptJavaScript

2024-03-28 13:10:20

负载均衡LVSHaproxy

2022-09-06 08:02:40

死锁顺序锁轮询锁

2020-03-18 12:47:59

设计模式ERP

2020-04-16 14:40:02

MySQL数据库架构

2020-01-15 09:53:59

MySQL缓存索引

2024-05-10 12:59:58

PyTorch人工智能

2010-04-20 18:13:44

网络负载均衡设置

2017-12-07 15:34:57

数据库MySQL优化原理

2021-03-18 10:04:46

数据仓库体系

2022-05-18 08:45:25

Nginx网络代码

2023-02-16 18:22:44

ChatGPTWolfram语言

2020-11-05 08:14:17

链表

2023-10-26 00:37:40

滴滴弹性云公有云

2022-07-11 10:08:34

大数据平台机房

2024-01-02 22:47:47

Nacos注册中心节点

2012-05-07 10:20:12

LVS集群
点赞
收藏

51CTO技术栈公众号