Sentinel简单使用

Sentinel使用

一、简介

官网:https://github.com/alibaba/sentinel

中文文档:https://github.com/alibaba/Sentinel/wiki/介绍

中文文档也是从GitHub上点击链接跳转过来的,GitHub哪里有一个“中文文档”这样的字眼,直接点击就可以跳转到这里了。

在这里插入图片描述

1.1、下载和安装

安装需要注意:Sentineljava写的,所以需要JDK1.8以上的的版本。默认端口号为 8080,所以地址需要注意 8080端口号不能被占用。

  • 下载

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 安装

下载下来直接是一个jar包,启动就和普通的jar启动方式样,不用过多介绍。

nohup java -jar xxxx.jar &

我在Windows上测试,所以我就直接使用 java -jar XXX.jar启动了。

在这里插入图片描述

在这里插入图片描述

1.2、Sentinel 的主要特性

在这里插入图片描述

1.3、Sentinel生态

在这里插入图片描述

1.4、解决那些问题

  • 服务雪崩
  • 服务降级
  • 服务熔断
  • 服务限流

二、创建后端工程

创建 spring-cloud-alibaba-sentinel工程。

2.1、引入依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

如果直接使用 sentinel,那么这个包就可以了。但是在sentinel里面的配置我们需要持久化,否则我们重新启动自己的jar,sentinel里面的配置就没有了。所以还需要引入一下这个依赖,将sentinel里面的配置同步到nacos中,nacos是可以将数据持久化到mysql数据库的,所以就不用担心数据丢失的问题。

<!-- 将sentinel的数据同步到nacos中  -->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
强调

如果还需要使用 openfeign怎么办,还需要引入 openfeign的依赖吗?

<!--   openfeign     -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

spring-cloud-starter-alibaba-sentinel这个依赖中已经包含了常用的 spring-boot-starter-webspring-cloud-starter-openfeignspring-cloud-starter-netflix-ribbon。但是需要注意的是,里面的 <optoinal>true</optoinal>设置成了true,所以下面是不能被继承的。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

没有直接引入版本号,因为父工程引入springcloudalibaba的包管理器了。

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>${spring-cloud-alibaba-dependencies.version}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

2.2、将程序注入sentinel中

直接在配置文件中配置一下就可以了,其他什么都不需要添加,包括启动程序都不需要添加任何东西。

server:
  port: 8401

spring:
  application:
    name: sentinel-service # 当前工程名称
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8080 # sentinel地址
        port: 8719  # Sentinel api端口 ,默认8719,假如被占用了会自动从8719开始依次+1扫描。直至找到未被占用的端口

management:
  endpoints:
    web:
      exposure:
        include: '*' # springboot 监控 Actuator 的端点暴露,* 为暴露所有端点。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.3、测试

首先启动Sentinel,第一次启动sentinel,在浏览器上访问 IP:8080,你会发现什么都没有,因为我们程序还没有启动。

在这里插入图片描述

在启动我们程序,在刷新sentinel控制台,依然没有任何东西,因为我们要访问接口了才有数据。启动程序,访问一次接口。

在这里插入图片描述

这样就注入成功了。

在这里插入图片描述

在这里插入图片描述

三、流控规则

3.1、流控模式

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

直接

/testA添加一个链路。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

关联

如果 /testA 关联 /testB,这里只能通过一个QPS通过。那么如果当前 /testB每秒有 1一个以上的的请求在持续访问,那么 /testA就不能访问了。

  • 创建关联控流

在这里插入图片描述

  • postman做连续发送请求

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 测试

现在的配置意思是,/testB每秒超过 1个QPS,那么 /testA就不能访问。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

链路

3.2、流控效果

预热

预热时间计算:单机阈值 / 3 = 刚开始阈值。

在这里插入图片描述

  • 应用场景

秒杀系统,刚开始的时候,可能有很多数据在缓存哪里可能没有,所以刚开始的时候放少量的QPS过来,过几秒后没问题了,缓存中说句丰富了。

排队等待

匀速通过,不管来多少个,每次只能请求几个。

在这里插入图片描述

四、降级规则

4.1、RT平均时长

在这里插入图片描述

上图有误,纠正

每秒中请求QPS大于 5 个,但是在200毫秒内没有响应,那么就降级处理。1秒钟后恢复。

4.2、异常比例(单位秒级)

在这里插入图片描述

4.3、异常数

在这里插入图片描述

五、热点规则

5.1、普通配置

热点规则,就是控制某个接口上的某个参数每秒中可以正常访问多少个QPS。需要使用到 com.alibaba.csp.sentinel.annotation.SentinelResource注解。

在这里插入图片描述

在这里插入图片描述

配置好规则后,我执行以下请求

http://localhost:8401/ok?name=sadfa

每秒中只能请求一次。

http://localhost:8401/ok

随便请求,不影响。

5.2、参数例外项

在这里插入图片描述

异常统一处理

目前我测试没有效果

在这里插入图片描述

源码地址:https://github.com/gl-stars/small-study-case/tree/master/nm-demo/SpringSecurityOAuth2-demo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值