之前的熔断、限流都是针对某一个资源的保护措施。而系统保护,是对整个系统的所有请求进行统一评估,统一限流。
系统保护规则
如下,每一条规则都是针对系统所有请求,设置不同的限流规则阀值,没有设置的规则默认不开启。其中一条规则达到阀值,整个系统都会被限流,直接拒绝请求并返回状态码429。
@PostConstruct
private void initSystemRule() {
List<SystemRule> rules = new ArrayList<>();
SystemRule rule = new SystemRule();
rule.setHighestCpuUsage(0.8);//CPU使用率80%
rule.setAvgRt(10); //平均响应时间10毫秒
rule.setQps(10); //Qps并发10
rule.setMaxThread(10); //线程并发10
rule.setHighestSystemLoad(2.5); //系统负载2.5
rules.add(rule);
SystemRuleManager.loadRules(rules);
}
响应时间、Qps、线程并发等之前已经讲过。下面主要介绍一下highestSystemLoad参数,系统负载
load系统负载
load即系统负载,这个参数仅对linux有效,是cpu能处理的最大进程数的一个指标值。假如系统最多能承载10个进程,那么
- 有5个进程运行时,load值为0.5,即50%,所有进程能够通畅运行,还有50%空闲空间。
- 有10个进程运行时,load值为1,即100%,所有进程能够通畅运行,没有空闲
- 有20个进程运行时,load值为2,即200%,有10个进程能够通畅运行,还有10个在等待中。
highestSystemLoad
在linux命令行输入top命令,右上角会显示load average,有三个指标值,load1,load5,load15。
分别是最近1分钟、5分钟、15分钟的平均系统负载,而load1就是本篇highestSystemLoad参数的对照值。当load1大于你设置的highestSystemLoad值,则触发限流。官方推荐的highestSystemLoad值为:cpu核心数 * 2.5