SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)

前言:

本篇博客介绍了有关于Sentinel的几种常用的流控规则。


文章目录

    • 一。概述
    • 二。QPS-直接-快速失败
    • 三。线程-直接-快速失败
    • 四。QPS-关联-快速失败
    • 五。QPS-链路-快速失败
    • 六。QPS-直接-预热
    • 七。QPS-直接-匀速排队


一。概述

流量控制(flow control),其原理是监控应用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。

FlowSlot 会根据预设的规则,结合前面 NodeSelectorSlotClusterBuilderSlotStatisticSlot 统计出来的实时信息进行流量控制。

限流的直接表现是在执行Entry nodeA = SphU.entry(resourceName) 的时候抛出 FlowException 异常。FlowExceptionBlockException的子类,您可以捕捉 BlockException来自定义被限流之后的处理逻辑。

同一个资源可以创建多条限流规则。FlowSlot 会对该资源的所有限流规则依次遍历,直到有规则触发限流或者所有规则遍历完毕。

一条限流规则主要由下面几个因素组成,我们可以组合这些元素来实现不同的限流效果:

  • resource:资源名,即限流规则的作用对象
  • count: 限流阈值
  • grade: 限流阈值类型(QPS 或并发线程数)
  • limitApp: 流控针对的调用来源,若为 default 则不区分调用来源
  • strategy: 调用关系限流策略
  • controlBehavior: 流量控制效果(直接拒绝、Warm Up、匀速排队)

官方文档地址:https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6

二。QPS-直接-快速失败

1.说明

当一秒内 QPS 超过某个阈值的时候,则采取措施进行流量控制。

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第1张图片

2.示例demo

控制器代码:

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第2张图片

3.sentinel控制台操作

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第3张图片

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第4张图片

4.访问测试

一秒点击一次还是可以正常访问:

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第5张图片

若快速点击多次,超过了QPS阈值,则被限流:

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第6张图片

三。线程-直接-快速失败

1.说明

当一秒内 访问线程数超过某个阈值的时候,则采取措施进行流量控制。

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第7张图片

2.示例demo

控制器代码:

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第8张图片

3.sentinel控制台操作

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第9张图片

4.访问测试

快速点击多次依然可以访问:
SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第10张图片

若打开两个浏览器窗口,快速切换并快速刷新页面,超过了访问线程数阈值,则被限流:

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第11张图片

四。QPS-关联-快速失败

1.说明:

当接口A关联了接口B时,在访问B接口超过了规定流量阈值的情况下,接口A也将会被限流

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第12张图片

2.示例demo

控制器代码:

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第13张图片

3.sentinel控制台操作

先给testB建立流控规则:

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第14张图片
在建立/testA流控规则,关联/testB:

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第15张图片

4.访问测试

使用postman建立新的访问接口集合集中访问

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第16张图片
SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第17张图片

在这里插入图片描述
SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第18张图片
SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第19张图片
SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第20张图片
SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第21张图片
SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第22张图片

在postman访问testB接口的同时,去访问testA,发现testA被限流:

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第23张图片

五。QPS-链路-快速失败

1.说明

当两个接口A和接口B访问同一个资源时,若对接口A进行了资源的链路控制,超过了规定的阈值后,再次访问接口A去请求资源时会出现报错

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第24张图片

2.实例demo

控制器代码:

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第25张图片

service:

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第26张图片
SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第27张图片

配置文件:

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第28张图片

3.sentinel控制台操作

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第29张图片

4.访问测试

多次访问/testA接口,超过阈值再次访问接口A去请求资源时会出现报错:

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第30张图片

六。QPS-直接-预热

1.说明

warm up就是为了防止突然进入的大流量大系统冲垮,在一定时间内将访问流量慢慢增加

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第31张图片
SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第32张图片
在这里插入图片描述

公式:阈值除以coldFactor(默认值为3),经过预热时长后才会达到阈值

默认coldFactor为3,即请求QPS从threshold/3开始,经预热时长逐渐升至设定的QPS阈值。

2.实例demo

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第33张图片

3.sentinel控制台操作

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第34张图片

4.访问测试

当前五秒阈值为10/3=3,快速点击时,触发限流:

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第35张图片

当五秒钟过预热后,阈值到达10,再次快速点击,访问正常:

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第36张图片

七。QPS-直接-匀速排队

1.说明

排队等待,匀速通过

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第37张图片
在这里插入图片描述

2.实例demo

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第38张图片

3.sentinel控制台操作

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第39张图片

4.访问测试

再次使用postman接口集合对testB接口进行访问:

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第40张图片
SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第41张图片
后台线程数每隔相应的延迟时间对接口进行访问,实现匀速接口限流:

SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)_第42张图片

你可能感兴趣的:(#,SpringCloud,Alibaba,spring,cloud,alibaba,sentinel)