过载现象和原因

x33g5p2x  于2022-01-06 转载在 其他  
字(1.2k)|赞(0)|评价(0)|浏览(675)

一 点睛

过载保护是在系统过载的时候,对已有的系统进行保护——保证系统尽力提供服务,保证系统承载的正常请求时正常的,丢弃非正常请求,让服务始终对外维持在最大服务能力的范围内。

二 什么是过载

1 正常情况

系统正常时,一个包从客户端发出,到返回给客户端的全部顺风顺水。

2 过载情况

系统单位时间内只能处理 n 个包,但客户给单位时候内给系统发送的包大于 n,久而久之,各级缓存会出现丢包现象,出现客户端请求超时现象,如果该服务还存在上下游服务,过载会导致更严重的级联失败的现象——雪崩。

在分布式系统中,由于某个节点故障或过载,形成请求堆积,最后导致整个系统都不可用的现象被称为雪崩。就像一个小雪球,越滚越大,最后形成雪崩现象。

当服务端的模块过载时,会导致其他调用该模块的系统也跟着级联超时,最终导致整个大系统都不能正常提供服务。

三 过载现象

在实际的项目中,过载会导致系统处理的包都超时,同时还会导致系统本身处理的性能下降。

过载主要有以下两种情况:

1 过多的请求导致服务器的处理能力下降

一般在发生过载时,系统是不堪重负的。由于前端会产生大量的超时请求,如果超时重试机制设置不当,触发超时重试,则导致请求数量变得更大,加重了过载的程度。除了程序自动重试,有时如果产品对用户的用到不合理,也会让用户产生很多无效的重试操作。

请求数量的增加会打破系统的平衡。例如,服务器收包的程序被频繁调用,占用了大量内存,内存不足又会使用 Swap 分区写磁盘等,最终导致服务器的 CPU 的负载升高。原本的业务进程就“吃紧”,加上 CPU 的负载升高的叠加效应,系统的处理能力下降得更厉害,最终形成恶性循环。

2 处理能力正常,但返回给前端的应答都被判定位无效

系统能够正常处理请求包,但返回给前端的应答,前端都提取认定为超时并返回给客户端。进程做的都是无用功,也不算是有效输出。

四 过载的根本原因

1 超时

超时是因为前端对于请求的响应有要求,如果超过了时限请求还没返回,则认为请求失败——再次发起重试,或者返回给更上层服务失败。如果前端没有超时的概念,多久返回都可以,后端服务处理不过来可以先将请求缓存起来,后面慢慢处理。但互联网业务大都要求即时反馈,所以超时是大多数服务必备的约束,具有超时特点的业务都要考虑如何处理过载问题。

2 缓存区满

系统不可能把全部请求都即使处理,来不及处理的请求会放到缓冲区缓存起来,依次处理。当业务过载时,处理请求的速度比不上增加请求的速度,就会导致缓冲区的请求越来越多。当超过缓冲区的大小后,就会导致缓冲区变满,后面的请求无处存放,最终被丢弃。

过载保护就从这两个原因入手来消除过载造成的影响。但过载保护不是要消除这两个原因,而是在系统发生这两种现象时,保证系统的最大处理能力,尽力提供服务。多于请求还是会被认定为超时或丢弃。过载保护是为了让系统处理能力不至于为0,是一种在异常情况下尽力服务的策略。

过载保护就是把原本全部要超时的请求划分出一部分来及时处理。发现迟早都会超时的请求则立即丢弃,或者立即返回过载超时。

相关文章