“深入浅出”系列之数通篇:(3)负载均衡

负载均衡:如果有多条等价路由(即目的地址、掩码、优先级和度量值都相同,但下一跳地址和出接口不同的路由),路由器可以实现负载分担,将流量分散到多条路径上。

分布式项目中负载均衡的实现

负载均衡的实现是确保系统高可用性、可扩展性和性能优化的关键。

一、负载均衡的定义

负载均衡是一种计算机网络技术,用于在多个计算机(计算机集群)、网络连接、CPU、磁碟驱动器或其他资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小化响应时间,并避免过载的目的。

二、负载均衡的层次

在分布式系统中,负载均衡通常分为以下几个层次:

二层负载均衡:

负载均衡服务器对外提供一个VIP(虚IP),集群中不同的机器采用相同的IP地址,但MAC地址不同。

当负载均衡服务器接收到请求后,通过改写报文的目标MAC地址将请求转发到目标机器。

三层负载均衡:

负载均衡服务器同样对外提供一个VIP,但集群中不同的机器采用不同的IP地址。

当负载均衡服务器接收到请求后,根据不同的负载均衡算法,通过IP将请求转发至不同的真实服务器。

四层负载均衡:

工作在OSI模型的传输层,处理TCP/UDP协议。

负载均衡服务器在接受到客户端请求后,通过修改数据包的地址信息(IP+端口号)将流量转发到应用服务器。

七层负载均衡:

工作在OSI模型的应用层,处理各种应用层协议(如HTTP、radius、DNS等)。

除了根据IP和端口进行负载均衡外,还可以根据URL、浏览器类别、语言等应用层信息来决定是否进行负载均衡。

三、负载均衡的实现方式

硬件负载均衡:

通过专门的硬件负载均衡设备来实现,如F5负载均衡器等。设备通常具有高性能、高可靠性和丰富的功能,但成本较高。

软件负载均衡:

使用软件来实现负载均衡,如Nginx等。软件通常具有灵活的配置和扩展性,成本较低,但在性能和可靠性方面可能不如硬件负载均衡设备。

四、负载均衡的算法

负载均衡算法决定了如何将请求分发到不同的服务器上。常见的算法包括:

轮询法:将请求按顺序轮流分配到后台服务器上,适用于服务器性能相同的情况。

随机法:通过系统随机函数,根据后台服务器列表的大小随机选取一台服务器进行访问。

源地址哈希法:根据客户端的IP地址通过哈希函数计算得到一个哈希值,将此哈希值和服务器列表的大小进行取模运算,得到的结果便是要访问的服务器地址的序号。

加权轮询法:根据服务器的配置和负载情况,为每台服务器分配不同的权重,然后按权重轮流分配请求。

最小连接数法:动态地选取当前积压连接数最少的服务器来处理当前请求,以提高服务器利用率。

Latency-Aware:根据请求服务器的往返延迟(RTT)动态地选择延迟最低的节点处理当前请求。

五、负载均衡的实现步骤

需求分析:明确负载均衡的需求,如高可用性、可扩展性、性能优化等。

选择合适的负载均衡设备和算法:根据需求分析结果,选择合适的负载均衡设备和算法。

配置负载均衡设备或软件:根据所选的负载均衡设备和算法,进行相应的配置和设置。

测试和优化:对配置好的负载均衡系统进行测试,确保其能够满足业务需求,并进行必要的优化和调整。

六、负载均衡的注意事项

高可用性:确保负载均衡系统能够在服务器故障时自动将流量转移到其他可用的服务器上。

可扩展性:随着业务的发展,能够方便地添加更多的服务器来扩展系统的处理能力。

安全性:能够识别和阻止恶意流量,保护服务器免受攻击。

监控和统计:提供对负载均衡器和服务器的性能和运行情况的监控和统计功能,以便于管理和故障排除。

综上所述,分布式项目中负载均衡的实现需要综合考虑多个因素,包括负载均衡的层次、实现方式、算法以及注意事项等。通过合理的配置和优化,可以确保系统的高可用性、可扩展性和性能优化。

集群高性能:负载均衡

  1. 单服务器无论如何优化,无论采用多好的硬件,总会有一个性能天花板,当单服务器的性能无法满足业务需求时,就需要设计高性能集群来提升系统整体的处理性能。高性能集群的本质很简单,通过增加更多的服务器来提升系统整体的计算能力。

由于计算本身存在一个特点:同样的输入数据和逻辑,无论在哪台服务器上执行,都应该得到相同的输出。因此高性能集群设计的复杂度主要体现在任务分配这部分,需要设计合理的任务分配策略,将计算任务分配到多台服务器上执行。

高性能集群的复杂性主要体现在需要增加一个任务分配器,以及为任务选择一个合适的任务分配算法。对于任务分配器,现在更流行的通用叫法是"负载均衡器"。但这个名称有一定的误导性,会让人潜意识里认为任务分配的目的是要保持各个计算单元的负载达到均衡状态。而实际上任务分配并不只是考虑计算单元的负载均衡,不同的任务分配算法目标是不一样的,有的基于负载考虑,有的基于性能(吞吐量、响应时间)考虑,有的基于业务考虑。考虑到"负载均衡"已经成为了事实上的标准术语,这里我也用"负载均衡"来代替"任务分配",但请你时刻记住,负载均衡不只是为了计算单元的负载达到均衡状态。

  1. 负载均衡分类

常见的负载均衡系统包括3种:DNS负载均衡、硬件负载均衡和软件负载均衡。

  1. DNS负载均衡

DNS 是最简单也是最常见的负载均衡方式,一般用来实现地理级别的均衡。例如,北方的用户访问北京的机房,南方的用户访问深圳的机房。DNS 负载均衡的本质是DNS 解析同一个域名可以返回不同的 IP 地址。例如,同样是 www.baidu.com,北方用户解析后获取的地址是 61.135.165.224(这是北京机房的 IP),南方用户解析后获取的地址是 14.215.177.38(这是深圳机房的 IP)

DNS 负载均衡实现简单、成本低,但也存在粒度太粗、负载均衡算法少等缺点。仔细分析一下优缺点,

​ 优点有:

​ 简单、成本低:负载均衡工作交给 DNS 服务器处理,无须自己开发或者维护负载均衡设备。

​ 就近访问,提升访问速度:DNS 解析时可以根据请求来源 IP,解析成距离用户最近的服务器地址,可以加快访问速度,改善性能。

​ 缺点有:

​ 更新不及时:DNS 缓存的时间比较长,修改 DNS 配置后,由于缓存的原因,还是有很多用户会继续访问修改前的 IP,这样的访问会失败,达不到负载均衡的目的,并且也影响用户正常使用业务。

​ 扩展性差:DNS 负载均衡的控制权在域名商那里,无法根据业务特点针对其做更多的定制化功能和扩展特性。

​ 分配策略比较简单:DNS 负载均衡支持的算法少;不能区分服务器的差异(不能根据系统与服务的状态来判断负载);也无法感知后端服务器的状态。

针对 DNS 负载均衡的一些缺点,对于时延和故障敏感的业务,有一些公司自己实现了 HTTP-DNS 的功能,即使用 HTTP 协议实现一个私有的 DNS 系统。这样的方案和通用的 DNS 优缺点正好相反。

  1. 硬件负载均衡

硬件负载均衡是通过单独的硬件设备来实现负载均衡功能,这类设备和路由器、交换机类似,可以理解为一个用于负载均衡的基础网络设备。目前业界典型的硬件负载均衡设备有两款:F5 和 A10。这类设备性能强劲、功能强大,但价格都不便宜,一般只有"土豪"公司才会考虑使用此类设备。普通业务量级的公司一是负担不起,二是业务量没那么大,用这些设备也是浪费。

硬件负载均衡的优点是:

​ 功能强大:全面支持各层级的负载均衡,支持全面的负载均衡算法,支持全局负载均衡。

​ 性能强大:对比一下,软件负载均衡支持到 10 万级并发已经很厉害了,硬件负载均衡可以支持 100 万以上的并发。

​ 稳定性高:商用硬件负载均衡,经过了良好的严格测试,经过大规模使用,稳定性高。

​ 支持安全防护:硬件均衡设备除具备负载均衡功能外,还具备防火墙、防 DDoS 攻击等安全功能。

硬件负载均衡的缺点是:

​ 价格昂贵:最普通的一台 F5 就是一台"马 6",好一点的就是"Q7"了。

​ 扩展能力差:硬件设备,可以根据业务进行配置,但无法进行扩展和定制。

  1. 软件负载均衡

软件负载均衡通过负载均衡软件来实现负载均衡功能,常见的有 Nginx,Nginx 是软件的7层负载均衡。

简单:无论是部署还是维护都比较简单。

便宜:只要买个Linux服务器,装上软件即可。

灵活:4 层和7层负载均衡可以根据业务进行选择;也可以根据业务进行比较方便的扩展,例如,可以通过 Nginx 的插件来实现业务的定制化功能。

其实下面的缺点都是和硬件

相关推荐
知识分享小能手几秒前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
茯苓gao3 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾3 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
DKPT4 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
aaaweiaaaaaa4 小时前
HTML和CSS学习
前端·css·学习·html
看海天一色听风起雨落5 小时前
Python学习之装饰器
开发语言·python·学习
speop6 小时前
llm的一点学习笔记
笔记·学习
非凡ghost6 小时前
FxSound:提升音频体验,让音乐更动听
前端·学习·音视频·生活·软件需求
Ai工具分享6 小时前
视频画质差怎么办?AI优化视频清晰度技术原理与实战应用
人工智能·音视频
ue星空6 小时前
月2期学习笔记
学习·游戏·ue5