Spring Cloud Alibaba【Sentinel控制台环境安装基于Linux、将应用接入Sentinel、流量控制概述、流控模式之直接模式、流控模式之关联模式 】(六)

 

目录

分布式流量防护_Sentinel控制台环境安装基于Linux

分布式流量防护_Sentinel控制台环境安装基于Docker 

 分布式流量防护_将应用接入Sentinel

 分布式流量防护_流量控制概述

分布式流量防护_流控模式之直接模式

分布式流量防护_流控模式之关联模式 

分布式流量防护_流控模式之链路模式


分布式流量防护_Sentinel控制台环境安装基于Linux

获取 Sentinel 控制台 

下载https://github.com/alibaba/Sentinel/releases

启动 Sentinel 控制台 

linux模式

java -Dserver.port=8878 \
-
Dcsp.sentinel.dashboard.server=192.168.66.100:8878 \
-Dproject.name=sentinel-dashboard \
-jar ./sentinel-dashboard.jar

后台运行: nohup java -server -Xms64m -Xmx256m - Dserver.port=8878 - Dcsp.sentinel.dashboard.server=192.168.66.100:8878- Dproject.name=sentinel-dashboard -jar sentineldashboard-1.8.3.jar >> /opt/sentinel.log 2>&1 &

windows模式 

java -jar ./sentinel-dashboard.jar \
--server.port=8858 \
--
csp.sentinel.dashboard.server=192.168.66.101:8858 \
--project.name=sentinel-dashboard

注意: 强烈建议使用JRE8启动Sentinel控制台,高版本JDK可能存在未 知BUG。

测试访问

访问http://192.168.66.101:8858 即可,登录用户名密码都是 sentinel。

 

分布式流量防护_Sentinel控制台环境安装基于Docker 

拉取镜像 

docker pull docker.io/bladex/sentinel-dashboard

创建启动容器

docker run --name sentinel --restart=always -d -p 8888:8858 docker.io/bladex/sentinel-dashboard

查看容器

docker ps

测试访问 

访问http://192.168.66.101:8858即可,登录用户名密码都是 sentinel。

 分布式流量防护_将应用接入Sentinel

创建工程cloud-sentinel-payment8001 

POM引入依赖 

   <dependencies>
        <!--       Nacos 依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloudstarter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--       sentinel依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloudstarter-alibaba-sentinel</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
         <!--借用监控开放端口-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

编写主启动类

@SpringBootApplication
@Slf4j
public class PaymentSentinelMain8001 {
    public static void main(String[] args) {
       SpringApplication.run(PaymentSentinelMain8001.class,args);
        log.info("************PaymentSentinelMain8001 启动成功 **********");
   }
}

编写YML配置文件

server:
 port: 8001
spring:
 application:
    #应用名字
   name: cloud-sentinel-payment
 cloud:
   nacos:
     discovery:
        # Nacos地址
       server-addr: 192.168.66.101:8848
   sentinel:
     transport:
        # Sentinel 控制台地址
       dashboard: 192.168.66.101:8858
        # sentinel api端⼝,默认8719
       port: 8719

编写测试controller

@RestController
public class FlowLimitController {
    @GetMapping("testA")
    public String testA(){
        return "------------testA";
   }
}

查看Sentinel控制层

 发送请求

发送http://192.168.66.101:8858

 分布式流量防护_流量控制概述

监控应用流量的 QPS 或并发线程数,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。

 

流量控制设计理念

流量控制有以下几个角度:

资源的调用关系:例如资源的调用链路,资源和资源之间的关系;

运行指标:例如 QPS、线程池、系统负载等;

控制的效果:例如直接限流、冷启动、排队等。

 

流控规则 

参数:

1、资源名

其实就是我们请求的资源路径

2、针对来源

这个是此流控规则对应那些微服务进行流控管理,一般填写调 用方的微服务名称,多个用","分割

3、阈值类型

一般有2中类型,QPS(每秒的最大请求数2)和线程数(并发 线程数)

4、单机阈值

单机状态下的最大限制值

5、是否集群

根据实际情况选择 

流控模式 

 

流控效果

 

参数:

1、快速失败

默认的流量控制方式,当QPS超过任意规则的阈值后,新的请求就会被立即拒绝,拒绝方式为抛出 FlowException 。

2、Warm Up

即预热/冷启动方式。当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。 通过"冷启动",让通过的流量缓慢增加,在一定时间内逐渐增加 到阈值上限,给冷系统一个预热的时间,避免冷系统被压。

3、排队等待

匀速排队方式会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法 。这种方式主要用于处理间隔性突发的流量。 

 实时效果反馈

1.Sentienl默认流控模式_____。

A 直接

B 关联

C 链路

D 以上都错误

2. Sentienl默认流控效果____。

A 快速失败

B 冷启动

C 排队等待

D 以上都是错误

分布式流量防护_流控模式之直接模式

当 QPS 超过某个阈值的时候,则采取措施进行流量控制。

注意: 若使用除了直接拒绝之外的流量控制效果,则调用关系限流策略(strategy)会被忽略。 

配置QPS流控规则 

注意: 表示1秒钟内查询1次就ok,若超过1次,就直接快速失败,报默 认错误。 

 

测试流量控制QPS 

发送请求http://localhost:8001/testA

快速发送请求 

分布式流量防护_流控模式之关联模式 

什么是关联 

当关联的资源达到阈值时,就限流自己,当与A关联的资源B达到阈值后,就限流自己。

配置关联规则 

预期效果 

由于对/testA的限流控制采用QPS 关联 ,所以直接访问不会被限流, 会发现一直刷新 /testB 不会出现限流,如图:

 

但是访问 /testA 设置来QPS 直接 的策略进行限流,则频繁访问/testB会 出现限流提示: 

 

实时效果反馈

1.下列描述Sentienl流控模式关联模式正确的是_____。

A 我的锅自己背

B 你的锅你自己背

C 你的锅我来背

D 以上都错误 

分布式流量防护_流控模式之链路模式

链路流控模式指的是,当从某个接口过来的资源达到限流条件时, 开启限流。它的功能有点类似于针对来源配置项,区别在于:针对来源是针对上级微服务,而链路流控是针对上级接口,也就是说它的粒度更细。 

配置示例:

例如有两条请求链路:

/test1 --> /common

/test2 --> /common 

如果只希望统计从/test2进入到/common的请求,则可以这样配置: 

实战案例 

需求:有查询订单和创建订单业务,两者都需要查询商品。针对从查询订单进入到查询商品的请求统计,并设置限流。

实现 

添加查询商品方法

在支付服务中,给PaymentService类添加一个queryGoods方法:

public void queryGoods(){
    System.err.println("查询商品");
}

查询订单时,查询商品

@GetMapping("/query")
public String queryOrder() {
    // 查询商品
    orderService.queryGoods();
    // 查询订单
    System.out.println("查询订单");
    return "查询订单成功";
}

新增订单

在支付服务的PaymentController中,修改/order/save端点,模拟新增订单:

@GetMapping("/save")
public String saveOrder() {
    // 查询商品
    orderService.queryGoods();
    // 查询订单
    System.err.println("新增订单");
    return "新增订单成功";
}

给查询商品添加资源标记

默认情况下,OrderService中的方法是不被Sentinel监控的,需要 我们自己通过注解来标记要监控的方法。 给OrderService的queryGoods方法添加@SentinelResource注解:

@SentinelResource("goods")
public void queryGoods(){  
    System.err.println("查询商品");
}

 簇点链路

链路模式中,是对不同来源的两个链路做监控。但是sentinel默认会给进入SpringMVC的所有请求设置同一个root资源,会导致链路模式失效。我们需要关闭这种对SpringMVC的资源聚合,修改 application.yml文件。

spring:
 application:
   name: payment-provider-sentinel
 cloud:
   nacos:
     discovery:
        # Nacos服务地址
       server-addr: 192.168.66.100:8848
   sentinel:
     transport:
        # Sentinel控制台地址
       dashboard: 192.168.66.100:8888
        # sentnel api端口号 默认 8719
       port: 8719
       # 关闭context整合  
     web-context-unify: false

 重启服务,访问query和save,可以查看到sentinel的簇点链路规则中,出现了新的资源。

 

添加流控规则

点击goods资源后面的流控按钮,在弹出的表单中填写下面信息

 实时效果反馈

1.下列描述Sentienl流控模式链路模式正确的是_____。

A 针对来源配置项

B 快速失败

C 你的锅我来背

D 以上都错误

猜你喜欢

转载自blog.csdn.net/m0_58719994/article/details/131859709