服务创造价值、存在造就未来
大家好,我是mikechen。
负载均衡是大型网站的必经之路,也是架构师的必备技能,无论是分布式、中间件、还是微服务..等等都需要涉及负载均衡,本篇就全面来详解负载均衡@mikechen
本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。
负载均衡(Load Balancing)是一种通过将工作负载分配到多个计算资源或系统组件上,以实现更好的性能、可靠性和可扩展性的技术。
负载均衡是为了应对系统中出现的高负载、高并发和大流量等情况,确保系统能够提供高性能、高可用性和可伸缩性。
如下图所示:
在面对大量用户请求同时访问系统的情况下,单一服务器可能无法有效处理所有请求,负载均衡可以将请求分散到多个服务器上,以确保每台服务器的负载相对较轻,提高并发处理能力。
负载均衡算法,主要分为如下5类:
1.轮循
轮询算法(Round Robin)这是最简单的负载均衡算法之一,将每个新的请求依次分配给服务器列表中的下一个服务器。
如下图所示:
适用于服务器性能相近的场景,确保请求相对均匀地分布在所有服务器上。
2.加权轮循
加权轮询算法(Weighted Round Robin) 类似于轮询算法,但为每个服务器分配一个权重值,权重越高的服务器获得处理请求的概率越大。
如下图所示:
在轮询的基础上根据硬件配置不同,按权重分发到不同的服务器,这样可以更好地适应不同服务器性能的场景。
3.随机
随机算法,该算法的基本思想是随机选择一个服务器来处理每个新的请求,以达到负载均衡的目的。
如下图所示:
随机算法的优点在于实现简单,然而由于其随机性,不能确保每个服务器获得相同数量的请求,因此在实际应用中可能导致某些服务器的负载较重,而其他服务器较轻。
4.最少连接
最少连接算法是一种常用的负载均衡算法,其基本思想是将新的请求分配给当前连接数最少的服务器,以达到负载均衡的目的。
记录每个服务器正在处理的请求数,把新的请求分发到最少连接的服务器上,因为要维护内部状态不推荐。
5.哈希
哈希算法(Hash-based Load Balancing)根据请求的某些特征,比如:IP地址、URL等计算哈希值,然后将请求分配到对应哈希值的服务器上。
如下图所示:
这种算法确保相同的请求始终被分配到相同的服务器,有助于处理特定的会话保持等需求。
负载均衡主要分为二层 三层 四层 七层负载均衡。
1.二层负载均衡
二层负载均衡,是在OSI模型的数据链路层(第二层)进行负载均衡的一种方式。
在这个层次上,主要涉及到MAC地址的操作,这种负载均衡通常被称为二层交换机(Layer 2 Switching),或二层负载均衡器。
在二层负载均衡中,负载均衡器通过检查数据帧的目标MAC地址来决定将数据帧转发到哪个服务器。
二层负载均衡通常用于处理非常大量、短会话的负载均衡需求,比如在局域网内进行服务器之间的负载均衡。
2.三层负载均衡
三层负载均衡,是在OSI模型的网络层(第三层)进行负载均衡的一种方式。
在这个层次上主要涉及到IP地址的操作,这种负载均衡通常被称为三层交换机(Layer 3 Switching),或三层负载均衡器。
3.四层负载均衡
四层负载均衡是在OSI模型的传输层(第四层)进行负载均衡的一种方式,在这个层次上,主要涉及到IP地址和端口号的操作。
实现四层负载均衡的软件有:
F5:F5是一款商业硬件负载均衡,支持四层和七层的负载均衡,功能很好,但是成本很高;lvs:LVS是一个在Linux上实现的四层负载均衡器,支持多种负载均衡算法,如轮询、最小连接数等;nginx:Nginx是一款广泛使用的开源Web服务器,同时也支持四层负载均衡;haproxy:HAProxy是一款开源的、高性能的负载均衡软件,支持TCP和HTTP应用层负载均衡。4.七层负载均衡
七层负载均衡,通常用于HTTP和HTTPS流量的负载均衡。
七层负载均衡器能够深入到应用层的协议信息,例如:HTTP头部、URL等,这使得它可以根据更丰富的信息进行负载均衡
实现七层负载均衡的软件有:
Nginx: 除了支持四层负载均衡外,NGINX也是一种强大的七层负载均衡器,特别适用于处理HTTP和HTTPS流量。F5:F5是一款商业七层负载均衡和应用交付控制器,提供丰富的负载均衡、安全性和性能优化功能。总的来说,一般是lvs做4层负载,nginx做7层负载。
随着应用的用户数量和流量的增加,单一负载均衡实例可能会成为瓶颈,无法有效地处理所有的请求。
通过横向扩展,可以将流量分散到多个负载均衡器实例上,提高整个系统的处理能力。
如下图所示:
如果系统中只有一个负载均衡器实例,其故障可能导致整个系统的不可用。
通过横向扩展,多个负载均衡器实例可以共同工作,即使其中一个实例发生故障,其他实例仍然可以继续分发流量,提高系统的可用性。
除此之外,通过横向扩展负载均衡,还可以增加系统的整体性能,分担单一负载均衡实例的压力,从而提高系统的响应速度和处理能力。
负载均衡技术可以应用于多种场景:
1.Web应用负载均衡
场景描述: 高流量的Web应用中,大量用户访问Web服务器,请求包括网页、图片、CSS、JavaScript等资源。解决方案: 负载均衡器将用户请求分发到多个Web服务器,确保每个服务器获得相对均匀的负载,提高整体性能和响应速度。2.数据库负载均衡
场景描述: 数据库服务器是应用关键组件,需要处理大量数据库查询和事务。解决方案: 负载均衡器确保数据库负载均匀分布,防止某个数据库成为性能瓶颈,提高数据库性能和可靠性。3.应用服务负载均衡
场景描述: 复杂的应用架构中,多个应用服务器共同处理用户请求,每个服务器负责不同的业务逻辑。解决方案: 负载均衡器确保请求分配到可用的应用服务器,防止某个服务器过载,提高整体应用性能和可用性。4.云计算负载均衡
场景描述: 在云计算环境中,服务需要在云中多个实例之间分发流量。解决方案: 云服务提供商提供的负载均衡服务可用于分发云服务的流量,确保用户能够访问到可用的云资源。本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。