🌳多平台技术论坛专家博主,全网11W+粉丝
✈️公众号 | 乡下小哥编程 。回复 Java全套视频教程 或 前端全套视频教程 即可获取 300G+ 教程资料及项目实战案例
⭐职场开发经验干货分享、开源项目源码分享
前言
为什么要用 Sentinel?
在微服务中,一个接口流量突增或下游服务异常,可能导致雪崩。Sentinel 提供:限流:按 QPS、线程数、调用关系控制。熔断:下游服务异常时,自动快速失败。降级:服务慢或不稳定时,自动返回默认结果。实时监控:配合 Dashboard 可动态配置规则。
Sentinel主要在微服务中做 限流、熔断、降级、系统保护,一般和Spring Cloud、Dubbo等结合使用。
详细文章地址:https://mp.weixin.qq.com/s/ECUGv6GKkWlcn8H99UfxJA
下载使用
首先下载,地址:https://github.com/alibaba/Sentinel/releases
注意:jdk1.8环境/8080端口不能被占用
启动命令:java -jar sentinel-dashboard-1.8.8.jar
访问地址:http://localhost:8080/
账号密码:sentinel/sentinel
到这里, Sentinel就安装成功了,可能在界面上没有看到任何东西,并没有发现监控的服务,这是因为还没有启动项目,而Sentinel。本身采用的是懒加载模式,所以需要先去访问服务对应的接口,Sentinel才会进行工作。
在启动相关服务后,访问相关接口就可以看到。这里使用Apifox模拟对一个接口的多次请求,查看相关检测情况。
模拟限流
通过 Sentinel Dashboard 配置规则
这是最常用的方式,因为可以动态调整参数。
步骤
-
启动 Sentinel Dashboard(假设端口 8080)。
-
浏览器访问 http://localhost:8080,找到你的服务。
-
点击 新增流控规则:
-
资源名:getProductPage(必须和 @SentinelResource(value=...) 一致)。
-
限流模式:QPS
-
阈值:2(比如 2 QPS,方便测试)。
-
-
保存。
|
点击 新增流控规则,这里的资源名称和代码里边的保持一致(开头部分有提及)
同样的方式使用Apifox来模拟多个线程来请求接口,当接口的QPS超过2个后,则会触发限流,走指定的方法 handleBlock()
测试效果
可以查看相关接口请求的结果来查看,当进行限流的时候会走指定的方法。
模拟熔断
1. 熔断的基本概念
-
限流(FlowRule):控制流量,比如 QPS 超过 10 直接拒绝。
-
熔断(DegradeRule):当接口响应时间过长,或者异常比例过高,就临时“拉闸”,后续请求直接快速失败(走 handleBlock()),避免拖垮系统。
Sentinel 提供三种熔断策略:
-
平均响应时间 (RT):某段时间内平均响应时间超过阈值(比如 1000ms),触发熔断。
-
异常比例:错误率超过阈值时熔断。
-
异常数:一定时间内错误数超过阈值时熔断。
这里我测试的是 RT(响应时间)熔断。
Sentinel 的三种熔断策略(详细介绍说明)
1. 慢调用比例 (Slow Request Ratio)
适用场景:接口本身不一定报错,但响应太慢(比如超时)也会拖垮系统。逻辑:
-
在一个统计窗口(比如 10 秒)内,统计请求的平均响应时间(RT)。
-
如果某次请求耗时 超过阈值(比如 1000ms),就算一次“慢调用”。
-
计算慢调用占总请求的比例,如果超过配置的阈值(比如 50%),就触发熔断。
例子:
-
统计窗口:10 秒
-
响应时间阈值:1000ms
-
慢调用比例阈值:50%
-
在 10 秒内请求 10 次,其中 6 次响应时间 > 1000ms(60%),大于 50%,熔断。
2. 异常比例 (Exception Ratio)
适用场景:接口本身可能正常响应,也可能报错,重点看报错率。逻辑:
-
在统计窗口内统计请求总数与异常数(抛出异常)。
-
计算异常比例,如果超过配置的阈值(比如 50%),触发熔断。
例子:
-
统计窗口:60 秒
-
异常比例阈值:50%
-
60 秒内调用 100 次,其中 60 次抛出异常(60%),熔断。
3. 异常数 (Exception Count)
适用场景:接口请求量比较小,用比例统计不敏感,用固定异常次数更直接。逻辑:
-
在统计窗口内统计异常次数总和。
-
如果超过设定阈值(比如 5 次),直接熔断,不管总请求数多少。
例子:
-
统计窗口:60 秒
-
异常数阈值:5
-
60 秒内接口被调用 6 次,全部抛异常,熔断。
1. 最大 RT(响应时间阈值)
-
英文名:maxRT,对应 Sentinel Dashboard 的“慢调用 RT 阈值”或“RT 阈值”。
-
含义:判断一次请求是不是“慢调用”的标准。 当接口的响应时间 超过这个值(单位毫秒),这次请求就算作一次慢调用,用于慢调用比例策略。
-
使用场景:
-
只用于 慢调用比例策略。
-
如果接口很快(比如几十毫秒),就调大;如果接口本身慢,就调小,避免一直判为慢调用。
-
例子:
-
设置 maxRT=1000(1秒)。
-
在 10 秒内请求 10 次,其中 6 次响应时间 > 1 秒。
-
如果慢调用比例阈值是 50%,就会触发熔断。
2. 比例阈值 (Threshold / RatioThreshold)
这个是 异常比例触发熔断 的核心参数。
-
含义:在某个统计窗口(统计时长)内,接口总请求数里有多少比例是异常的(抛异常),超过这个比例就触发熔断。
-
取值:0.0 ~ 1.0(比如 0.2 就是 20%)。
例子:
-
设置比例阈值:0.5(50%)
-
统计时长:60秒
-
在 60 秒内,接口被调用了 100 次,其中 60 次抛异常,异常比例 = 60% > 50%,就触发熔断。
3. 熔断时长(TimeWindow / 熔断持续时间)
-
英文名:timeWindow。
-
含义:接口触发熔断后,维持熔断状态的时间(单位秒)。
-
效果:在这个时间内,接口的所有请求不会执行真实逻辑,而是直接走 handleBlock(),快速返回。
-
结束后行为:进入 半开状态,Sentinel 会允许少量请求测试健康度:
-
如果这些请求成功率/RT 正常,熔断恢复(Closed)。
-
如果还是异常,再次熔断一轮。
-
例子:
-
设置 timeWindow=10 秒。
-
触发熔断后,10 秒内所有请求直接失败(快速返回)。
-
10 秒后自动尝试恢复。
4. 最小请求数(MinRequestAmount / 请求阈值)
-
英文名:minRequestAmount。
-
含义:统计窗口期内,至少要有多少请求才进行熔断判断。
-
作用:避免低流量时因为一两次慢调用或异常就误触发熔断。
例子:
-
设置 minRequestAmount=5。
-
统计窗口是 10 秒。
-
只有当 10 秒内总请求数 ≥ 5 时,Sentinel 才会计算比例或异常数,才能触发熔断。
5. 统计时长 (StatIntervalMs / TimeWindow)
这个是 Sentinel 统计的滑动时间窗口。
-
单位:毫秒(ms),通常配置成 1000(1秒)、60000(1分钟)等。
-
Sentinel 会在这个时间段内统计请求总数、成功数、异常数、响应时间等指标,来判断是否满足熔断条件。
作用:
-
配合比例阈值、异常数阈值等条件使用。
-
避免因为某一两个请求异常就立刻熔断,需要在这个统计周期内达到阈值才会触发。
6. 这几个参数怎么一起配合?
一个典型的慢调用比例策略:
-
统计窗口:10 秒
-
最小请求数:5
-
最大 RT:1000 毫秒
-
慢调用比例阈值:50%
-
熔断时长:10 秒
流程:
-
每个请求统计响应时间。
-
超过 1 秒的记为“慢调用”。
-
每 10 秒统计一次:
-
请求总数 ≥ 5,并且慢调用占比 ≥ 50%,触发熔断。
-
-
熔断 10 秒 → 所有请求直接走 handleBlock()。
-
10 秒后,进入半开状态,放行 1~2 个请求探测。
代码案例
/** /** |
20个线程组、每个线程请求6次。查看执行效果:
查看实时监控
服务熔断后,就会走指定的方法。不至于服务阻塞
我这里将梳理的相关资料都放在GitHub了,可以看看。从选题->项目分析->开发->文档编等都有详细说明
https://github.com/zhengyuzh/GraduationDesignMaterials