——下载安装
- 下载地址:https://github.com/alibaba/Sentinel/releases
- 命令行启动(默认端口8080不能被占用):
java -jar sentinel-dashboard-1.7.0.jar
- 查看界面:http://localhost:8080
- 账号-密码:sentinel
——概念
流控
- 流控:流量控制;单机阈值设为1,表示1秒钟内查询1次就ok,若超过次数1就直接快速失败,报默认错误
- 线程数:当调用该api的线程数达到阈值时开始限流
- QPS:每秒请求数
- 关联:当关联的资源达到阈值时,就限流自己(当与A关联的资源B达到阈值时,就限流A自己)
- 预热(直接,Warm up):
- 应用场景:秒杀系统在开启的瞬间,会有很多流量进入,很有可能把系统打死,预热方式就是为了保护系统,可慢慢的把流量放进来,慢慢的把阈值增长到设置的阈值
- 公式:阈值除以coldFactor(冷加载因子,默认为3),经过预热时长后才会达到阈值
- 排队等待(必须是QPS):请求以匀速通过,阈值必须设为QPS,否则无效
降级
Sentinel断路器没有半开的状态
- RT(秒级):平均响应时间,超出阈值且在窗口内通过的请求>=5,两个条件同时满足后触发降级
- 异常比例(秒级):当资源的每秒请求量>=5,并且每秒异常数占通过量的比例超过阈值之后,进入降级状态;异常比例的阈值为【0.0-1.0】
- 异常数(分钟级):当资源近1分钟的异常数目超过阈值之后会进行熔断;时间窗口一定要大于60秒
热点限流
分为系统默认和自定义,限流出问题后,都是sentinel系统默认的提示:Block by sentinel(flow limiting)
- @SentinelResource和@HystrixCommand一样,value 为Sentinel配置中的资源名,blockHandler 为自定义处理方法名,超过配置中的QPS,立即执行降级处理,只负责@SentinelResource中的限流规则,不处理代码中的异常报错
@SentinelResource(value = "testHotKey", blockHandler = "deal_testHotKey")
- 参数例外项:可在满足热点限流的情况下,添加额外的参数,使其不被限流,能够进行正常访问;只支持8种数据类型和String
- 流控规则资源名区别:加“/”走系统默认,不加“/”为SentinelResource中的自定义处理方法
- 关闭微服务,流控规则也消失,说明规则是临时的
- 代码异常处理(fallback)和限流异常处理(blockHandler)同时进行配置,只会优先选择限流异常处理
持久化
- 思路:将限流配置规则持久化进Nacos保存,只要刷新端口上的某个rest地址,sentinel控制台的流控规则就能看到,只要Nacos里面的配置不删除,针对端口上Sentinel上的流控规则持续有效
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
spring:
application:
name: cloudalibaba-sentinel-service
cloud:
nacos:
discovery:
# nacos服务注册地址
server-addr: localhost:8848
sentinel:
transport:
# 默认8719端口,假如被占用会自动从8719开始依次+1扫描,直到知道找到未占用端口
port: 8719
# 配置sentinel dashboard地址
dashboard: localhost:8080
datasource:
ds1:
nacos:
server-addr: localhost:8848
dataId: cloudalibaba-sentinel-service
groupId: DEFAULT_GROUP
data-type: json
rule-type: flow
- Nacos业务规则:
[
{
"resource": "/retaLimit/byUrl",
"limitApp": "default",`
"grade": 1,
"count": 1,
"strategy": 0,
"controlBehavior": 0,
"clusterMode": false
}
]
resource:资源名称;
limitApp:来源应用;
grade:阈值类型,0表示线程数,1表示QPS;
count:单机阈值;
strategy:流控模式,0表示直接, 1表示关联,2表示链路;
controlBehavior:流控效果,0表示快速失败,1表示Warm Up, 2表示排队等待;
clusterMode:是否集群。