引言

书接上篇微服务守护神-Sentinel-概念,上面介绍了Sentinel相关概念,本篇就来看下Sentinel的流控规则。

流控规则

流量控制,其原理是监控应用流量的QPS(每秒查询率) 或并发线程数等指标,当达到指定的阈值时

对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。

资源名:唯一名称,默认是请求路径,可自定义

针对来源:指定对哪个微服务进行限流,默认指default,意思是不区分来源,全部限制

阈值类型/单机阈值

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

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

是否集群:是否需要集群

QPS流控

还有沿用之前订单与商品项目代码

@RestController
public class SentinelController {@RequestMapping("/sentinel1")public String sentinel1(){//模拟一次网络延时try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}return "sentinel1";}@RequestMapping("/sentinel2")public String sentinel2(){return "测试高并发下的问题";}
}

启动订单服务,多次访问/sentinel2接口,会在sentinel 客户端看到order-service 管理界面,接下来就是具体流控配置。

步骤1:簇点链路--->流控

 步骤2:在单机阈值填写一个数值,表示每秒上限的请求数

这里阈值 3 表示单位时间内(1s) QPS超过3次,执行流控限制逻辑

步骤3:通过控制台快速频繁访问, 观察效果

线程数流控

线程流控配置跟QPS流程差不多,先删掉QPS的流控配置

步骤1:新增线程数流控

 步骤2:启动Jemter压测工具,在Jmeter中新增线程
Jemter不会用参考这篇文章:微服务绕不过的坎-服务雪崩

步骤3:访问 http://localhost:8091/sentinel2 会发现已经被限流

启动压测工具, 然后再访问

此时肯定会有小伙伴问:QPS 方式跟线程数方式有啥区别?这个可以看这篇文章:微服务Sentinel流控难题:QPS模式与线程数模式区别

流控模式

点击上面设置流控规则的编辑按钮,然后在编辑页面点击高级选项,会看到有流控模式一栏。

所谓流控模式,就是流量控制的操作方式有哪些。

sentinel共有三种流控模式,分别是:

  • 直接(默认):接口达到限流条件时,开启限流

  • 关联:当关联的资源(接口/服务)达到限流条件时,开启限流 [适合做应用让步]

  • 链路:当从某个接口过来的资源达到限流条件时,开启限流

直接流控模式

这个是默认模式, 上面我们演示QPS/线程数流控例子都是直接流控模式,请求达到设置流量阈值进行直接流控限制。

关联流控模式

关联流控模式指的是,当要关联的接口达到限流条件时,开启对当前接口开启限流。

啥意思?设想一种场景:电商项目中:用户下单与用户支付

假设用户下完单后会马上支付,如果某天支付服务非常繁忙,为防止整个项目因资源消耗被拖垮,配置当支付服务繁忙,限制下单。

这种场景就是关联流控, A接口与B接口存在联动(依赖)关系,比如:B调用A,当A接口出现高频访问,限制B接口调用。

沿用之前订单服务与商品服务案例

步骤1:在SentinelController.java中增加一个接口/sentinel3,重启订单服务

@RestController
public class SentinelController {@RequestMapping("/sentinel1")public String sentinel1(){//模拟一次网络延时try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}return "sentinel1";}@RequestMapping("/sentinel2")public String sentinel2(){return "测试高并发下的问题";}@RequestMapping("/sentinel3")public String sentinel3(){return "sentinel3";}}

步骤2:配置限流规则, 将流控模式设置为关联,关联资源设置为的 /sentinel2

在/sentinel3接口中配置关联接口:/sentinel2

步骤3:通过jmeter软件向/sentinel2连续发送请求,注意QPS一定要大于3  

 步骤4:访问/sentinel3,会发现已经被限流

sentinel3 接口关联sentinel2,它们为一体,当sentinel2接口超频访问,影响sentinel3的访问,这就是联动限制。

链路流控模式

链路流控模式指的是,当从某个接口过来的资源达到限流条件时,开启限流。

啥意思,解释一下:

链路:就是访问链条,请求到响应通过代码链。

比如下面:

链路1: trace1--->traceService

链路2: trace2--->traceService

链路流控模式可以对traceService资源做流控限制,设置限制入口资源为/trace2,意味着请求触发流控规则,如果是从/trace1访问进入的不处理,如果是从/trace2进来的,直接拒绝。

用代码演示一遍

步骤1:在shop-order-server项目的application.yml文件中新增如下配置

sentinel默认是不支持链路,需要提前开启

spring:cloud:sentinel:web-context-unify: false

步骤2:在shop-order-server项目中新增TraceServiceImpl.java

@Service
@Slf4j
public class TraceServiceImpl {@SentinelResource(value = "traceService")public void tranceService(){log.info("调用tranceService方法");}
}

步骤3:在shop-order-server项目中新增TraceController.java

@RestController
public class TraceController {@Autowiredprivate TraceServiceImpl traceService;@RequestMapping("/trace1")public String trace1(){traceService.tranceService();return "trace1";}@RequestMapping("/trace2")public String trace2(){traceService.tranceService();return "trace2";}
}

步骤4:重新启动订单服务并添加链路流控规则

步骤5:分别通过 /trace1 和 /trace2 访问, 发现/trace1没问题, /trace2的被限流了  

流控效果

最后一个是sentinel的流控效果

sentinel总共设置了3个:

快速失败(默认): 直接失败,抛出异常,不做任何额外的处理,是最简单的效果

Warm Up:它从开始阈值到最大QPS阈值会有一个缓冲阶段,一开始的阈值是最大QPS阈值的

1/3,然后慢慢增长,直到最大阈值,适用于将突然增大的流量转换为缓步增长的场景。

排队等待:让请求以均匀的速度通过,单机阈值为每秒通过数量,其余的排队等待; 它还会让设

置一个超时时间,当请求超过超时间时间还未处理,则会被丢弃。

到这,sentinel的流控规则就结束了,如果想知道还有哪些控制逻辑,请听下回分解。

 看文字不过瘾可以切换视频版:SpringCloud Alibaba 极简入门

微服务守护神-Sentinel-流控规则相关推荐

  1. Alibaba Sentinel | 流控规则设置

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

  2. 什么?Sentinel流控规则可以这样玩?

    点赞再看,养成习惯,微信搜索[牧小农]关注我获取更多资讯,风里雨里,小农等你,很高兴能够成为你的朋友. 项目源码地址:公众号回复 sentinel,即可免费获取源码 前言 上一篇文章中,我们讲解了关于 ...

  3. Sentinel流控规则

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

  4. 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 排队等 ...

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. Ajax跨域请求action方法,无法传递及接收cookie信息(应用于系统登录认证及退出)解决方案
  2. 幼儿园带括号算式口诀_记忆口诀丨有顺口溜加成的知识点瞬间好记一万倍!
  3. nodejs安装到d盘怎么使用npm_NodeJS、NPM安装配置步骤
  4. oracle19c xp安装 客户端_windows下安装oracle19c
  5. tshark过滤并保存包特定字段
  6. 音视频——Codec初始化及Omx组件创建
  7. python处理地震sac数据_自己开发的一个SEED格式地震数据转换为SAC格式数据,并完成世界时整天波形合并的Python脚本...
  8. masm5安装教程_小编为你演示win7系统使用masm5 0的操作步骤【详细说明】的恢复步骤...
  9. 察举科目-汉代察举制度的重要环节
  10. NVIDIA Maxine 姿势识别极简教程
  11. 2015年App Store审核被拒的23个理由
  12. 14张Python基础知识点总结思维导图配搭一份视频教程还不能入门?
  13. 重心在哪里(简单数学题)
  14. 人工智能——搜索策论2
  15. 实习总结-2017.5.2
  16. 微软运行库合集2021
  17. 针对 exchange 的杀毒软件
  18. CESIUM-加点操作,entity和primitive
  19. comsol三维随机裂纹 裂缝模型 随机纤维建模
  20. NSIS 运行bat的方法汇总

热门文章

  1. Autoit3--检测窗口变化PixelChecksum--软件自动化测试学习笔记
  2. Qt 窗口操作函数(置顶、全屏,最大化最小化按钮设置等)
  3. 考PMP证书需要经过哪些流程?
  4. tri_mode_ethernet_mac的Licence申请及rgmii时序的一些领悟
  5. (全栈旅行足迹地图打卡网站 0-1)-前端路由(Router)-05(WebGIS Vue-js-go-mysql)
  6. 文学教育杂志社2022年征稿启示
  7. 面向对象编程三大特征之一 继承
  8. 深圳网络信息安全员(NSACE初级)认证招生简章
  9. mini2440 linux内核编译与移植 课程设计,linux内核移植步骤-mini2440
  10. android 老人机模式,老人模式简单至上_小米 红米_手机Android频道-中关村在线