热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AlibabaSentinel二:Sentinel流控规则

流控是Sentinel核心功能之一,流控指的是流量控制。Sentinel的流控操作起来非常简单,在控制台进行配置即可看见效,所见即所得。名词解释资源名:唯一名称,默认是请求路径针对

流控是Sentinel核心功能之一,流控指的是流量控制。

Sentinel的流控操作起来非常简单,在控制台进行配置即可看见效,所见即所得。



名词解释

资源名: 唯一名称,默认是请求路径

针对来源: Sentinel可以针对调用者进行限流,填写微服务的名称,默认是default(不区分来源)

阈值类型/单机阈值:可随时更改,无需重启系统



  • QPS:每秒的请求数量,当调用该api的QPS达到阈值的时候进行限流。

  • 线程数: 当调用该api的线程数达到阈值的时候进行限流。

流控模式:



  • 直接:api达到限流条件时,直接限流

  • 关联:当关联的资源达到限流条件时,限流自己

  • 链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就进行限流)【api级别的针对来源】

流控效果:



  • 快速失败:直接失败,抛出异常

  • Warm Up: 根据codeFactor(冷加载因子,默认3)的值,从阈值/codeFactor,经过预热时长,才达到设置的QPS阈值

  • 排队等待:匀速排队,让请求以匀速通过,阈值类型必须设置为QPS


QPS直接失败


配置:每秒钟只能有一个请求。浏览器快速刷新请求,会出现下图的效果


Blocked by Sentinel (flow limiting) 是sentinel提供的默认提示语,表示已经被限流了。提示语的修改,后面会进一步讲解。


线程数直接失败

添加新的配置


新增一个接口进行测试,因为通过线程进行限流,便于演示,所以让线程睡眠了2秒钟。


@GetMapping("/testThreadLimit")
public String testThreadLimit() {
try {
Thread.sleep(2000);
} catch (Exception e){
e.printStackTrace();
}
return "----testThreadLimit";
}

打开两个页面,分别快速请求一次,因为其中一个线程会阻塞2秒钟,所以另一个请求就会被限流。


流控模式-关联

上文提到的名称解释,关联就是:当关联的资源达到限流条件时,限流自己。

举例说明:新增两个接口testA,testB,在控制台中将两个接口进行关联,如果testB访问触发限制条件,testA就不能被访问了。

在实际开发中,比如支付接口正在经历着巨大的访问压力,这个时候对下单的接口进行限流就很有必要了。

1. 新增接口


@GetMapping("/testA")
public String testA() {
return "----testA";
}
@GetMapping("/testB")
public String testB() {
return "----testB";
}

2. sentinel添加规则

3. 为了持续对testB接口进行访问,我使用postman进行模拟。


4. 当使用postman进行访问testB时,浏览器访问testA,会发现访问testA返回的是限流的信息。等postman访问结束后,再次访问testB,就会发现恢复正常了。


流控效果-Warm Up(预热)


上图是配置的效果图。期望单机每秒限制12次的访问,但是由于预热初始化为3,也就是说5秒后,由每秒3次转化成每秒12次的限制。

实际操作的效果:不停的请求,刚开始会出现限流信息,慢慢的,达到5秒钟后,如果你无法在1秒内请求12次,就无法触发限流规则了。


流控效果-排队等待

排队等待就是在不超时的前提下,按照单机阈值进行执行。


如上图所示,如果一瞬间有10个请求过来,系统会一秒钟处理一个请求。testA稍加修改


@GetMapping("/testA")
public String testA() {
System.out.println(DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss") + " ------" + Thread.currentThread().getName());
return "----testA";
}

使用postman进行测试


得到的结果如下:


 



推荐阅读
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
author-avatar
mobiledu2502910077
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有