Skip to content

SpringCloud_组件基本使用_Sentinel

使用类似于 Sleuth,在对应服务添加依赖和注解配置后,Sentinel 能够对服务做一个服务流量监听,进行熔断降级、系统负载等操作。

Sentinel 控制台的下载

下载地址: https://github.com/alibaba/Sentinel/releases/tag/1.8.3

注意的一些内容

  • 注解使用(服务程序中使用)
  • 流控规则
  • 熔断规则
  • 系统规则

基本学习和使用: https://blog.csdn.net/Adda_Chen/article/details/126694546

Sentinel 可以简单的分为 Sentinel 核心库和 Dashboard控制台。核心库不依赖 Dashboard,但是结合 Dashboard 可以取得最好的效果。

我们说的资源,可以是任何东西,服务,服务里的方法,甚至是一段代码。使用 Sentinel 来进行资源保护,主要分为几个步骤:

  • 定义资源
  • 定义规则
  • 检验规则是否生效

等实际使用再看一下具体使用示例


Sentinel 是阿里巴巴开源的一款面向分布式服务架构的高可用性保障组件,主要用于流量控制(限流)、熔断降级、系统负载保护等,以保障微服务或分布式系统的稳定性和可靠性。Sentinel 以流量为切入点,从多个维度监控、记录和处理服务调用情况,支持丰富的流量控制策略,如QPS限流、线程数限流、熔断降级等。

核心特性

  • 丰富的流量控制策略:支持基于QPS的限流、基于响应时间的熔断降级、系统负载保护等策略。
  • 实时监控:提供实时的监控数据展示,帮助快速定位流量控制效果和系统状态。
  • 规则动态推送:支持动态规则配置,无需重启应用即可实时生效。
  • 广泛的框架整合:提供了对Spring Cloud、Dubbo、gRPC等多种微服务框架的适配,方便在各种微服务架构下使用。

使用示例:

以在Spring Cloud项目中使用Sentinel为例,首先需要添加Sentinel的Starter依赖到项目的pom.xml文件中:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    <version>版本号</version>
</dependency>

定义规则

Sentinel 支持通过硬编码、文件配置、控制台配置等多种方式定义规则。以下是一个简单的流量控制规则示例,通过硬编码的方式定义:

import com.alibaba.csp.sentinel.Entry;
import com.alibaba.csp.sentinel.SphU;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;

import java.util.ArrayList;
import java.util.List;

public class SentinelDemo {

    public static void main(String[] args) {
        // 配置规则
        initFlowRules();
        
        while (true) {
            try (Entry entry = SphU.entry("HelloWorld")) {
                // 被保护的逻辑
                System.out.println("hello world");
            } catch (BlockException ex) {
                // 处理被流量控制后的逻辑
                System.out.println("blocked!");
            }
        }
    }

    private static void initFlowRules() {
        List<FlowRule> rules = new ArrayList<>();
        FlowRule rule = new FlowRule();
        rule.setResource("HelloWorld");
        rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
        // Set limit QPS to 20.
        rule.setCount(20);
        rules.add(rule);
        FlowRuleManager.loadRules(rules);
    }
}

在这个例子中,定义了一个简单的流量控制规则,对名为HelloWorld的资源进行限流,限制其QPS(每秒查询率)不超过20。

启动和测试

  • 将上述代码添加到Spring Boot项目中。
  • 启动Spring Boot应用。
  • 进行压力测试,可以使用JMeter或其他工具模拟高并发请求。
  • 观察控制台输出,验证限流效果。

使用Sentinel控制台

Sentinel还提供了一个控制台(Sentinel Dashboard),通过它可以更加方便地管理规则和监控应用状态。使用控制台,可以动态修改限流规则、查看实时监控数据等。

  • 下载并启动Sentinel控制台。
  • 在应用中配置控制台地址。
  • 访问控制台,添加或修改规则,查看监控数据。

参考