跳转到内容

系统保护

系统保护是从系统维度进行的自适应过载保护,防止系统在高负载下崩溃。

系统负载高时持续接收请求可能导致系统崩溃。集群环境下,负载均衡会将流量转发到其他机器;若其他机器也处于边缘状态,增加的流量会导致连锁崩溃,最终整个集群不可用。

解决方案: 让系统入口流量与系统负载达到平衡,保证系统在能力范围内处理最多请求。

指标 参数 说明
系统负载 highestSystemLoad Linux load1,超过阈值触发保护
CPU 使用率 highestCpuUsage CPU 使用率,超过阈值触发保护
入口 QPS qps 全局入口 QPS,超过阈值触发保护
平均响应时间 avgRt 所有入口流量的平均 RT,超过阈值触发保护
并发线程数 maxThread 入口并发线程数,超过阈值触发保护
SystemRule rule = new SystemRule();
rule.setHighestSystemLoad(2.0); // 系统负载超过 2.0 时触发
rule.setHighestCpuUsage(0.8); // CPU 超过 80% 时触发
rule.setQps(5000); // 全局入口 QPS 超过 5000 时触发
rule.setAvgRt(200); // 平均 RT 超过 200ms 时触发
rule.setMaxThread(200); // 并发线程数超过 200 时触发
SystemRuleManager.loadRules(Collections.singletonList(rule));

Sentinel 的系统保护不是简单的阈值限流,而是基于系统负载的自适应调整:

系统负载上升 → Sentinel 检测到 → 自动降低入口流量
系统负载下降 → Sentinel 检测到 → 逐步恢复入口流量

基于 Linux load1(1 分钟平均负载)进行判断:

  • 当 load1 超过阈值时,触发保护,拒绝部分请求
  • 当 load1 恢复正常时,自动解除保护

注意: 系统负载保护仅在 Linux/macOS 上有效,Windows 不支持。

基于 CPU 使用率进行判断:

  • 当 CPU 使用率超过阈值时,触发保护
  • 适用于所有操作系统

基于全局入口 QPS 进行判断:

  • 当入口 QPS 超过阈值时,触发保护
  • 适用于系统整体容量保护
维度 资源流控 系统保护
粒度 单个资源 整个系统
指标 资源级别的 QPS/线程数 系统级别的负载/CPU/QPS
配置方式 针对每个资源单独配置 全局配置
适用场景 保护单个接口/服务 保护整个系统不被过载

在集群场景下,单机的系统保护可能不够。Sentinel 提供集群级别的过载保护:

请求 → 负载均衡 → 机器 A(负载高,触发保护,拒绝请求)
→ 机器 B(负载正常,接受请求)
→ 机器 C(负载正常,接受请求)

每台机器独立进行系统保护判断,负载均衡器(如 Nginx、Spring Cloud LoadBalancer)配合进行流量调度。

组件 职责
Sentinel 系统保护 保护单机不过载,快速拒绝过量请求
Kubernetes HPA 根据负载指标自动扩缩容
流量突增 → Sentinel 拒绝过量请求(秒级响应)
→ HPA 检测到负载上升 → 触发扩容(分钟级响应)
→ 新 Pod 就绪 → 流量分散 → Sentinel 恢复

系统保护是 Sentinel 的最后一道防线。当资源级流控和熔断都无法完全保护时,系统保护从整体维度防止过载。