点赞再看,养成习惯,微信搜索【牧小农】关注我获取更多资讯,风里雨里,小农等你,很高兴能够成为你的朋友。
项目源码地址:公众号回复 sentinel,即可免费获取源码

前言

上一篇文章中,我们讲解了关于sentinel基本介绍以及流控规则中直接和快速失败的效果,有兴趣的可以去看上一篇文章,今天,我们给大家带来更加详细的关于sentinel流控规则的介绍。今天的内容我们主要围绕四个点进行展开介绍。

  • 流控模式 :关联、链路
  • 流控效果 :Warm Up、排队等待


这四点具体是什么意思呢?别急我们一个一个来做详细的介绍,首先我们从关联开始。

首先启动项目:cloud-alibaba-sentinel-8006

关联

在官方的介绍中是这样说的:关联的资源达到阈值时,就限流自己。

这句话是什么意思呢?用比较直白一点的话来讲,假设我们有A和B两个接口,当A关联B接口,同时B接口的资源达到设定的阈值时,限流A。我们也可以理解成,当我们下游的服务出现访问压力过大时,对上游的服务进行拦截和限流操作,例如:电商系统,当我们订单系统超出承受阈值时,对我们支付模块进行限流。

例如:当我们关联order接口达到我们设定的阈值时,限流pay的接口访问。

@Slf4j
@RestController
public class TestController {@GetMapping("/pay")public String pay() {return "hello my name is pay ,wo shi boy";}@GetMapping("/order")public String order(){return "hi my name is order, me is girl";}}

给pay接口添加流控规则

在这里我们需要使用到postMan工具,来模拟并发访问,用它来测试我们的order接口的并发访问。

在这里的意思是25个线程0.25秒跑一次,当我们跑起来之后,再去访问pay接口就可以看到以下信息


当我们对order接口进行并发访问的时候,这个时候我们去访问pay接口,就可以看到pay接口返回限流信息

链路

接下来我们就来看一下流控模式中的链路,链路的意思是值当某个接口过来的资源达到阈值时,开启限流,主要是针对于请求来源的微服务,具有更细颗粒度。

比如在一个服务应用中,多个(pay和order)接口都调用了同一个服务中的方法(该方法必须使用注解 SentinelResource进行修饰),如果频繁的去请求pay接口,并且达到设定的阈值,这么时候我们再去请求order接口,那么调用了同一服务的order接口就会被限流

test类

@Service
public class TestService {// 定义限流资源@SentinelResource("end")public String end(){return "end method";}
}

controller类

@Slf4j
@RestController
public class TestController {@Autowiredprivate TestService testService;@GetMapping("/pay")public String pay() {return testService.end();}@GetMapping("/order")public String order(){return testService.end();}}

配置项web-context-unify,这个配置的意思是说根据不同的URL进行链路限流,否则没有效果

spring:application:name: cloudalibaba-sentinel-servicecloud:nacos:discovery:server-addr: localhost:8848sentinel:transport:#配置Sentinel地址,就是我们的WEB界面dashboard: localhost:8080#Sentinel配置默认8719端口,被占用端口会自动从+1,直到找到未被占用的端口port: 8719# 配置为falseweb-context-unify: false

我们访问pay接口和order接口后,需要对end进行流控规则的配置,也就是使用了SentinelResource注解标注的方法进行流控设置。

那么这个时候如果我们频繁的去访问order接口的时候,就会出现异常的情况,直接抛出错误提示,这个也是因为快速失败在链路上的直接体现

Warm Up

参考文档:https://sentinelguard.io/zh-cn/docs/flow-control.html

Warm Up 流量控制,也叫预热或者冷启动方式,会根据我们设定的规则,进行缓慢的流量放开,逐渐增加阈值上限,给系统一个反应时间,避免流量的突然增加,将系统压垮的情况发生,主要用于预防我们系统长期处于稳定的流量访问下,突然流量的增加,将系统资源直接拉满的情况.

在这里我们主要弄明白两个参数

单机阈值:12,这个表示我们访问最大阈值为12,但是第一次最大访问量为4,为什么是4呢,看下面公式

预热公式:阈值/coldFactor(默认值为3),经过预热时间后才会达到阈值。

预热时长:5 ,也就是说我们的请求会在五秒内单机阈值达到12的访问,比如第一次为4,后续在五秒内依次5/6/8/10,最后达到12的阈值

一般这种在秒杀或者电商节中会设置这样的流控规则,就是为了防止突然流量的增加导致系统的奔溃。

当我们设置完流控规则以后,我们就来看一下效果,我们刚才设置的order的接口,如果当我们在频繁的去访问order接口的时候,如果超过当前时间设定的阈值时,直接返回限流信息。

在这里我们直接用浏览器疯狂的去刷新,是时候体验单身二十几年的手速了,当然也可以使用postman接口去试,我们这边手速比较快,直接用浏览器刷新,我们可以看到下面的曲线图:

蓝色表示你拒绝的QPS,绿色表示通过的QPS,我们可以看到蓝色成明显的下降趋势,而绿色成上升趋势,也可以通过右边的表格中看到,刚开始通过的只有四个,具体的有三个,后面通过慢慢增加,拒绝慢慢变少,这个就是我们Warm Up(预热)的作用了

排队等待

我们现在来介绍最后一个流控规则的使用,排队等待会严格控制请求通过的间隔时间,让请求稳定且匀速的通过,可以用来处理间隔性突发的高流量,例如抢票软件,在某一秒或者一分钟内有大量的请求到来,而接下来的一段时间里处于空闲状态,我们希望系统能够在接下来的空余时间里也能出去这些请求,而不是直接拒绝。

以固定的间隔时间让请求通过,当请求过来的时候,如果当前请求距离上一个请求通过的时间大于 规则预设值 ,则请求通过,如果当前请求预期通过时间小于 规则预设值 ,则进行排队等待,如果预期通过时间超过最大排队时间,直接拒绝请求。

Sentinel排队等待是 漏铜算法+虚拟队列机制实现的,目前排队等待中不支持QPS>1000的场景

我们对pay接口进行设置,一秒钟只处理一个QPS请求,其他的排队,如果超过15秒则直接拒绝

pay接口调整,这里我们给pay接口加上打印日志,方便我们看到具体效果

    @GetMapping("/pay")public String pay() {//        return "hello my name is pay ,wo shi boy";log.info("pay接口,请求线程为:"+Thread.currentThread().getName());return testService.end();}

我们借助postman来进行调用,说明手速始终更不上工具,还是工具香,这里我们设置10个请求,没有间隔时间

从下图中我们可以看到,对于我们的请求,是一个QPS请求。

总结

到这里呢,我们的流控规则就讲完了,主要是针对不同的规则进行不同的设定,来满足我们不用业务场景,可能会有一点点的小饶,但是如果亲自操作之后,会感觉原来是这样,感兴趣的小伙伴可以自己动手试一试,源码都已经上传了,只有动手了才能感受到其中的快乐,赶紧去试一试吧。

我是牧小农,怕什么真理无穷,进一步有进一步的欢喜,大家加油!

什么?Sentinel流控规则可以这样玩?相关推荐

  1. Sentinel流控规则

    Sentinel流控规则 流控规则基本介绍 名词解释 资源名:唯一名称,默认请求路径 针对来源:Sentinel可以针对调用者进行限流,填写微服务名,默认default(不区分来源) 阈值类型/单机阈 ...

  2. Alibaba Sentinel | 流控规则设置

    文章目录 一.Sentinel概述 强大的优势: 组成部分: 二.微服务集成Sentinel 版本说明 安装Sentinel控制台: 1.docke安装 2.jar安装 启动控制台 微服务集成Sent ...

  3. Spring Cloud Alibaba:Sentinel 流控规则

    文章目录 1. 前言 2. 阈值类型 2.1 QPS 2.2 线程数 3. 流控模式 3.1 直接 3.2 关联 3.3 链路 4. 流控效果 4.1 快速失败 4.2 Warm Up 4.3 排队等 ...

  4. Sentinel流控规则_流控等待_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0037

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后再看一下流控等待这个流控的规则 其实就是,如果流量来了很多,然后,请求,会进行排队,如果超时了 ...

  5. Sentinel流控规则_QPS直接失败_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0033

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 好上节课,咱们说了一下流量控制的的介绍,下面咱们开始配置, 流控的规则,首先先看第一点,就是流控, ...

  6. Sentinel流控规则简介_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0032

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 上节,我们配置好了sentinel的监控,启动了一个微服务,看了效果 然后接下来我们去点击这个簇点 ...

  7. Sentinel流控规则_预热_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0036

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 上面咱们说了流控的,直接失败,QPS流控和线程数流控,还有关联流控 然后这次咱们来说一下这个war ...

  8. Sentinel流控规则_线程数失败_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0034

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 上节咱们说了,阀值类型是QPS,也就是一秒钟可以访问的次数,然后流控模式这里我们用的是直接,也就是 ...

  9. Sentinel流控规则_关联_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0035

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 这里我们再看这个关联的意思 当关联的资源达到阀值的时候就限流自己 比如我们设置支付接口达到阀值以后 ...

最新文章

  1. currency类型_让我们一起走进VBA基本语法的世界,先了解一下数据类型有哪些
  2. pandas 索引_Pandas学习笔记03数据清洗(通过索引选择数据)
  3. set 与 map 的第一次尝试
  4. java单利模式写法
  5. python二分法查找数字_Python——二分法查找
  6. maven的使用--初级篇
  7. 获得CPU利用率(python调用top命令实现)
  8. python 实现手机自动拨打电话(循环通话测试)
  9. java 数字大小写转换_阿拉伯数字大小写转换java工具
  10. CVE: 2014-6271 Bash Specially-crafted Environment Variables Code Injection Vulnerability Analysis
  11. Java 给PDF文档设置背景颜色和背景图片
  12. 腾讯云Cannot parse privatekey: unsupported key format问题解决
  13. 集合竞价规则及集合竞价的产生条件
  14. 【转载】关于MSHTML
  15. Ubuntu16.04笔记本 安装R RStudio
  16. python中continue用法_Python学习笔记之Break和Continue用法分析
  17. ICCV2019语义分割/UDA:ACE: Adapting to Changing Environments for Semantic SegmentationACE:适应变化环境下的语义分割
  18. STM32 IO口输入高低电平
  19. 自动驾驶出租车,巨头们的应许之地?
  20. 阿里云服务器租用费用_轻量和ECS价格表

热门文章

  1. AndroidPlayPlane战机小游戏
  2. 电脑桌面快捷方式更换图片
  3. Python + OpenCV + DeepLearning 解数独问题【一、数独的提取】
  4. 卸载VS时彻底删除C盘文件方法
  5. [C/C++] 十进制数转二进制
  6. 基于Qt模仿网易云音乐播放器
  7. windows平台下的oracle ORA-01031的解决方法
  8. 怎样用C++在控制台中编写俄罗斯方块
  9. 2021-03-03 地理配准
  10. textarea 中如何阻止默认的回车换行事件?