1、Sentinel介绍

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
官网地址

https://sentinelguard.io/zh-cn/

GitHub地址

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实现服务资源控制的更多相关文章

  1. Docker composer搭建Spring Cloud Alibaba 运行环境(二)

    " Spring Cloud Alibaba要用到的组件很多,注册中心nacos, 限流sentinel, 数据库,网关等等.由于用到的组件相对较多,部署会很繁琐,最关键的是没有资源服务器, ...

  2. Spring Cloud Alibaba基础教程:Nacos服务发现与配置管理

    随着微服务概念的流行,越来越多的公司采用`Spring Cloud`全家桶构建微服务系统,实现业务的快速迭代.`Spring Cloud`提供了快速构建分布式微服务常用组件,包括`Spring Clo ...

  3. 今天介绍一下自己的开源项目,一款以spring cloud alibaba为核心的微服务架构项目,为给企业与个人提供一个零开发基础的微服务架构。

    LaoCat-Spring-Cloud-Scaffold 一款以spring cloud alibab 为核心的微服务框架,主要目标为了提升自己的相关技术,也为了给企业与个人提供一个零开发基础的微服务 ...

  4. Spring Cloud Alibaba 初体验(二) Nacos 服务注册与发现 + 集成 Spring Cloud Gateway

    一.服务注册 添加依赖: <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>s ...

  5. Spring Cloud Alibaba 基础

    Spring Cloud Alibaba 基础 什么是Spring Cloud Alibaba 这里我们不讲解Spring Cloud 和 Spring Cloud Alibaba 的关系,大家自己查 ...

  6. Spring Cloud Alibaba(1)---入门篇

    Spring Cloud Alibaba入门篇 有关微服务的一些概念的东西我这里就不再阐述了,因为之前在写Spring Cloud系列的时候都有详细写过. 具体地址: Spring Cloud系列博客 ...

  7. Spring Cloud Alibaba(11)---Sentinel+Nacos持久化

    Sentinel+Nacos持久化 有关Sentinel之前有写过两篇 Spring Cloud Alibaba(9)---Sentinel概述 Spring Cloud Alibaba(10)--- ...

  8. Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel

    摘要: 本文对Hystrix.Resilience4j.Sentinel进行对比,并探讨如何使用一行代码这种极简的方式,将Hystrix迁移到Sentinel. Hystrix 自从前段时间 宣布停止 ...

  9. Spring Cloud实战 | 第十一篇:Spring Cloud Gateway 网关实现对RESTful接口权限控制和按钮权限控制

    一. 前言 hi,大家好,这应该是农历年前的关于开源项目 的最后一篇文章了. 有来商城 是基于 Spring Cloud OAuth2 + Spring Cloud Gateway + JWT实现的统 ...

  10. Spring Cloud Alibaba环境搭建

    前言:Spring Cloud Alibaba是目前主流的分布式微服务架构,本文主要讲解了在IDEA中如何搭建Spring Cloud Alibaba环境,以及介绍Spring Cloud Aliba ...

随机推荐

  1. adb如何做Android ui自动化(这一篇就够了)

    一.简介 我们都知道在做Android ui自动化的时候用的是appium,环境搭建贼难受.如果我们在工作中遇到需要实现简单的自动化功能,可以直接使用adb来完成,无需去搭建繁琐的appium.ADB ...

  2. AcWing 第 92 场周赛 C题 4866. 最大数量 题解

    原题链接 链表 + 并查集乱搞做法: 思路 首先可以发现,想要让度数尽量大,那我们应该构造成菊花图,即下图所示: 对于每个需求,我们可以知道,如果之前他们没有连在一起,那我们一定得把他们连在一起,该过 ...

  3. PoW是什么?

    PoW是什么? 工作量证明(proof of work,PoW)是一种用于确认和验证区块链交易和新区块有效性的共识算法.区块链中常见的工作量证明算法包括比特币的SHA-256.以太坊的Ethash.莱 ...

  4. 文心一言 VS 讯飞星火 VS chatgpt (72)-- 算法导论7.1 3题

    三.请简要地证明:在规模为 n 的子数组上,PARTITION 的时间复杂度为 Θ(n). 文心一言: 首先,我们需要明确PARTITION函数的具体定义.PARTITION函数通常用于快速排序算法中 ...

  5. auto-GPT部署

    Auto-GPT 是一个实验性开源应用程序,其作者在3月31日将其发布在Github上.它以GPT-4 作为驱动,可以自主做出决定以实现目标,无需用户干预.AutoGPT的地址:https://git ...

  6. 集训后的一些wp

    新生赛后 0x01 2048(jk出发) 修改跳转条件为nop,随便动一下直接打印flag.这个场景我幻想过很久了,一直没做到,这次参考wp做出来了知道怎么做了.学到! 0x02 four(dsact ...

  7. SRC赏金猎人—笔记二

    以下是如何将速率限制漏洞的影响从低增加到高甚至严重 过程 1.我访问了该网站,然后开始在网站的主文件中手动查找main.js 2.我发现有一个 Web 服务托管在 http:// redacted.c ...

  8. Linux 内核音频数据传递主要流程 (下)

    来而不往非礼也.前面看到了用户空间应用程序和 DMA buffer 之间交换数据,并更新 runtime->control->appl_ptr 指针的过程,这里看一下硬件设备驱动程序在完成 ...

  9. SQL select关联表查询 统计另一个表合计

    db_order 是记录订单的,  一个订单一条记录.(oid, 运费, 实收金额, 产品KEY.......) db_soid  是记录出售商品的 (id, 商品名称, 售价, 数量, 成本, 标识 ...

  10. Unity 性能优化Shader分析处理函数:ShaderUtil.GetShaderGlobalKeywords用法

    Unity 性能优化Shader分析处理函数:ShaderUtil.GetShaderGlobalKeywords用法 点击封面跳转下载页面 简介 Unity 性能优化Shader分析处理函数:Sha ...