CPU 过载保护

416 阅读2分钟

之前我们介绍过影响cpu性能的因素有很多,其中就包括代码逻辑和一些相关视频图片操作,会占用大量cpu内存。当进行大量的复杂的cpu密集型计算时,就可能会导致服务器瘫痪。这个时候我们就需要进行一些操作来对cpu进行保护。

我们都知道常见的过载保护指的是在出现短路或者电压承载过大时,会触发电源的过载保护设备,该设备要不熔断、要不跳闸切断电源。

对于我们的cpu我们也要进行类似的操作来进行cpu保护。在过载触发时,切断用户服务直接返回报错,在压力恢复时,正常响应用户请求。

在我们进行这个方案设计时,主要考虑的因素有以下几点:

获取 CPU 使用率

我们需要获取当前进程下的 CPU 使用情况,而不是整体机器的 CPU,因此需要使用 PS 这个命令,而不是利用 Node.js 本身的 OS 模块

性能影响

由于在 Node.js 就只有一个主线程,因此必须严格减少框架在主线程的占用时间,控制框架基础模块的性能损耗,从而将主线程资源更多服务于业务,增强业务并发处理能力。

概率丢弃

在获取 CPU 值以后,我们可以根据当前 CPU 的情况进行一些丢弃处理,但是应尽量避免出现误处理的情况。比如当前 CPU 某个时刻出现了过高,但是立马恢复了,这种情况下我们是不能进行丢弃请求的,只有当 CPU 长期处于一个高负载情况下才能进行请求丢弃。

优先级处理

优先级实现最简单的方式,就是接受一个白名单参数,如果设置了则会在白名单中的请求通过处理,无须校验,如果不在才会进行检查。

此文章为6月Day024学习笔记,内容来源于极客时间《Node.js开发实战》,强烈推荐该课程!