Spring Cloud实战 |分布式系统的流量控制、熔断降级组件Sentinel如何使用
作者:mmseoamin日期:2023-12-11

专栏集锦,大佬们可以收藏以备不时之需

Spring Cloud实战专栏:https://blog.csdn.net/superdangbo/category_9270827.html

Python 实战专栏:https://blog.csdn.net/superdangbo/category_9271194.html

Logback 详解专栏:https://blog.csdn.net/superdangbo/category_9271502.html

tensorflow专栏:https://blog.csdn.net/superdangbo/category_8691332.html

Redis专栏:https://blog.csdn.net/superdangbo/category_9950790.html

AI机器学习实战:

AI机器学习实战 | 使用 Python 和 scikit-learn 库进行情感分析

AI机器学习 | 基于librosa库和使用scikit-learn库中的分类器进行语音识别

Python实战:

Python实战 | 使用 Python 和 TensorFlow 构建卷积神经网络(CNN)进行人脸识别

Spring Cloud实战:

Spring Cloud 实战 | 解密Feign底层原理,包含实战源码

Spring Cloud 实战 | 解密负载均衡Ribbon底层原理,包含实战源码

1024程序员节特辑文章:

1024程序员狂欢节特辑 | ELK+ 协同过滤算法构建个性化推荐引擎,智能实现“千人千面”

1024程序员节特辑 | 解密Spring Cloud Hystrix熔断提高系统的可用性和容错能力

1024程序员节特辑 | ELK+ 用户画像构建个性化推荐引擎,智能实现“千人千面”

1024程序员节特辑 | OKR VS KPI谁更合适?

1024程序员节特辑 | Spring Boot实战 之 MongoDB分片或复制集操作

Spring实战系列文章:

Spring实战 | Spring AOP核心秘笈之葵花宝典

Spring实战 | Spring IOC不能说的秘密?

国庆中秋特辑系列文章:

国庆中秋特辑(八)Spring Boot项目如何使用JPA

国庆中秋特辑(七)Java软件工程师常见20道编程面试题

国庆中秋特辑(六)大学生常见30道宝藏编程面试题

国庆中秋特辑(五)MySQL如何性能调优?下篇

国庆中秋特辑(四)MySQL如何性能调优?上篇

国庆中秋特辑(三)使用生成对抗网络(GAN)生成具有节日氛围的画作,深度学习框架 TensorFlow 和 Keras 来实现

国庆中秋特辑(二)浪漫祝福方式 使用生成对抗网络(GAN)生成具有节日氛围的画作

国庆中秋特辑(一)浪漫祝福方式 用循环神经网络(RNN)或长短时记忆网络(LSTM)生成祝福诗词

目录

  • 1、Sentinel 发展历史
  • 2、Sentinel 具体参数
  • 3、实战Spring Cloud 项目中使用 Sentinel

    1、Sentinel 发展历史

    Sentinel 是一款面向分布式系统的流量控制、熔断降级组件,由阿里巴巴集团研发。其发展历史可以追溯到 2012 年,起初是阿里巴巴内部使用,后来逐渐开源并发展成为一个独立的项目。Sentinel 致力于提供高性能、可扩展、安全的流量控制解决方案,以满足现代分布式系统的需求。

    2012 年,Sentinel 诞生,主要功能为入口流量控制。

    2013-2017 年,Sentinel 在阿里巴巴集团内部迅速发展,成为基础技术模块,覆盖了所有的核心场景。Sentinel 也因此积累了大量的流量归整场景以及生产实践。

    2018 年,Sentinel 开源,并持续演进。

    2019 年,Sentinel 朝着多语言扩展的方向不断探索,推出 C++ 原生版本,同时针对 Service Mesh 场景也推出了 Envoy 集群流量控制支持,以解决 Service Mesh 架构下多语言限流的问题。

    2020 年,推出 Sentinel Go 版本,继续朝着云原生方向演进。

    2021 年,Sentinel 正在朝着 2.0 云原生高可用决策中心组件进行演进;同时推出了 Sentinel Rust 原生版本。同时我们也在 Rust 社区进行了 Envoy WASM extension 及 eBPF extension 等场景探索。

    2022 年,Sentinel 品牌升级为流量治理,领域涵盖流量路由/调度、流量染色、流控降级、过载保护/实例摘除等;同时社区将流量治理相关标准抽出到 OpenSergo 标准中,Sentinel 作为流量治理标准实现。

    Sentinel 的主要应用场景如下:

    1. 流量控制

      在分布式系统中,服务间的调用可能会产生大量的请求,导致系统过载。Sentinel 可以通过设置流量控制策略,对请求进行限制,确保系统能够在高并发场景下稳定运行。

    2. 熔断降级

      在分布式系统中,服务之间的依赖关系可能导致某一个服务的故障影响到整个系统。Sentinel 支持熔断机制,当某个服务出现故障时,可以自动切断请求,避免故障扩散。同时,Sentinel 还支持降级策略,对故障服务提供降级处理,如返回默认值、日志记录等。

    3. 资源隔离

      Sentinel 可以将不同资源的访问进行隔离,例如 HTTP 请求、数据库连接等。这样,当某个资源出现问题时,可以限制其对其他资源的影响,提高系统的稳定性。

    4. 系统监控

      Sentinel 提供了实时的监控界面,可以查看系统的流量、熔断、降级等状态。这有助于开发人员及时发现系统问题,并进行相应的优化。

    5. 应用扩展

      Sentinel 提供了丰富的扩展点,如自定义流量控制策略、降级策略等。这使得开发者可以根据业务需求,灵活地定制和扩展 Sentinel 的功能。

      在 Spring Cloud 项目中,Sentinel 可以与 Spring Cloud 组件无缝集成,如 Spring Cloud Gateway、Spring Cloud Alibaba Nacos Discovery、Spring Cloud Alibaba Sentinel等。这使得开发人员可以更方便地在 Spring Cloud 项目中使用 Sentinel,提升系统的稳定性、可靠性和可扩展性。

      总之,Sentinel 作为一款发展历史悠久的分布式系统组件,其丰富的功能和强大的性能得到了业界的认可。在 Spring Cloud 项目中使用 Sentinel,可以有效解决分布式系统面临的高并发、故障扩散等问题,提高系统的稳定性、可靠性和可扩展性。

    https://sentinelguard.io/zh-cn/docs/introduction.html

    Spring Cloud实战 |分布式系统的流量控制、熔断降级组件Sentinel如何使用,在这里插入图片描述,第1张

    2、Sentinel 具体参数

    在 Spring Cloud 项目中使用 Sentinel,主要需要配置以下几个参数:

    1. 流量控制策略

      Sentinel 提供了多种流量控制策略,如流量限制、突发流量限制、请求会话数限制等。在 application.yml 配置文件中可以设置默认的流量控制策略以及具体参数。

      案例:

    sentinel:
      flow:
        defaultFlowId: 1
        control:
          default:
            limitType: flow
            flowConfig:
              maxFlow: 1000
              burstCapacity: 500
    

    在这个案例中,我们设置了默认的流量控制策略为 flow,最大流量为 1000,突发容量为 500。

    2. 降级策略

    Sentinel 支持基于 HTTP 状态码、异常类型和自定义规则的降级策略。在 application.yml 配置文件中可以设置降级策略以及具体参数。

    案例:

    sentinel:
      degrade:
        enabled: true
        selectors: default
        rules:
          - type: http-status
            status: 500
          - type: exception
            exception: java.lang.ArithmeticException
    

    在这个案例中,我们设置了当 HTTP 状态码为 500 时进行降级,以及当发生 ArithmeticException 异常时进行降级。

    Spring Cloud实战 |分布式系统的流量控制、熔断降级组件Sentinel如何使用,在这里插入图片描述,第2张

    1. 资源包装

      Sentinel 提供了资源包装器,可以拦截请求并测量资源使用情况。在 application.yml 配置文件中可以设置资源包装器的参数。

      案例:

    sentinel:
      resource:
        watermark:
          enabled: true
          interval: 60000
          statInterval: 1000
    

    在这个案例中,我们设置了水位标记的开启状态,以及统计间隔为 10 秒,水位标记间隔为 60 秒。

    4. 系统参数

    Sentinel 提供了许多系统参数,如守护进程模式、日志级别等。在 application.yml 配置文件中可以设置这些系统参数。

    案例:

    sentinel:
      defender:
        mode: standalone
      log:
        level: debug
    

    在这个案例中,我们设置了守护进程模式为独立模式,以及日志级别为 debug。

    5. 应用参数

    Sentinel 支持为每个应用设置独立的参数,如流量控制策略、降级策略等。在 application.yml 配置文件中可以设置应用参数。

    案例:

    application:
      name: my-application
      sentinel:
        flow:
          control:
            default:
              limitType: flow
              flowConfig:
                maxFlow: 1000
                burstCapacity: 500
      degrade:
        rules:
          - type: exception
            exception: java.lang.ArithmeticException
    

    在这个案例中,我们为名为 my-application 的应用设置了独立的流量控制策略和降级规则。

    以上就是 Spring Cloud 项目中如何使用 Sentinel 并进行配置的详细介绍。实际应用中,您可以根据需求进行更详细的配置,以满足不同的流量控制、降级和监控需求。

    3、实战Spring Cloud 项目中使用 Sentinel

    在 Spring Cloud 项目中使用 Sentinel,主要是通过以下几个步骤来完成:引入依赖、初始化 Sentinel、配置 Sentinel、使用 Sentinel 进行流量控制、熔断和降级、监控 Sentinel。下面将详细介绍并在每个步骤给出具体案例。

    1. 引入依赖

      在项目的 pom.xml 文件中添加 Sentinel 的依赖:

    
        com.alibaba.csp
        sentinel-core
        1.8.2
    
    
    1. 初始化 Sentinel

      在项目的主类上添加 @EnableSentinel 注解,以启动 Sentinel 守护进程:

    @SpringBootApplication
    @EnableSentinel
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    
    1. 配置 Sentinel

      在 application.properties 或 application.yml 文件中配置 Sentinel:

    sentinel:
      degrade:
        enabled: true
        selectors: default
      flow:
        defaultFlowId: 1
        control:
          default:
            limitType: flow
            flowConfig:
              maxFlow: 1000
              burstCapacity: 500
    

    这里配置了降级功能,并设置了默认的流量控制策略。

    4. 使用 Sentinel 进行流量控制

    在需要控制流量的方法上添加 @Block 注解:

    案例:

    @RestController
    public class MyController {
        @GetMapping("/controlFlow")
        public String controlFlow() {
            // 业务逻辑
            return "Hello, Sentinel!";
        }
    }
    
    1. 使用 Sentinel 进行熔断

      在需要进行熔断的方法上添加 @Breakpoint 注解:

      案例:

    @RestController
    public class MyController {
        @GetMapping("/breakpoint")
        public String breakpoint() {
            // 业务逻辑
            return "Hello, Sentinel!";
        }
    }
    
    1. 使用 Sentinel 进行降级

      在需要进行降级的方法上添加 @Degrade 注解:

      案例:

    @RestController
    public class MyController {
        @Degrade
        @GetMapping("/degrade")
        public String degrade() {
            // 业务逻辑
            return "Hello, Sentinel!";
        }
    }
    
    1. 监控 Sentinel

      启动 Sentinel 监控页面,查看实时的流量控制、熔断和降级状态:

    http://localhost:8080/console
    

    以上就是如何在 Spring Cloud 项目中使用 Sentinel 的详细介绍。通过使用 Sentinel,我们可以更好地管理服务流量,保障系统的稳定性和可靠性。在实际项目中,还可以根据需求进行更复杂的配置,以满足不同的流量控制需求。