一篇搞定Sentinel-搭建Spring Cloud Alibaba服务组件Sentinel实现服务资源控制
1、Sentinel介绍
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
官网地址:
https://sentinelguard.io/zh-cn/
https://github.com/alibaba/Sentinel
新手指南:
https://github.com/alibaba/Sentinel/wiki/%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97
2、首先下载Sentinel控制台
Sentinel下载地址:
https://github.com/alibaba/Sentinel/releases
选择合适的Sentinel版本进行下载。下载版本需要和Spring Cloud Alibaba版本进行对比,以防下载的版本和其他组件不兼容。这里附加版本说明地址:
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E#2021x-%E5%88%86%E6%94%AF
我使用的Spring Cloud Alibaba Version为2.2.6.RELEASE版本,通过版本关系对比需要下载的Sentinel版本为1.8.1,找到该版本进行下载:

这里直接选择jar包下载,也可以自己下载源码进行编译。

3、启动Sentinel控制台
由于下载的为jar包所以需要有JDK安装环境,安装环境是学习java必备的技能这里不做介绍,直接启动jar包:
java -jar sentinel-dashboard-1.8.1.jar
这里启动的默认端口号为8080。访问IP:8080登录sentinel,默认账号密码:sentinel

登录成功我们会发现控制台只有一个首页其他的什么的没有。因为目前没有服务程序接入,所以sentinel检测不到服务。我们可以修改启动命令,添加参数,让sentinel也能检测到自己。命令:
java -Dserver.port=8820 -Dcsp.sentinel.dashboard.server=localhost:8820 -Dcsp.sentinel.api.port=8719 -Dproject.name=spring-cloud -jar sentinel-dashboard-1.8.1.jar
-Dserver.port=8820 #指定控制台端口,不使用默认端口
-Dcsp.sentinel.dashboard.server=localhost:8820 #指定控制台地址和端口。
-Dcsp.sentinel.api.port=8719 #客户端监控 API 的端口默认是 8719,如果该端口占用,会在默认端口+1。如果+1后8020端口也被占用,则还会持续+1,直到发现没有占用的端口为止。
-Dproject.name=spring-cloud #指定应用的名称
这里只设置这几个参数。如果想要配置更多参数,可以查看官网启动配置项,文档地址:
https://sentinelguard.io/zh-cn/docs/startup-configuration.html
执行上面Java命令,启动Sentinel。访问IP:8820登录sentinel,默认账号密码:sentinel

登录成功,我们会发现控制台多个一个应用程序,这个就是通过上面Java启动命令修改的应用名称,sentinel检测到的自己的服务。
4、客户端接入控制台
通过上面三步骤,Sentinel控制台就安装并启动成功了,接下来我们该通过代码接入客户端。首先打开我们的SpringCloud项目,在模块module的pom中添加sentinel依赖,这里我加到我项目的订单模块中order-module:
<!--服务熔断降级-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
如果之前没有搭建过SpringCloud项目,可以查看我之前写的随笔进行搭建。点击文章链接:
https://www.cnblogs.com/eternality/p/17757310.html
jar包引入成功后,就可以在配置文件中加入配置信息了。配置如下:
spring:
profiles:
active: dev
application:
# 服务名称
name: order-service-model
cloud:
sentinel:
enabled: true #开启Sentinel
eager: true # 取消控制台懒加载,项目启动即连接Sentinel
transport:
dashboard: localhost:8080 #控制台地址
启动项目,查看sentinel控制台:

这里我启动了两个订单模块服务,可以发现,sentinel中显示了订单模块,说明在order-module中成功接入控制台了。
注意:
如果在配置文件中没有配置取消懒加载spring.cloud.sentinel.eager: true 则项目启动成功在sentinel控制台不会显示模块信息。需要访问一次接口才会显示,因为默认为懒加载模式。
接下来就可以测试Sentinel是否连接成功了,访问接口在实时监控和簇点链路中查看是否有接口信息。

如果想要对外暴露更多信息,我们可以集成SpringBoot的Actuator,对外暴露端点endpoint。Actuator可以了解服务的各种情况,健康检查,服务状态之类。
<!--监控-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
在配置文件中加入暴露端点信息:
#暴露端点
management:
endpoints:
web:
exposure:
include: '*'
5、规则配置
控制规则、降级规则、热点规则、系统规则、授权规则本次不做相关介绍,可以在官方上面学习。点击链接进行查看:
https://github.com/alibaba/Sentinel/wiki/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8
6、Sentinel配置规则持久化
Sentinel配置的规则默认不是真实存在的,只要重新启动微服务项目,之前添加的规则都会消失,需要重新添加。所以需要配置规则持久化,将配置信息保存在注册中心nacos中,这样不管重启多少次项目,最初创建的规则还在。
首先在pom中加入依赖:
<!-- Sentinel规则持久化至Nacos配置 -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
依赖加入成功后,就可以在项目配置文件中加入配置信息了:
spring:
profiles:
active: dev
application:
# 服务名称
name: order-service-model
cloud:
sentinel:
enabled: true
eager: true # 取消控制台懒加载,项目启动即连接Sentinel
transport:
dashboard: localhost:8080 #控制台地址
#port: 8722
datasource:
#五种规则持久化到Nacos中 authority(授权规则)、degrade(降级规则)、flow(流控规则)、param-flow(热点规则)、system(系统规则)
#sentinel 数据持久化-控流
ds1:
nacos:
server-addr: 127.0.0.1:8848 # 配置nacos server 注册中心地址
dataId: order-service-model-sentinel # 和nacos中保持对应
groupId: DEFAULT_GROUP # 和 nacos中保持对应
data-type: json # 规则类型:流控
namespace: 23857f22-27ac-4947-988a-1b88d4eeb807
# 对于 nacos 数据类型 注意网关流控规则对应 gw-flow
rule-type: flow #表示流控规则,可配置规则:flow,degrade,authority,system,param-flow,gw-flow,gw-api-group
#sentinel 数据持久化-降级
ds2:
nacos:
server-addr: 127.0.0.1:8848 # 配置nacos server 注册中心地址
dataId: order-service-model-sentinel-demotion # 和nacos中保持对应
groupId: DEFAULT_GROUP # 和 nacos中保持对应
data-type: json # 规则类型:流控
namespace: 23857f22-27ac-4947-988a-1b88d4eeb807
# 对于 nacos 数据类型
rule-type: degrade #表示降级规则,可配置规则:flow,degrade,authority,system,param-flow,gw-flow,gw-api-group
#sentinel 数据持久化-热点
ds3:
nacos:
server-addr: 127.0.0.1:8848 # 配置nacos server 注册中心地址
dataId: order-service-model-sentinel-hotspot # 和nacos中保持对应
groupId: DEFAULT_GROUP # 和 nacos中保持对应
data-type: json # 规则类型:流控
namespace: 23857f22-27ac-4947-988a-1b88d4eeb807
# 对于 nacos 数据类型
rule-type: PARAM_FLOW #表示降级规则,可配置规则:flow,degrade,authority,system,param-flow,gw-flow,gw-api-group
在nacos的配置列表中添加相关配置文件:
控流文件:order-service-model-sentinel
降级文件:order-service-model-sentinel-demotion
热点规则文件:order-service-model-sentinel-hotspot

order-service-model-sentinel配置信息:
[
{
"resource": "redis",
"limitApp": "default",
"grade": 1,
"count": 1,
"strategy": 0,
"controlBehavior": 0,
"clusterMode": false
}
]
https://github.com/alibaba/Sentinel/wiki/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8#%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6%E8%A7%84%E5%88%99-flowrule

order-service-model-sentinel-demotion配置信息:
[
{
"resource": "com.itmy.user.service.IUserExternalService:selectUserAll()",
"grade": 0,
"count": 100.0,
"passCount": 0,
"timeWindow": 20,
"minRequestAmount":1,
"statIntervalMs":2002,
"slowRatioThreshold":0.1
}
]
https://github.com/alibaba/Sentinel/wiki/熔断降级

order-service-model-sentinel-hotspot配置信息:
[
{
"resource": "sentinelTest",
"count": 2,
"paramIdx":0,
"durationInSec":1000
}
]
热点参数限流规则说明:
https://github.com/alibaba/Sentinel/wiki/热点参数限流

上面配置成功后,重新启动项目进行测试。我们可以看到不管重新启动多少次,配置的规则依然在。持久化规则就配置成功了。
注意:
如果后面需要更改配置规则,则需要在nacos的配置中进行修改。在Sentinel中更改如果重新启动项目则还会恢复原来的配置规则。
一篇搞定Sentinel-搭建Spring Cloud Alibaba服务组件Sentinel实现服务资源控制的更多相关文章
- Docker composer搭建Spring Cloud Alibaba 运行环境(二)
" Spring Cloud Alibaba要用到的组件很多,注册中心nacos, 限流sentinel, 数据库,网关等等.由于用到的组件相对较多,部署会很繁琐,最关键的是没有资源服务器, ...
- Spring Cloud Alibaba基础教程:Nacos服务发现与配置管理
随着微服务概念的流行,越来越多的公司采用`Spring Cloud`全家桶构建微服务系统,实现业务的快速迭代.`Spring Cloud`提供了快速构建分布式微服务常用组件,包括`Spring Clo ...
- 今天介绍一下自己的开源项目,一款以spring cloud alibaba为核心的微服务架构项目,为给企业与个人提供一个零开发基础的微服务架构。
LaoCat-Spring-Cloud-Scaffold 一款以spring cloud alibab 为核心的微服务框架,主要目标为了提升自己的相关技术,也为了给企业与个人提供一个零开发基础的微服务 ...
- Spring Cloud Alibaba 初体验(二) Nacos 服务注册与发现 + 集成 Spring Cloud Gateway
一.服务注册 添加依赖: <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>s ...
- Spring Cloud Alibaba 基础
Spring Cloud Alibaba 基础 什么是Spring Cloud Alibaba 这里我们不讲解Spring Cloud 和 Spring Cloud Alibaba 的关系,大家自己查 ...
- Spring Cloud Alibaba(1)---入门篇
Spring Cloud Alibaba入门篇 有关微服务的一些概念的东西我这里就不再阐述了,因为之前在写Spring Cloud系列的时候都有详细写过. 具体地址: Spring Cloud系列博客 ...
- Spring Cloud Alibaba(11)---Sentinel+Nacos持久化
Sentinel+Nacos持久化 有关Sentinel之前有写过两篇 Spring Cloud Alibaba(9)---Sentinel概述 Spring Cloud Alibaba(10)--- ...
- Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
摘要: 本文对Hystrix.Resilience4j.Sentinel进行对比,并探讨如何使用一行代码这种极简的方式,将Hystrix迁移到Sentinel. Hystrix 自从前段时间 宣布停止 ...
- Spring Cloud实战 | 第十一篇:Spring Cloud Gateway 网关实现对RESTful接口权限控制和按钮权限控制
一. 前言 hi,大家好,这应该是农历年前的关于开源项目 的最后一篇文章了. 有来商城 是基于 Spring Cloud OAuth2 + Spring Cloud Gateway + JWT实现的统 ...
- Spring Cloud Alibaba环境搭建
前言:Spring Cloud Alibaba是目前主流的分布式微服务架构,本文主要讲解了在IDEA中如何搭建Spring Cloud Alibaba环境,以及介绍Spring Cloud Aliba ...
随机推荐
- SaaS软件工程师成长路径
背景 SaaS软件工程师的成长需要循序渐进,和SaaS业务一样有耐心.SaaS工程师需要在"业务"."技术"."管理"三个维度做好知识储备. ...
- Django+DRF+Vue 网页开发环境安装(windows/Linux)
博客地址:https://www.cnblogs.com/zylyehuo/ 总览 一.安装 Django pip install django==3.2 二.安装 MySQL 驱动程序 pip in ...
- IDEA:使用Test注解,控制台无法输入
解决方案 步骤一: 点击help ===> Edit Custom VM Options... 步骤二: 添加文件末尾添加如下内容 -Deditable.java.test.console=tr ...
- linux下创建虚拟环境
安装虚拟环境: 1 sudo apt-get install virtualenvwrapper 配置环境变量: 1.创建目录用于存放虚拟环境. 1 mkdir $HOME/.virtualenvs ...
- python移动文件
#移动文件(目录) shutil.move("oldpos","newpos") shutil.move("D:/知乎日报/latest/一张优惠券, ...
- MySql之锁
MySql之锁 一.全局锁 对整个数据库加锁 应用:数据库所有表备份 二.表级锁 1.表锁 分为两类: 表共享读锁read lock 表独占写锁write lock 2.元数据锁 避免DML语句和DD ...
- 微服务项目使用RabbitMQ
微服务项目使用RabbitMQ 很久未用RabbitMQ了,根据网上的Demo,大多数是一个服务包含所有的生产者和消费者和配置,当自己去搭建服务的时候,还需要一些思考各种包的划分.无法无脑CV大法,所 ...
- IDA的使用-1
IDA的使用-1 主要收集我自己需要掌握的或者以前不知道的 开始界面 重载文件 在我们逆向过程中被文件修改过,这个时候需要我们重载一下,比如说开发过程中加点代码之类的 下面是加载额外文件,这个文件和我 ...
- Hybrid App 技术路径带动性能的提升
说到 Hybrid App(混合应用)大家都不陌生,因为这种开发模式大行其道发展的这些年取代了很多原生和 Web 应用,为什么大家对这种「Native + HTML5」的开发模式额外偏爱呢? 因为一方 ...
- 《SQL与数据库基础》23. 读写分离
目录 读写分离 一主一从 准备 配置 双主双从 准备 配置 主库配置 从库配置 从库关联主库 主库相互复制 双主双从读写分离 本文以 MySQL 为例.以 MyCat 数据库中间件为例,通过 MyCa ...