「SpringCloudAlibaba系列」分布式限流框架Sentinel基本引用|

分布式限流框架Sentinel基本引用

Sentinel的基本引用

使用Sentinel的核心库实现限流,主要分以下几个步骤:

  1. 定义资源
  2. 定义限流规则
  3. 校验规则是否生效

Sentinel实现限流

引入Sentinel核心库

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-core</artifactId>
    <version>1.8.2</version>
</dependency>
复制代码

定义普通业务方法

private static void doLimiting(){
        try(Entry limiting = SphU.entry("doLimiting")){
            log.info("{}-doLimiting",System.currentTimeMillis());
        }catch (BlockException e){
            //处理被流量控制的逻辑
        }
    }
复制代码

在doLimiting方法中,通过使用Sentinel中的SphU.entry("doLimiting")定义一个资源来实现流量控制逻辑,表示当请求进入doLimiting方法时,需要进行限流判断,如果抛出BlockException异常,则表示触发了限流,doLimiting可定义为方法名称、接口名称或者其他唯一标识

对保护资源定义限流规则

private static void initFlowRules(){
        final List<FlowRule> flowRules = new ArrayList<>();
        final FlowRule flowRule = new FlowRule();
        flowRule.setResource("doLimiting");
        flowRule.setCount(20);
        flowRule.setGrade(RuleConstant.FLOW_GRADE_QPS);
        flowRules.add(flowRule);
        FlowRuleManager.loadRules(flowRules);
    }
复制代码

针对doLimiting资源,通过initFlowRules设置限流规则,部分参数含义如下:

  • grade:限流阈值类型,并发线程数模式(0)或者QPS模式(1)
  • resource:设置需要保护资源名,这个资源名称必须和SphU.entry中使用的名称一样
  • count:限流阈值

对于doLimiting方法,每秒最多允许通过20个请求,就是QPS为20

验证doLImiting方法的限流情况

public static void main(String[] args) {
        initFlowRules();
        while(true){
            doLimiting();
        }
    }
复制代码

启动main方法,在{USER_HOME}\logs\csp\{包名-类名}--metrics.log.yyyy-MM-dd文件查看以下日志

1627357800000|2021-07-27 11:50:00|doLimiting|20|6740|20|0|0|0|0|0
1627357801000|2021-07-27 11:50:01|doLimiting|20|7372|20|0|0|0|0|0
1627357802000|2021-07-27 11:50:02|doLimiting|20|7093|20|0|0|0|0|0
1627357803000|2021-07-27 11:50:03|doLimiting|20|6714|20|0|0|0|0|0
1627357804000|2021-07-27 11:50:04|doLimiting|20|6412|20|0|0|0|0|0
1627357805000|2021-07-27 11:50:05|doLimiting|20|7296|20|0|0|0|0|0
1627357806000|2021-07-27 11:50:06|doLimiting|20|7606|20|0|0|0|0|0
1627357807000|2021-07-27 11:50:07|doLimiting|20|7033|20|0|0|0|0|0
1627357808000|2021-07-27 11:50:08|doLimiting|20|6489|20|0|0|0|0|0
复制代码

每秒稳定输出20次,和规则中设置的值一致,而被拒绝的请求每秒最高达7606次

日志对应字段具体含义

timestamp|yyyy-MM-dd HH:mm:ss|resource|passQPS|blockQPS|successQPS|exceptionQPS|rt|occupiedPassQPS
|concurrency|classification

passQPS 通过的请求数
blockQPS 被阻止的请求数
successQPS 成功执行完成的请求数
exceptionQPS 用户自定义的异常
rt 平均响应时长
occupiedPassQPS 优先通过的请求
classification 资源类型
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值