从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(十)sentinel篇(2): sentinel 流控规则及使用详解

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(十)sentinel篇(2): sentinel 流控规则及使用详解

sentinel qps与最大并发数区别,流控模式:直接,关联,链路, 流控效果: 直接,关联,链路 ,流控效果:快速失败,Warm Up,排队等待 等详解

1.png

流控配置与使用


1.png

基本配置-阈值类型


qps 类型


1.png

qps 相当于每秒请求数,和实际处理能力无关,也就是针对某资源,每秒请求数达到设定阈值,则触发限流



最大并发数 类型


1.png

最大并发数 相当于系统正在处理这个资源的线程数,也就是针对某资源,如果判断正则处理的线程数达到阈值,则触发限流


qps 与 最大并发数区别


下面是我的个人看法,为了方便大家更容易理解,可以把资源想象成一个饭店,

qps 是饭店的门口入口,如果饭店内已经坐满了,那么就触发限流,

具体后续怎么操作比如,是直接告诉顾客回去吧,还是排队那是饭店的策略

最大并发可以想象成后厨正在做饭的后厨团队,同时在给这个饭店做饭的是几个厨师,

也许做了100个客人点了红烧肉,其实规了只有5个厨师能做红烧肉,如果超过了那就触发限流

模拟图如下:

1.png

其实可以把qps 可以理解为spring boot 设置的maxconnections ,最大并发数理解为maxthreads ,只不过都是针对某资源而已


高级配置


流控模式-直接

1.png

直接模式就是当达到了设置的阈值就直接启动限流规则


流控模式-关联


1.png

关联模式是某一资源依赖其他资源或者内部请求依赖,比如fegin请求等,可以直接对内部依赖资源进行限流,当内部资源被先溜了,那么外部依赖资源也同样进行限流
比如我们订单创建请求依赖库存查询请求,比如/order -> /queryStock ,如果/queryStock 限流了那么/order 同时进行限流,如下图

1.png

流控模式-链路


1.png

链路模式和关联模式有点反过来的意思,比如上面关联模式,是被依赖的限流了,则入口端也同时限流,链路模式是设置某一入口,从指定设置入口请求的超过阈值被限流
比如 比如/order -> /queryStock ,/goodsStocks -> /queryStock 都请求了/queryStock,这次我们设置链路模式入口是/order ,则只有/order->/queryStock 这个请求会被限流,如下图

1.png

流控效果-快速失败


1.png

快速失败,字面意思,触发限流后直接返回sentinel blocked 或者自定义返回数据提示限流了


流控效果-Warm Up


字面意思看起来不太明白,可以举个例子就很好理解了
电商的秒杀活动,我们阈值如果设为了10,在秒杀开始之前很可能一直保持0请求,
在秒杀活动开始后,可能瞬间就会达到10触发流控,这时候其实对系统是很不友好的,因为很多数据可能还没来得及初始化或者设备没有唤醒就崩溃了
比如一些商品缓存,瞬间访问的时候可能商品信息还没有缓存完毕,
所以针对这种情况,有了预热效果,例如我设置了阈值是10,预热时长是5,系统默认的初始化阈值时3,
也就是说明。我们希望,5秒内阈值从3到10 
第一秒是每秒递增量(10-3)/5 = 1.4 ,加上当前阈值 3 = 4.4
第二秒就是4.4 +1.4 = 5.8
第三秒就是5.8 +1.4 = 7.2
第四秒就是7.2 +1.4 = 8.6
第五秒就是8.6 +1.4 = 10 .刚好达到设定阈值,大体曲线图如下

1.png

流控效果-排队等待


1.png

等待排队顾名思义,就是所有请求都是平滑一个个通过,比如我们qps设置2,那么按照秒切割就是500ms通过一个请求,效果图如下

1.png

相关文章
|
20天前
|
运维 持续交付 开发工具
深入浅出:GitOps在微服务架构中的应用
【10月更文挑战第26天】本文深入探讨了GitOps在微服务架构中的应用,介绍了其核心理念、自动化部署流程和增强的可观测性。通过实例展示了GitOps如何简化服务部署、配置管理和故障恢复,并推荐了一些实用工具和开发技巧。
|
11天前
|
监控 Go API
Go语言在微服务架构中的应用实践
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出,成为构建微服务的理想选择。本文将探讨Go语言在微服务架构中的应用实践,包括Go语言的特性如何适应微服务架构的需求,以及在实际开发中如何利用Go语言的特性来提高服务的性能和可维护性。我们将通过一个具体的案例分析,展示Go语言在微服务开发中的优势,并讨论在实际应用中可能遇到的挑战和解决方案。
|
12天前
|
Go 数据处理 API
Go语言在微服务架构中的应用与优势
本文摘要采用问答形式,以期提供更直接的信息获取方式。 Q1: 为什么选择Go语言进行微服务开发? A1: Go语言的并发模型、简洁的语法和高效的编译速度使其成为微服务架构的理想选择。 Q2: Go语言在微服务架构中有哪些优势? A2: 主要优势包括高性能、高并发处理能力、简洁的代码和强大的标准库。 Q3: 文章将如何展示Go语言在微服务中的应用? A3: 通过对比其他语言和展示Go语言在实际项目中的应用案例,来说明其在微服务架构中的优势。
|
10天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
10天前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
|
18天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
54 1
|
29天前
|
存储 Kubernetes 监控
深度解析Kubernetes在微服务架构中的应用与优化
【10月更文挑战第18天】深度解析Kubernetes在微服务架构中的应用与优化
106 0
|
2月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
1月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
167 2
|
13天前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
26 2
 SpringBoot入门(7)- 配置热部署devtools工具
下一篇
无影云桌面