Sentinel部署、微服务使用sentinel整合springcloud alibaba、sentinel控制台详解

本文介绍了Sentinel的控制台部署、如何与SpringCloud Alibaba整合,以及Sentinel控制台的各项功能,如实时监控、流控规则、熔断降级规则等。在实时监控中,可以看到QPS和拒绝QPS;在流控规则中,详细解释了QPS流控和并发线程数控制;此外,还讨论了熔断降级规则和热点规则的配置。Sentinel提供了系统规则以应对系统负载和CPU使用率等情况,保障服务稳定性。
摘要由CSDN通过智能技术生成

控制台部署

首先需要下载控制台jar包并在本地启动

官方文档 , 下载地址,注意版本需要和maven引入的版本一致

第二步,启动

java -jar sentinel-dashboard.jar

# 这些参数 -D 是固定写法,后面再跟一些配置参数
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

其中 -Dserver.port=8080 用于指定 Sentinel 控制台端口为 8080,默认就是8080,我们可以修改。

从 Sentinel 1.6.0 起,Sentinel 控制台引入基本的登录功能,默认用户名和密码都是 sentinel。可以参考 鉴权模块文档 配置用户名和密码。

注:若您的应用为 Spring Boot 或 Spring Cloud 应用,您可以通过 Spring 配置文件来指定配置,详情请参考 Spring Cloud Alibaba Sentinel 文档

然后在浏览器中进行访问
在这里插入图片描述
用户名密码默认都是sentinel,登录进去是没有东西的,之后sentinel客户端结合使用之后就会有内容了
在这里插入图片描述

客户端接入控制台

  1. 引入坐标

    <dependency>
        <groupId>com.alibaba.csp</groupId>
        <artifactId>sentinel-transport-simple-http</artifactId>
        <version>x.y.z</version>
    </dependency>
    
  2. 配置启动参数

    启动时加入 JVM 参数 -Dcsp.sentinel.dashboard.server=consoleIp:port 指定控制台地址和端口。若启动多个应用,则需要通过 -Dcsp.sentinel.api.port=xxxx 指定客户端监控 API 的端口(默认是 8719)。

    除了修改 JVM 参数,也可以通过配置文件取得同样的效果。更详细的信息可以参考 启动配置项

    优先级顺序:JVM -D 参数的优先级最高。若 properties 和 JVM 参数中有相同项的配置,以 JVM 参数配置的为准。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QAxodfzw-1658027726248)(E:\Java笔记\image\springcloud_alibaba\image-20220622223542947.png)]

服务启动成功之后,还需要请求一下接口,sentinel控制台才能有显示。也就是接下来的触发访问量

  1. 触发客户端初始化

确保客户端有访问量,Sentinel 会在客户端首次调用的时候进行初始化,开始向控制台发送心跳包。

注意:您还需要根据您的应用类型和接入方式引入对应的 适配依赖,否则即使有访问量也不能被 Sentinel 统计。

在这里插入图片描述
我们现在在代码中写了一些资源的服务容错规则,所以现在这些菜单中就会有我们配置的内容,到时候和SpringCloud Alibaba整合之后,刚进来肯定是没有的,我们需要为每一个资源设置对应的规则,还有就是我们结合SpringCloud Alibaba之后,我们在控制台配置了规则之后,各个微服务重启之后,我们配置的东西也就消失了



整合SpringCloud Alibaba

第一步,引入场景启动器,这里就不需要引入上面那么多的依赖了

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

第二步,配置文件中设置控制台地址

server:
  port: 8092
spring:
  application:
    name: order-sentinel
  cloud:
    sentinel:
      transport:
        # 设置sentinel控制台的地址
        dashboard: 127.0.0.1:8080

第三步,创建rest接口,启动服务,调用测试
在这里插入图片描述



控制台详解

实时监控

监控接口通过的QPS 和 拒绝的QPS。

显示了每秒钟通过的QPS 、拒绝的QPS、响应时间
在这里插入图片描述
每一个接口都有一个实时监控界面,我们可以通过右上角进行搜索关键字
在这里插入图片描述



簇点链路

用来显示微服务所有可以进行设置容错规则的资源,我们也可以在此界面为各个资源设置对应的容错规则,然后再相应的菜单下就能看到了

服务中的接口如果没有使用@SentinelResource注解来指定资源名的话默认就会根据@RequestMapper注解指定的访问uri路径来命名
在这里插入图片描述



流控规则

流量控制(flow control) ,原理是监控应用流量的QPS或并发线程数等指标,当达到指定的阀值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保证应用的高可用。

在这里插入图片描述
普遍的场景:

  • 在服务提供方控制脉冲流量
  • 针对不同调用来源进行流控
  • web接口流控

添加流控步骤:

簇点链路菜单下,选择要进行流控的资源,然后点击右侧的流控按钮

在这里插入图片描述



QPS流控

QPS(Query Per Second):每秒请求树,就是服务器再一秒钟内处理了多少个请求

然后选择阀值类型并输入阀值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TZtFb2oR-1658028041946)(E:\Java笔记\image\springcloud_alibaba\image-20220626111557135.png)]

接下来进行测试,1秒钟之内发送请求超过设定的阀值后就会被拒绝,这里是sentinel被流控之后的响应信息,如果我们想要自定义流控拒绝之后的响应信息就可以使用@SentinelResource注解

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-njt2uqls-1658028041947)(E:\Java笔记\image\springcloud_alibaba\image-20220626111741927.png)]

@RestController
@RequestMapping("/order")
public class OrderController {
   

    @RequestMapping("/add")
    public String add(){
   
        System.out.println("下单成功");
        return "下单成功!";
    }

    // value 指定资源名
    @RequestMapping("/flow")
    @SentinelResource(value = "flow", blockHandler = "flowBlockHandler")
    public String flow(){
   
        System.out.println("正常访问");
        return "正常访问!";
    }

    /**
     * 返回值 请求参数要和源方法一致,注意添加的是BlockException 不是BlockedException
     */
    public String flowBlockHandler(BlockException e){
   
        System.out.println("flow 流控了");
        return "flow 流控了!";
    }

}

然后重启服务,就会发现我们之前设置的规则都没了,没有暂时还没有持久化,我们现在需要重新为flow接口添加流控规则

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GmynQ041-1658028041951)(E:\Java笔记\image\springcloud_alibaba\image-20220626113006569.png)]

添加完流控规则后进行访问测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9Q3s4itn-1658028041954)(E:\Java笔记\image\springcloud_alibaba\image-20220626114052577.png)]



并发线程数

并发线程数控制用于保护业务线程池不被慢调用耗尽。

比如调用下游服务由于某种原因迟迟得不到响应,所有的请求都会堆积在调用方这边,也就会占用更多的线程,最终撑爆线程池,拖垮服务。

sentinel并发控制不负责创建和管理线程池,而是简单统计当前请求上下文的线程数目(正在执行的调用数目),如果超出阀值,新的请求就会立即拒绝,效果类似于信号量隔离。并发数控通常在调用端进行配置。

我们一般会使用压测,测试接口的瓶颈,然后再设置线程数的阀值,这里进行测试就暂时想阀值设置为很小。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l43o6EVo-1658028155595)(E:\Java笔记\image\springcloud_alibaba\image-20220626124637349.png)]

接下来进行测试,我们需要修改一下这个rest接口,不能让它请求就立刻响应,加一个睡眠几秒。

@RequestMapping("/flow")
@SentinelResource
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值