持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情
Sentinel是阿里打造的一款流量控制的工具。
Sentinel 介绍
Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
Sentinel 功能
- 流量控制。
- 熔断降级。
- 系统负载保护功能。
其中流量控制有以下几个角度:
- 资源的调用关系,例如资源的调用链路,资源和资源之间的关系;
- 运行指标,例如 QPS、线程池、系统负载等;
- 控制的效果,例如直接限流、冷启动、排队等。
本文章主要介绍Sentinel流量控制的使用。
更多详细内容介绍请看 阿里的Sentinel文档
Sentinel流量控制使用
这里以制作docker镜像为例。 官网下载sentinel控制台jar包
- 构建sentinel镜像
docker build -it sentinel .
- 启动sentinel
docker run -d --name sentinel -p 9670:8080 sentinel镜像id
- 在 nacos 配置sentinel限流持久化规则
[
{
"resource": "/system/user/login",
"limitApp": "default",
"grade": 1,
"count": 2,
"strategy": 0,
"controlBehavior": 0,
"clusterMode": false
}
]
- resource : 资源名,限流规则作用对象,一般为请求URI
- limitApp : 控流针对的调用来源,default则不区分调用来源
- grade : 限流阈值类型;0表示根据并发量来限流,1表示根据QPS来进行限流
- count : 限流阈值
- strategy : 调用关系限流策略
- controlBehavior : 限流控制行为(快速失败 、warm up 、排队等候)
- clusterMode : 是否为集群模式
项目引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!-- nacos做sentinel流控等规则的持久化 用-->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
以SpringBoot配置文件为例
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
sentinel:
transport:
dashboard: 127.0.0.1:9670
# 客户端监控API的端口
port: 8877
# 使用nacos持久化sentinel限流规则
datasource:
ds1:
nacos:
server-addr: 127.0.0.1:8466
# dataId是 nacos 配置列表的Data ID:
dataId: sentinel-service
groupId: DEFAULT_GROUP
# nacos中配置内容的数据格式
data-type: json
rule-type: flow