Alibaba限流组件——Sentinel核心概念与流量控制

本文深入介绍了阿里巴巴的Sentinel组件,包括其核心概念、流量控制案例和规则持久化。Sentinel作为服务稳定性保障工具,提供流量控制、熔断降级等功能。通过Sentinel DashBoard实现资源的规则设置,演示了使用Sentinel API限制接口QPS以及通过注解声明资源。此外,文章还探讨了规则持久化,包括拉模式和推模式,确保规则在服务重启后依然有效。
摘要由CSDN通过智能技术生成

目录

 

1 Sentinel介绍

1.1 Sentinel是什么

1.2 组成

1.3 关键概念

2 Sentinel流量控制案例

2.1 引入依赖

2.2 使用Sentinel提供的API实现流量控制

2.2.1 写一个有返回值的接口

2.2.2 声明资源与定义规则

2.2.3 效果

2.3 使用Sentinel DashBoard实现流量控制

2.3.1 下载Sentinel DashBoard

2.3.2 将自己的项目与Sentinel DashBoard关联

2.3.3 运行Sentinel DashBoard

2.3.4 访问Sentinel DashBoard

2.3.5 在项目中配置开启注解

2.3.6 使用注解声明资源

2.3.7 在Sentinel DashBoard中定义规则

3 Sentinel流量控制规则

4 规则持久化

4.1 规则拉取(pull)模式

4.1.1 添加依赖

4.1.2 实现接口

4.1.3 指定持久化规则配置路径

4.1.4 查看持久化文件

4.2 规则推送(push)模式

4.2.1 添加依赖

4.2.2 实现接口

4.2.3 指定持久化规则配置路径


1 Sentinel介绍

1.1 Sentinel是什么

当前互联网环境中,应用服务器需要处理的请求与数据量快速增长,在高并发与大数据量的场景下确保服务的稳定变得尤为重要。因此,需要从多个维度保护服务的稳定性。

Alibaba的Sentinel就是这样的一个开源组件。Sentinel翻译过来是哨兵,以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。Sentinel作为Alibaba开源的技术,承接了Alibaba近10年双十一大促流量的核心场景,比如将突发流量控制在系统可以承受的范围、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。

从使用的角度来说,Sentinel提供了可视化界面设置相关的控制规则。同时,也提供了简单易用、完善的SPI扩展接口,用户可以通过实现扩展接口快速地定制逻辑,比如定制规则管理、适配动态数据源等。

Sentinel还提供实时监控的功能,可以从可视化界面中获取到秒级内的实时数据。同时,它也可以非常方便地与我们常用的框架进行整合,如:Spring Cloud、Dubbo、gRPC、Service Mesh等。

1.2 组成

在使用上,Sentinel由核心库与控制台这两大部分组成。

核心库是就在我们自己的项目中引入的Sentinel依赖,Sentinel核心库可以运行于Java7及以上的版本,并且不依赖其他框架或者库,对Spring Cloud与Dubbo也有不错的支持。

控制台,或者说Dash Board,是一个Spring Boot的项目,该项目已经打成jar包放在了Sentinel的Github上,下载后可以直接运行,提供了包括查看机器列表、监控、规则管理与推送、鉴权等功能。

1.3 关键概念

使用Sentinel必须清楚的两个关键概念是资源规则

通过Sentinel API定义的代码,就是资源,能够被Sentinel保护起来。它可以是Java应用程序中的任何内容,例如:服务,服务中的方法,甚至可以是一段代码。同时,通过注解声明资源是比较常见的用法。

规则是保护服务稳定的准则,是围绕资源的实时状态设定的规则如:服务中某一个具体的接口每秒可以访问多少次、何时触发服务熔断等。Sentinel的所有规则都可以在内存中动态地查询及修改,所有规则可以动态实时调整。同时Sentinel也提供相关API,让用户制定自己所需的规则。Sentinel支持包括流量控制规则、熔断降级规则、系统保护规则、来源访问控制规则、热点参数规则。本文主要描述的是流量控制相关的内容,熔断相关内容后面再写。

 

2 Sentinel流量控制案例

使用Sentinel有两种方式,一种是在代码中使用Sentinel提供的API,另一个种是在Sentinel提供的控制台中完成对资源的规则设置。接下来就在一个Spirng Boot测试项目中对两种方式进的使用进行详细的记录。

2.1 引入依赖

无论是使用在代码中调用Sentinel提供的API进行编码或者是使用Sentinel提供的Dash Board控制台,都需要在项目引入Sentinel的依赖,下面这些依赖包含了使用Sentinel流量控制的所有功能,包括有核心库、注解、指定来源访问控制、热点参数访问控制等。

        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-core</artifactId>
            <version>1.7.2</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-transport-simple-http</artifactId>
            <version>1.7.2</version>
        </dependency>

        <!-- 使用Sentinel注解相关依赖 -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-annotation-aspectj</artifactId>
            <version>1.7.2</version>
        </dependency>

        <!-- Sentinel指定来源限流相关依赖 -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-web-servlet</artifactId>
            <version>1.7.2</version>
        </dependency>

        <!-- 热点参数限流相关依赖 -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-parameter-flow-control</artifactId>
            <version>1.7.2</version>
        </dependency>

2.2 使用Sentinel提供的API实现流量控制

2.2.1 写一个有返回值的接口

这里写一个接口,直接返回“Hello Sentinel”字符串。

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/useApi")
public class UseApiController {
    @GetMapping(value = "/hello")
    public String hello() {
        return "Hello Sentinel";
    }
}

2.2.2 声明资源与定义规则

前面记录过Sentinel两个核心概念,资源与规则。在这里,资源就是将hello这一个方法声明为Sentinel的资源,且资源的名称也同样定义为hello。

定义规则就是给hello这一资源定义流控规则。本例中,设定的阈值类型为QPS,阈值为2,针对的来源请求

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值