服务器 服务器产品
负载均衡(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的互联网架构
分享到微信
微信扫码分享
分享到微博相关推荐
ThreadLocal最全详解(万字图文总结)
ThreadLocal提供了线程的本地变量,是Java中用于实现线程局部变量的类,它提供了线程内部的独立变量。即即每个线程都有一个独立的"变量副本",不会与其他线程的"变量副本"产生冲突。2024-08-13 15:07:20
万字长文吃透负载均衡
经过监控分析,发现某个服务的一个实例所在的虚拟机扛不住了,所以采取临时措施流量控制之后,问题解决了,但还是造成了不小的损失。2021-10-18 11:58:56
上万字详解Spark Core
Spark产生之前,已经有MapReduce这类非常成熟的计算系统存在了,并提供了高层次的API(mapreduce),把计算运行在集群中并提供容错能力,从而实现分布式计算。2021-03-16 08:21:29
万字详解 TypeScript 高级用法
TypeScript是一种类型安全的JavaScript超集,除了基本类型和对象类型之外,TypeScript还提供了一些高级类型系统,使得我们可以更好地处理复杂的数据结构和业务逻辑。本文将深入探讨TypeScript的高级类型系统,以更好地理解和使用这些高级类型,提高代码的可读性、可维护性和健壮性。2023-10-31 12:58:00
TypeScript
负载均衡原理最全详解
总的来说,一般是LVS做4层负载,Nginx或者Haproxy做7层负载,性能上LVSHANginx,功能性和便利性上NginxHALVS。2024-03-28 13:10:20
万字详解其复杂原理
MySQLInnoDB引擎现在广为使用,它提供了事务,行锁,日志等一系列特性,本文分析下InnoDB的内部实现机制,MySQL版本为5.7.24,操作系统为Debian9。2020-04-16 14:40:02
万字长文带你详解死锁!
本文介绍了死锁的概念,以及产生死锁的4个条件,排查死锁可以通过本文提供的4种工具中的任意一种来检测,从易用性和性能方面来考虑,推荐使用jconsole或jvisualvm,最后我们介绍了死锁问题的两种解决方案:顺序锁和轮询锁。2022-09-06 08:02:40
万字总结之设计模式(扫盲篇)
设计模式是对软件设计普遍存在的问题,所提出的解决方案。与项目本身没有关系,不管是电商,ERP,OA等,都可以利用设计模式来解决相关问题。2020-03-18 12:47:59
学MySQL,这篇万字总结,真的够用了
这篇文章将从查询缓存,索引,优化器,explain,redo日志,undo日志,事务隔离级别,锁等方面来讲解MySQL。2020-01-15 09:53:59
万字长文超全总结Pytorch核心操作!
本文精心梳理了PyTorch的核心操作,这不仅是一份全面的技术指南,更是每一个PyTorch实践者的智慧锦囊,建议收藏!2024-05-10 12:59:58
PyTorch人工智能
图文讲解:网络负载均衡设置
本文详细介绍了网络负载均衡设置具体过程。以DNS服务器为例的配置过程,另外附上了图示,希望大家能掌握这种配置过程。2010-04-20 18:13:44
网络负载均衡设置
万字详解整个数据仓库建设体系
英文名称为DataWarehouse,可简写为DW或DWH。数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持(DecisionSupport)。它出于分析性报告和决策支持目的而创建。2021-03-18 10:04:46
万字干货总结:MySQL优化原理学习,这一篇就够了!
说起MySQL的查询优化,相信大家收藏了一堆奇技淫巧:不能使用SELECT、不使用NULL字段、合理创建索引…..你是否真的理解这些优化技巧?是否理解其背后的工作原理?在实际场景下性能真有提升吗?我想未必。因而理解这些优化建议背后的原理就尤为重要,希望本文能让你重新审视这些优化建议,并在实际业务场景下合理的运用。2017-12-07 15:34:57
万字详解大数据平台异地多机房架构实践
我在18年的时候刚好经历过一次机房的数据迁移,今天看到B站的这个方案,推荐给大家2022-07-11 10:08:34
万字详解滴滴弹性云混部的落地历程
由于未来自建IDC公共集群的容量有限,并且公有云需要额外购买资源,存在成本增加,所以总体来说驱逐目的优先级是:混部集群自建IDC公共集群公有云,如果不是全局性问题,还是尽快在混部集群内部进行驱逐。2023-10-26 00:37:40
万字多图,搞懂 Nginx 高性能网络工作原理!
在单进程的网络编程模型中。所有的网络相关的动作都是在一个进程里完成的,如监听socket的创建,bind、listen。再比如epoll的创建、要监听事件的添加,以及epollwait等待时间发生。这些统统都是在一个进程里搞定。2022-05-18 08:45:25
万字详解「链表」,从小白到大佬!
链表(LinkedList)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。2020-11-05 08:14:17
链表
ChatGPT为啥这么强:万字长文详解 by WolframAlpha之父
ChatGPT能够自动生成类似于人类撰写的文本,这一点非常引人注目,也是出乎意料的。那么,它是如何实现的?为什么它能够如此出色地生成有意义的文本呢?2023-02-16 18:22:44
聊聊 Stream API万字使用教程
可以看出创建了11条线程参与运算,转换为并行流后第三个参数方法才会执行,组合器的作用,其实是对参数2中的各个线程,产生的结果进行了再一遍的归约操作!2023-01-06 08:15:58
3 万字聊聊什么是 Redis
结束了漫长了MySQL,开始步入了Redis的殿堂。最近在做Redis技术输出时,明显发现进一步熟悉MySQL之后,对Redis的理解容易了许多。或许这就是进步吧!