sentinel的四种流控规则介绍

sentinel的四种流控规则介绍今天的内容我们主要围绕四个点进行展开介绍 。

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

sentinel的四种流控规则介绍

文章插图
这四点具体是什么意思呢?
首先启动项目:cloud-alibaba-sentinel-8006
一:关联在官方的介绍中是这样说的:关联的资源达到阈值时,就限流自己 。
这句话是什么意思呢?用比较直白一点的话来讲,假设我们有A和B两个接口,当A关联B接口,同时B接口的资源达到设定的阈值时,限流A 。我们也可以理解成,当我们下游的服务出现访问压力过大时,对上游的服务进行拦截和限流操作,例如:电商系统,当我们订单系统超出承受阈值时,对我们支付模块进行限流 。
sentinel的四种流控规则介绍

文章插图
例如:当我们关联order接口达到我们设定的阈值时,限流pay的接口访问 。
@Slf4j@RestControllerpublic 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接口添加流控规则
sentinel的四种流控规则介绍

文章插图
在这里我们需要使用到postMan工具,来模拟并发访问,用它来测试我们的order接口的并发访问 。
sentinel的四种流控规则介绍

文章插图

sentinel的四种流控规则介绍

文章插图
在这里的意思是25个线程0.25秒跑一次,当我们跑起来之后,再去访问pay接口就可以看到以下信息
sentinel的四种流控规则介绍

文章插图

sentinel的四种流控规则介绍

文章插图
当我们对order接口进行并发访问的时候,这个时候我们去访问pay接口,就可以看到pay接口返回限流信息
二:链路链路的意思是值当某个接口过来的资源达到阈值时,开启限流,主要是针对于请求来源的微服务,具有更细颗粒度 。
比如在一个服务应用中,多个(pay和order)接口都调用了同一个服务中的方法(该方法必须使用注解 SentinelResource进行修饰),如果频繁的去请求pay接口,并且达到设定的阈值,这么时候我们再去请求order接口,那么调用了同一服务的order接口就会被限流
sentinel的四种流控规则介绍

文章插图
test类
@Servicepublic class TestService {// 定义限流资源@SentinelResource("end")public String end(){return "end method";}}controller类
@Slf4j@RestControllerpublic 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注解标注的方法进行流控设置 。
sentinel的四种流控规则介绍

经验总结扩展阅读