0%

Sentinel系统规则

Sentinel 系统规则:全局视角的服务稳定性保障

Sentinel 系统规则从整体维度对应用进行流量控制,通过监控系统负载(Load)、CPU 使用率、平均响应时间(RT)等全局指标,平衡入口流量与系统承载能力,确保系统在最大化吞吐量的同时保持稳定。与流控、降级等针对具体资源的规则不同,系统规则是 “宏观调控”,保护整个应用的健康状态。

系统规则的设计理念

在分布式系统中,单个资源的限流或降级无法解决全局资源耗尽的问题(如 CPU 飙升、内存溢出)。系统规则基于 “漏斗模型”,将整个应用视为一个整体,通过以下思路实现保护:

  • 监控系统核心指标(Load、CPU、RT 等),当指标超出安全范围时,限制所有入口流量;
  • 避免 “局部最优” 导致 “全局崩溃”(如某个接口正常但整体 CPU 已达 90%);
  • 让系统 “优雅降级”,在高负载时优先保障核心功能可用。

系统规则的阈值类型详解

Sentinel 系统规则支持五种阈值类型,覆盖不同的系统健康维度,可根据业务场景选择配置:

1. Load(系统负载,仅 Linux/Unix 生效)

核心逻辑:基于系统 1 分钟负载均值(load1)判断,当负载过高且并发线程数超过系统容量时,触发保护。

关键参数:
  • 阈值:通常设置为 CPU核心数 * 2.5(如 4 核 CPU 设为 10);
  • 系统容量:由 maxQps * minRt 计算(系统最大 QPS 与最小响应时间的乘积)。
触发条件(需同时满足):
  1. 系统 load1 > 配置阈值;
  2. 并发线程数 > 系统容量。
适用场景:
  • 部署在 Linux 服务器上的应用;
  • 对系统负载敏感的场景(如 CPU 密集型服务)。

2. CPU usage(CPU 使用率,1.5.0 + 支持)

核心逻辑:当系统 CPU 使用率超过阈值时,触发保护,限制所有入口流量。

关键参数:
  • 阈值:取值范围 0.0~1.0(如 0.8 代表 80%)。
触发条件:

当前 CPU 使用率 > 配置阈值。

适用场景:
  • CPU 密集型应用(如数据分析服务);
  • 需严格控制 CPU 占用的场景(如多服务共享物理机)。

3. RT(平均响应时间)

核心逻辑:当应用所有入口流量的平均响应时间超过阈值时,触发保护,避免系统因处理缓慢导致请求堆积。

关键参数:
  • 阈值:单位为毫秒(如 500ms)。
触发条件:

全量入口请求的平均 RT > 配置阈值。

适用场景:
  • 响应时间敏感的应用(如实时交易系统);
  • 避免因慢请求导致的线程池耗尽。

4. 线程数

核心逻辑:当应用所有入口流量的并发线程数超过阈值时,触发保护,防止线程资源耗尽。

关键参数:
  • 阈值:允许的最大并发线程数(需根据线程池配置合理设置)。
触发条件:

全量入口请求的并发线程数 > 配置阈值。

适用场景:
  • 线程资源有限的应用(如 Tomcat 线程池配置较小的服务);
  • 避免因高并发导致的线程耗尽和 OOM。

5. 入口 QPS

核心逻辑:当应用所有入口流量的总 QPS 超过阈值时,触发保护,限制整体请求量。

关键参数:
  • 阈值:全量入口的最大 QPS(如 1000)。
触发条件:

全量入口请求的总 QPS > 配置阈值。

适用场景:
  • 需限制应用总流量的场景(如服务器带宽有限);
  • 防止突发全量流量压垮应用(如全站促销活动)。

系统规则的配置(Dashboard 操作)

系统规则针对整个应用生效,配置步骤如下:

  1. 登录 Sentinel Dashboard,选择目标服务;
  2. 进入 “系统规则” 菜单,点击 “新增”;
  3. 选择阈值类型并配置参数(以 CPU 使用率为例):
    • 阈值类型:CPU usage;
    • 阈值:0.8(80%);
  4. 点击 “添加”,规则立即生效。

注意:系统规则全局唯一,一个应用只能配置一条系统规则(可包含多种阈值类型,但通常建议单一维度配置)。

系统保护的执行逻辑

当系统规则被触发时,Sentinel 会采取全局流量控制,具体表现为:

  • 新的入口请求被拒绝(返回Blocked by Sentinel (system limit));
  • 已处理的请求不受影响,避免中断正在执行的业务;
  • 规则持续监控系统指标,当指标恢复到安全范围时,自动解除保护。

最佳实践与注意事项

1. 阈值设置原则

  • Load:参考 CPU核心数 * 2.5,避免设置过高导致系统无响应;
  • CPU usage:建议设置为 0.7~0.8(预留 20%~30% 资源应对波动);
  • RT:基于 P99 或 P999 响应时间设置(如正常 RT 的 P99 为 300ms,阈值可设为 500ms);
  • 线程数:不超过应用线程池最大线程数的 80%(如 Tomcat 最大线程 200,阈值设为 160);
  • 入口 QPS:基于压测结果,略低于系统最大承载 QPS(如压测最大 1000QPS,阈值设为 800)。

2. 适用场景选择

  • CPU 密集型服务:优先配置 “CPU usage” 或 “Load”;
  • IO 密集型服务:优先配置 “RT” 或 “线程数”;
  • 带宽受限服务:优先配置 “入口 QPS”。

3. 与其他规则的配合

系统规则是 “最后一道防线”,需与资源级规则(流控、降级)配合使用:

  • 先用资源级规则限制单个接口的流量(如秒杀接口单独限流);
  • 再用系统规则监控全局状态,防止资源级规则未覆盖的场景(如多个接口同时流量突增)。

总结

Sentinel 系统规则通过监控全局指标(Load、CPU、RT 等),实现了对应用的整体保护,避免因局部流量失控导致全局崩溃。其核心价值在于:

  • 从宏观视角平衡流量与系统负载;
  • 简化全局保护配置,无需为每个资源单独设置;
  • 支持多种阈值类型,适配不同业务场景

欢迎关注我的其它发布渠道

表情 | 预览
快来做第一个评论的人吧~
Powered By Valine
v1.3.10