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

简介: 分布式限流框架Sentinel基本引用Sentinel的基本引用使用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 资源类型

本文就是愿天堂没有BUG给大家分享的内容,大家有收获的话可以分享下,想学习更多的话可以到微信公众号里找我,我等你哦。

相关文章
|
3天前
|
数据采集 JavaScript Java
一款分布式爬虫管理平台,支持多种语言和框架
项目介绍 Crawlab —— 一个基于 Golang 的分布式爬虫管理平台,支持Python、NodeJS、Go、Java、PHP 等多种编程语言以及多种爬虫框架。 主要功能:
|
9天前
|
Shell 虚拟化
分布式系统详解--框架(Zookeeper-基本shell命令)
分布式系统详解--框架(Zookeeper-基本shell命令)
12 1
|
9天前
|
XML 分布式计算 Hadoop
分布式系统详解--框架(Hadoop-单机版搭建)
分布式系统详解--框架(Hadoop-单机版搭建)
31 0
分布式系统详解--框架(Hadoop-单机版搭建)
|
5天前
|
SpringCloudAlibaba Java 开发者
SpringCloudAlibaba之Sentinel简单使用
高频率刷新,可以看到hello world、fallback、block handler都会出现。
15 0
|
9天前
|
存储 分布式计算 监控
分布式系统详解--框架(Hadoop-HDFS的HA搭建及测试)
分布式系统详解--框架(Hadoop-HDFS的HA搭建及测试)
20 0
|
9天前
|
Java 网络安全
分布式系统详解--框架(Zookeeper-简介和集群搭建)
分布式系统详解--框架(Zookeeper-简介和集群搭建)
22 0
|
9天前
|
分布式计算 资源调度 网络协议
分布式系统详解--框架(Hadoop--RPC协议)
分布式系统详解--框架(Hadoop--RPC协议)
13 0
|
9天前
|
分布式计算 Hadoop Java
分布式系统详解--框架(Hadoop--JAVA操作HDFS文件)
分布式系统详解--框架(Hadoop--JAVA操作HDFS文件)
17 0
|
9天前
|
分布式计算 Hadoop Shell
分布式系统详解--框架(Hadoop-基本shell命令)
分布式系统详解--框架(Hadoop-基本shell命令)
8 0
|
9天前
|
网络安全 数据安全/隐私保护
分布式系统详解--框架(Hadoop-Ssh免密登陆配置)
分布式系统详解--框架(Hadoop-Ssh免密登陆配置)
10 0