IO密集型、CPU密集型、负载、负载均衡
0、引入
从宏观上来讲,计算机可以抽象为【输入 > 计算 > 输出】这三部分
输入输出自然就是io,而计算部分自然归cpu管
不同的任务,对io和cpu的依赖程度不同,由此有了cpu密集型任务和io密集型任务
1、IO密集型
更依赖输入输出
比如说,我的逻辑是发送请求,然后等待别人计算后返回给我,那我几乎不用计算,就是输入,等待,接收返回值,输出。这样的业务对机器负载不高,几乎不占CPU的资源。但是时间上来说,会更耗时,至少是毫秒ms级别,如数据库10ms、远程缓存2ms、服务调用50ms
2、CPU密集型
更依赖CPU计算
参数收齐,开始调用本机CPU进行计算,耗时相比IO就很少了,通常是纳秒ns级别,比如压缩解压缩20ns、加减乘除5ns、循环判断2ns。这样的任务对机器的负载高一些,CPU在密集计算,占用较多CPU资源
3、负载
负载:指系统或设备在特定时间内处理的工作量。涵盖CPU使用率、内存占用、磁盘I/O操作、网络流量等多个维度
CPU负载:反映CPU工作强度,通常通过使用率指标来衡量
内存负载:表示系统当前内存的使用情况,过高会导致内存频繁交换
磁盘I/O负载:指磁盘读写频率,过高可能成为性能瓶颈
网络负载:衡量网络带宽利用率,过高会增加延迟
系统负载:通常用平均负载衡量,反映活动进程数量,过高会影响响应能力
4、负载均衡
4.1 概述
高负载会导致系统响应延迟、性能下降甚至崩溃
因此通过【负载均衡Load Balance】和容量规划来避免过载
负载均衡:是一种将工作负载(例如网络流量、数据请求、计算任务等)分配到多个计算资源(例如服务器、虚拟机、容器等)的技术
主要目的:优化性能、提高可靠性以及增加可扩展性
在工作环境中,负载均衡器通常为与应用程序的前端,接受并分配传入的请求,通过算法确定分配请求的最佳方式,从而防止任何一个资源过载或失效导致应用程序的性能下降或停止响应
4.2 硬件负载均衡
有专门为负载均衡任务而设计的物理设备,利用专用的硬件组件(如ASICs或FPGAs)来高效分发流量。其优点在于高性能和吞吐量,经过优化的任务处理,以及内置网络安全、监控和管理功能,能应对大量流量和多种协议。然而,硬件负载均衡器通常价格昂贵,配置和维护也需要专业知识,且可扩展性受限
4.3 软件负载均衡
目前我们常说的负载均衡,都是通过软件负载均衡器来实现的
软件负载均衡器,就是运行在通用服务器或虚拟机上的应用程序,使用软件算法将流量分发到多个服务器或资源。
其优点在于经济实惠、适应性强、易于扩展(可通过增加资源或升级硬件实现)以及灵活(可在各种平台和环境中部署)。但在高负载下,软件负载均衡器的性能可能较差,且可能影响主机系统资源,需要维护软件更新。
另外,负载均衡还可以根据分配策略的不同,分为普通负载均衡和动态负载均衡。普通负载均衡是指将用户请求均匀地分发到多个服务器,以实现服务器的负载均衡,通常采用静态的分发算法,如轮询、随机等。而动态负载均衡则是根据服务器的实时负载情况,动态地调整请求的分发策略,以保证服务器负载的均衡。每个服务器被分配一个权重值,权重越高,则分发到该服务器的请求越多。
此外,根据网络层次的不同,负载均衡还可以分为二层负载均衡(MAC)、三层负载均衡(IP)、四层负载均衡(TCP)和七层负载均衡(HTTP)。这些负载均衡类型的主要区别在于它们工作的网络层次和处理的请求类型。
负载均衡功能也可以放在云服务商的服务器上运行。这种方式可以根据实际需求动态调整资源,提高灵活性和可扩展性
4.4 负载均衡算法
4.4.1 轮询法
轮询法是最简单的一种负载均衡算法,它将请求按顺序轮流地分配到后端服务器上
这种算法对后端服务器的处理能力一视同仁,不考虑实际的连接数和系统负载
4.4.2 加权轮询法
加权轮询法给每个服务器都设置了权重,配置低、负载高的服务器权重低,配置高、负载低的服务器权重高。这样,高性能的服务器能够处理更多的请求。
4.4.3 随机法
随机法通过系统的随机算法,根据后端服务器的列表大小值来随机选择其中一台服务器访问。这种方式能够随机地分配请求,但对于每台服务器的实际负载情况并无考虑。
4.4.4 加权随机法(Weighted Random):
加权随机法类似于加权轮询法,不过在处理请求分担时是一个随机选择的过程。它根据后端服务器的配置和负载情况分配不同的权重,然后按照权重随机选择服务器。
4.4.5 最小连接数法
该算法是一种动态调度算法,通过服务器中当前所活跃的连接数来估计服务器的负载情况,把新的连接请求分配到当前连接数最小的服务器。这种算法能更好地利用后端服务器的处理能力,但在服务器处理能力差异大的情况下可能并不理想。
4.4.6 加权最小连接数算法(Weighted Least-Connection Scheduling)
这种算法用相应的权值表示各个服务器的处理性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询服务器的负载情况,并动态地调整其权值。
4.4.7 其他
除此之外,还有源地址哈希法等负载均衡算法,通过对发送请求的客户端的IP地址进行哈希运算,然后选择结果对应的服务器来处理请求,这样可以保证来自同一客户端的请求总是被分配到同一台服务器上,有助于保持会话的持续性。
参考文献
https://zhuanlan.zhihu.com/p/454954647
并发编程的任务类型:CPU密集型任务与I/O密集型任务_为什么io密集型适合并发-CSDN博客
负载均衡(理解/解析)-阿里云开发者社区