流量防卫兵sentinel

1. 基本概念

1.1. 官方文档

1.2. sentinel是什么

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。

1.3. sentinel的特性(了解)

1: 丰富的应用场景
    Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承    受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
    
2: 完备的实时监控
    Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规    模的集群的汇总运行情况 
    
3: 广泛的开源生态
    Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只    需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
    
4: 完善的 SPI 扩展点
    Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管    理、适配动态数据源等。

1.4. sentinel的基本组成

核心库(Java 客户端):不依赖任何框架/库,能够运行于 Java 7 及以上的版本的运行时环境
                    可以结合springcloud一起使用 
                    
控制台(Dashboard):控制台主要负责管理推送规则、监控、集群限流分配管理等

2. 控制台安装

2.1. 控制台下载

2.2. 控制台运行

2.3. 访问登录

 

3. 案例学习流程

3.1. 环境搭建

3.1.1. 新建项目

 

3.1.2. 添加依赖

     <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
    </dependencies>

3.1.3. 编写主配置类

3.1.4. 编写配置文件

3.1.5. 编写controller

3.1.6. 启动测试

 

3.1.7. 控制台查看

3.2. 控制台和代码对应关系

 

3.3. 控制台限流使用

3.3.1. QPS直接快速失败

  • controller添加方法

  • 访问测试

  • 流控规则

 

  • 测试

  • 3.3.2. 线程数直接失败

  • controller添加

 

 

  • 运行测试

 

 

 

  • 流控规则

  • 测试

3.3.3. 关联失败

  • controller添加

 

  • 启动访问

 

 

  • 限流规则

  • 测试访问

 

 

3.3.4. 链路失败

 

  • 添加service

​​​​​​​

  • controller添加

​​​​​​​

  • 启动测试

  • 控制台说明

​​​​​​​

  • 流控规则

​​​​​​​

  • 测试失败

​​​​​​​3.3.5. 链路失败解决方案

  • 解决方案

    • 修改版本(如果使用alibaba 2.1.0)

  • 排除低版本(如果使用alibaba 2.1.0)

  • 加入高版本(如果使用alibaba 2.1.0)

<dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-web-servlet</artifactId>
            <version>1.7.2</version>
</dependency>
  • 添加配置
 @Bean
    public FilterRegistrationBean sentinelFilterRegistration() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new CommonFilter());
        registration.addUrlPatterns("/*");
        // 入口资源关闭聚合
        registration.addInitParameter(CommonFilter.WEB_CONTEXT_UNIFY, "false");
        registration.setName("sentinelFilter");
        registration.setOrder(1);
        return registration;
    }
  • ​​​​​​​取消默认过滤器

  • 启动测试

  • 测试限流

​​​​​​​

3.3.6. 冷启动

  • controller添加

  • 启动测试

  • 流控规则

  • 测试

  • 3.3.7. 排队等待

  • controller添加

  • 启动测试

  • 流控规则

  • 测试

3.4. 控制台降级使用

3.4.1. 设置和代码对照关系

3.4.2. 平均响应时间

  • controller添加

  • 启动访问

  • 降级规则

  • 测试

​​​​​​​3.4.3. 异常比例降级

  • controller

 

  • 启动访问

 

 

  • 降级规则

 

 

  • 测试

3.4.4. 异常数量降级

  • controller添加

 

  • 启动测试

 

  • 降级规则

 

 

  • 测试

 

 

3.5. 控制台热点限流

热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的数据,并对其访问进行限制。

3.5.1. 热点限流准备工作

  • controller编写

  • 启动访问

​​​​​​​

3.5.2. 第一种热点限流

  • 限流规则

 

  • 测试

 

3.5.3. 第二种热点限流

  • 限流规则

     

  • 测试

 

3.6. 限流降级后处理

3.6.1. URL限流处理

3.6.1.1. 问题搭建

  • controller添加

 

  • 运行测试

 

 

  • 添加规则

 

 

  • 测试

3.6.1.2. 解决方式一

  • 编写代码测试 

​​​​​​​

  • 测试 

​​​​​​​

3.6.1.3. 解决方式二

  • 添加配置

  • 测试

 

3.6.1.4. 特殊的URL

  • controller添加

 

  • 控制台查看

 

  • URL清洗的方式

 

  • 控制台

3.6.2. Resource限流处理

3.6.2.1. 问题搭建

  • controller添加

 

  • 流控规则

 

  • 测试

​​​​​​​

3.6.2.2. 解决方式一

3.6.2.3. 出异常的情况

3.6.2.4. 异常解决

3.6.2.5. 测试

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值