负载均衡最全详解(万字图文总结)

负载均衡最全详解(万字图文总结)-mikechen

负载均衡无处不在,无论是分布式,还是中间件,还是微服务,都需要涉及到负载均衡,本篇就接着分享负载均衡@mikechen

什么是负载均衡

负载均衡是一种在计算机网络和系统架构中使用的技术,用于均衡分发工作负载到多个资源,比如:服务器、计算节点或存储设备上,以提高系统的性能、可伸缩性。

如下图所示:

负载均衡最全详解(万字图文总结)-mikechen

在传统的单个服务器架构中,当请求量增加时,单个服务器可能无法处理所有的请求,导致性能下降或系统崩溃。

负载均衡技术通过将负载(请求)分发到多个服务器上,实现资源的合理利用,从而平衡服务器的负载。

这样可以提高系统的处理能力,增加并发处理能力,并减少单点故障的风险。

 

负载均衡作用

负载均衡的作用,主要包含如下几点:

1.提高系统性能

负载均衡技术将负载(请求或任务)分发到多个资源上,使得系统能够处理更多的并发请求,从而提高整体的处理能力和性能。

2.实现高可用性

负载均衡可以将负载分发到多个资源上,当其中一个资源发生故障或不可用时,负载均衡可以自动将请求转发到其他可用的资源。

这样可以降低单点故障的风险,提高系统的可靠性和容错性。

3.提高系统可伸缩性

随着业务的增长,负载均衡技术可以动态地增加或减少资源的数量,根据实际负载情况进行扩展或收缩。

通过自动分配负载到新增的资源上,系统可以实现水平扩展,满足不断增长的需求,提高系统的可伸缩性。

4.优化资源利用

负载均衡技术可以根据资源的性能、可用性和负载情况,合理地分配请求或任务。

这样可以最大限度地利用资源,避免资源的空闲或过载,提高资源的利用率和效率。

 

负载均衡的原理

系统的扩展可分为纵向(垂直)扩展和横向(水平)扩展。

比如:纵向扩展,是从单机的角度通过增加硬件处理能力,比如CPU处理能力,内存容量,磁盘等方面,实现服务器处理能力的提升。

这种情况,不能满足大型分布式系统(网站),大流量,高并发,海量数据的问题。

因此需要采用横向扩展的方式,通过添加机器来满足大型网站服务的处理能力,比如:一台机器不能满足,则增加两台或者多台机器,共同承担访问压力。

如下图所示:

负载均衡最全详解(万字图文总结)-mikechen

负载均衡器作为一个中间层,接收来自客户端的请求,并根据特定的算法和策略将请求分发给后端的多个资源(如服务器、计算节点或存储设备)。

客户端可以直接将请求发送给负载均衡器,或通过域名解析、DNS等方式间接连接到负载均衡器。

 

负载均衡算法

负载均衡算法,主要分为如下5类:

1.轮循

负载均衡最全详解(万字图文总结)-mikechen

轮询很容易实现,将请求按顺序轮流分配到后台服务器上,适合场景:适合于应用服务器硬件都相同的情况。

2.加权轮循

负载均衡最全详解(万字图文总结)-mikechen
在轮询的基础上根据硬件配置不同,按权重分发到不同的服务器,适合场景:跟配置高、负载低的机器分配更高的权重,使其能处理更多的请求。

 

3.随机

负载均衡最全详解(万字图文总结)-mikechen
通过系统随机函数,根据后台服务器列表的大小值来随机选取其中一台进行访问。

 

4.最少连接

负载均衡最全详解(万字图文总结)-mikechen
记录每个服务器正在处理的请求数,把新的请求分发到最少连接的服务器上,因为要维护内部状态不推荐。

 

5.哈希

根据客户端的 IP 地址将请求分配给服务器,相同 IP 的客户端将始终被分配到同一台服务器上,这对于某些需要保持会话的应用程序很有用。

负载均衡最全详解(万字图文总结)-mikechen
通过哈希函数计算得到一个哈希值,将此哈希值和服务器列表的大小进行取模运算,得到的结果便是要访问的服务器地址的序号。

适合场景:根据请求的来源IP进行hash计算,同一IP地址的客户端,当后端服

 

负载均衡的分类

负载均衡最全详解(万字图文总结)-mikechen
负载均衡主要分为:二层、三层、四层、以及七层负载均衡。

1.二层负载均衡(mac)

根据OSI模型分的二层负载,一般是用虚拟mac地址方式,外部对虚拟MAC地址请求,负载均衡接收后分配后端实际的MAC地址响应)。

2.三层负载均衡(ip)

一般采用虚拟IP地址方式,外部对虚拟的ip地址请求,负载均衡接收后分配后端实际的IP地址响应。

3.四层负载均衡(tcp)

四层的负载均衡就是基于IP 端口的负载均衡,在三次负载均衡的基础上,用ip port接收请求,再转发到对应的机器。

实现四层负载均衡的软件有:

  • F5:硬件负载均衡器,功能很好,但是成本很高。
  • lvs:重量级的四层负载软件
  • nginx:轻量级的四层负载软件,带缓存功能,正则表达式较灵活
  • haproxy:模拟四层转发,较灵活

 

4.七层负载均衡(http)

七层的负载均衡,就是基于虚拟的URL或主机IP的负载均衡,根据虚拟的url或IP,主机名接收请求,再转向相应的处理服务器。

实现七层负载均衡的软件有:

  • haproxy:天生负载均衡技能,全面支持七层代理,会话保持,标记,路径转移;
  • nginx:只在http协议和mail协议上功能比较好,性能与haproxy差不多;
  • apache:功能较差
  • Mysql proxy:功能尚可。

总的来说,一般是lvs做4层负载;nginx做7层负载。

 

负载均衡应用场景

负载均衡最全详解(万字图文总结)-mikechen

负载均衡技术可以应用于多种场景,包括但不限于以下几个方面:

1.Web应用负载均衡

在Web应用中,负载均衡可以将请求分发到多个Web服务器上,以提高并发处理能力和吞吐量,适用于高访问量的网站、电子商务平台等场景。

 

2.数据库负载均衡

对于数据库集群,负载均衡可以将数据库请求分发到多个数据库节点上,实现数据的分布和负载的均衡,这有助于提高数据库的处理能力、可靠性和可伸缩性。

 

3.应用服务负载均衡

在分布式应用中,负载均衡可以将请求分发给多个应用服务器实例,以平衡工作负载和提高系统的性能,这适用于微服务架构、分布式计算、消息队列等场景。

 

4.高性能计算负载均衡

在科学计算、大数据处理和高性能计算领域,负载均衡技术可以将计算任务分发到多个计算节点上,实现任务的并行处理和加速,它适用于集群计算、分布式存储、数据分析等场景。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

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

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

评论交流
    说说你的看法