微服务守护神-Sentinel-流控规则
创始人
2024-03-22 10:31:47

引言

书接上篇 微服务守护神-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 极简入门

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...