Spring Cloud Sentinel配置

Spring Cloud Sentinel

文章目录

      • [Spring Cloud Sentinel](#Spring Cloud Sentinel)
        • [1. Sentinel Dashboard 启动](#1. Sentinel Dashboard 启动)
        • [2. Spring Cloud 客户端配置](#2. Spring Cloud 客户端配置)
        • [3. Sentinel Dashboard 限流配置](#3. Sentinel Dashboard 限流配置)
        • [4. Sentinel Dashboard 熔断配置](#4. Sentinel Dashboard 熔断配置)
1. Sentinel Dashboard 启动
  1. 下载sentinel dashboard jar
  2. sentinel dashboard启动在8889端口上
    java -jar -Dserver.port=8889 sentinel-dashboard-1.8.8.jar
  3. 打开dashboard页面
    http://localhost:8889
2. Spring Cloud 客户端配置
  1. 引入sentinel客户端
xml 复制代码
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
  1. application.yaml文件添加sentinel客户端配置
yaml 复制代码
spring:
  application:
    name: stock-service
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8889 # dashboard服务所在的地址跟ip
        client-ip: 192.168.0.5 # 这里是程序所在的客户端ip,使用ipconfig命令查看,不配置无法再dashboard上显示当前服务
  1. 打开dashboard页面可看到微服务,可能会稍微有点延迟才能看到,此时簇点链路不会有服务的接口信息,需要我们调用接口,才会在上面显示
  2. 调用order-service的/order/add接口后可以看到比上图增加了一个/order/add接口.
3. Sentinel Dashboard 限流配置

限流方式有三种,直连,关联跟链路

直连

限制并发过高 问题,防止当前程序崩溃,限制当前接口的qps,设置为5,可以在流控规则中看到

发起压测,并发10个,只能通过5个,不限流的话10个请求时都可以通过的

关联

关联用于两个接口间的资源竞争

这里有两个接口/order/{productId}跟/order/add接口,一个接口是订单查询,一个接口是订单新增后,因为两者都要去操作数据库的订单表,所以可能存在数据库资源抢占 问题,一般认为订单的新增接口优先级比订单查询接口高,所以当/order/add的QPS达到某个阈值时,对优先级低的/order/{productId}接口进行限流,这里设置当/order/add的QPS达到5时(只是一个监控,不会限制add接口的QPS),/order/{productId}接口进行限流

同时发起/order/add接口跟/order/{productId}接口的压测,add接口都成功,QPS是8,不会被上图设置的QPS=5限制住,/order/{productId}则是因为add接口的QPS达到8,直接限制了接口,拒绝请求

/order/add并发:

/order/{productId}并发:

链路

链路主要是资源分配,对同一个资源有多个入口的情况下,限制该资源的访问

  1. Service类通过@SentinelResource定义一个方法为资源,/order/add接口跟/order/{productId}接口都会调用到这个服务,add是新增后查询,/order/{productId}是直接查询
java 复制代码
    @Override
    @SentinelResource(value = "order")
    public TProduct getProduct(String productId) {
        return productMapper.selectById(productId);
    }
  1. 客户端的spring.cloud.sentinel.web-context-unify的默认值是true ,资源是聚合的,这里的入口资源 是sentinel_web_servlet_context,顶层的入口,统一对资源进行限流,两个接口共享资源的QPS,同一时间两个接口并发的总QPS为5

    同时发起/order/add接口跟/order/{productId}并发请求10s,可以看到 两个接口的成功数(5+46)/并发时间10s = 5QPS

    /order/add并发:

    /order/{productId}并发:

  2. spring.cloud.sentinel.web-context-unify设置为false,则入口资源可以分别单独设置为/order/add接口跟/order/{productId},将对不同接口进行限流

yaml 复制代码
spring:
  application:
    name: order-service
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8889
        client-ip: 192.168.0.5
      web-context-unify: false

QPS大概是5

4. Sentinel Dashboard 熔断配置

待续...

相关推荐
豪宇刘1 小时前
Shiro回话管理和加密
java·后端·spring
screamn3 小时前
Sentinel详解
java·sentinel
Toky Zhu5 小时前
修改 Docker 镜像默认存储位置的方法
spring cloud·docker·eureka
wrx繁星点点5 小时前
桥接模式:解耦抽象与实现的利器
android·java·开发语言·jvm·spring cloud·intellij-idea·桥接模式
wrx繁星点点7 小时前
原型模式:高效的对象克隆解决方案
数据结构·spring·spring cloud·java-ee·maven·intellij-idea·原型模式
sun金默7 小时前
java后端把数据转换为树,map递归生成json树,返回给前端(后台转换)
spring·intellij-idea
菜菜-plus9 小时前
微服务技术,SpringCloudAlibaba,Redis,RocketMQ,Docker,分库分表
java·spring boot·redis·spring cloud·docker·微服务·java-rocketmq
我的运维人生11 小时前
Spring Cloud微服务:构建现代应用的新基石
spring·spring cloud·微服务·运维开发·技术共享
A_aspectJ17 小时前
‌Spring MVC的主要组件有哪些?
java·spring·mvc
Slow菜鸟18 小时前
Spring 设计模式之装饰器模式
spring·设计模式·装饰器模式