Resilience中的RateLimiter

Resilience中的RateLimiter

  • 一、RateLimiter(限流)
    • 1.常见的限流算法
      • 漏桶算法(Leaky Bucket)
      • 令牌桶算法(Token Bucket)——Spring cloud 默认使用该算法
      • 滚动时间窗口(tumbling time window)
      • 滑动时间窗口(sliding time window)
    • 2.实际应用

一、RateLimiter(限流)

  • 限流就是限制最大访问流量。系统能提供的最大并发是有限的,同时来的请求又太多,就需要限流
    • 比如商城秒杀业务,瞬时大量请求涌入,服务器忙不过来就只好排队限流了,和去景点排队买票、去银行办理业务排队等号道理相同。
    • 所谓限流,就是通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速,以保护应用系统,一旦达到限制速率则可以拒绝服务排队等待降级等处理。

1.常见的限流算法

漏桶算法(Leaky Bucket)

  • 一个固定容量的漏桶,按照设定常量固定速率流出水滴,类似医院打吊针,不管你源头流量多大,我按照设定匀速流出。
  • 如果流入水滴超出了桶的容量,则流入的水滴将会溢出(被丢弃),而漏桶容量是不变的。
    在这里插入图片描述
  • 这里有两个变量,一个是桶的大小,支持流量突发(Burst)增多时可以存储多少,另一个是水桶漏洞的大小(Rate)。因为漏桶的漏出速率是固定的参数,所以,即使网络中不存在资源冲突(没有发生拥塞)<- - - 没懂,漏桶算法也不能使流速突发(Burst)到流入速率。因此,漏桶算法对于存在突发特性的流量来说缺乏效率。为了更好的控制流量,漏桶算法需要通过对上面的两个变量进行控制。
    在这里插入图片描述
  • 那为什么我最开始不能把桶的漏口尽可能的设置的大呢?<- - - 疑问

令牌桶算法(Token Bucket)——Spring cloud 默认使用该算法

在这里插入图片描述


滚动时间窗口(tumbling time window)


滑动时间窗口(sliding time window)


2.实际应用

编写具体的提供服务接口

/*** Resilience4j rateLimit 的例子* @param id 主键* @return 返回结果*/
@GetMapping("/pay/rateLimit/{id}")
public String myRateLimit(@PathVariable("id") Integer id) {return "Hello, myRateLimit 欢迎到来 inputId: "+ id + "\t" + UUID.randomUUID();
}

如果使用了 openfeign 需要将提供服务的接口注册到对外暴露的接口中

/*** Resilience4j rateLimit 的例子* @param id 主键* @return 返回结果*/
@GetMapping("/pay/rateLimit/{id}")
String myRateLimit(@PathVariable("id") Integer id);

在调用服务方引入 ratelimiter 相关的依赖

<!--resilience4j-rateLimiter-->
<dependency><groupId>io.github.resilience4j</groupId><artifactId>resilience4j-ratelimiter</artifactId>
</dependency>
<!--circuitBreaker-resilience4j-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
</dependency>
<!--circuitBreaker 是基于AOP实现的 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>

在调用服务方添加 rateLimiter 相关的配置项(仅仅是 rateLimiter 相关的配置,其他配置根据自己的情况)

#=================resilience4j ratelimiter 限流的配置
resilience4j:ratelimiter:configs:default:limit-for-period: 2 # 在一次刷新周期内,允许执行的最大请求数limit-refresh-period: 5s # 限流器每隔 limit-refresh-period 刷新一次,将允许处理的最大请求数量重置为 limit-for-periodtimeout-duration: 1 # 线程等待权限的默认等待时间。instances:cloud-payment-service:base-config: default

编写调用方相关的接口

@GetMapping("/pay/rateLimit/{id}")
@RateLimiter(name = "cloud-payment-service", fallbackMethod = "myRateLimitFallback")
public String myRateLimit(@PathVariable("id") Integer id) {return payFeignApi.myRateLimit(id);
}public String myRateLimitFallback(Integer id, Throwable t){return "你被限流了,禁止访问!!!  input: " + id;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/312858.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GmSSL-3.1.1编译

1.源码下载&#xff1a; 下载地址&#xff1a;https://github.com/guanzhi/GmSSL/releases选择对应版本下载。 ​ 2.选择要下载的源码包&#xff1a; ​ 2.编译&#xff1a; 2.1 windows编译&#xff1a;打开vs命令行&#xff0c;选择想要编译的版本&#xff0c;x86或x64…

守望先锋2账号注册教程 战网国际服注册守望先锋2账号步骤

守望先锋2账号注册教程 战网国际服注册守望先锋2账号步骤 守望先锋2是一款由暴雪娱乐公司开发的多人第一人称射击游戏&#xff0c;是守望先锋的续作&#xff0c;故事发生在未来&#xff0c;各种英雄为保卫地球而战。守望先锋2是款不断进化的游戏&#xff0c;带来极致的射击体…

【网络】Burpsuite学习笔记

文章目录 1.介绍1.1 正常客户端与服务端通信&BurpSuite代理后1.2 下载激活参考地址1.3 代理设置1.4 Proxy SwitchyOmega 使用1.4.1 新建情景模式1.4.2 设置代理1.4.2 应用选项 1.5 FoxyProxy 使用1.6 安装证书1.6.1 方式一1.6.2 方式二1.6.3 浏览器安装证书1.6.4 或者直接双…

面试突击---MySQL索引

面试突击---MYSQL索引 面试表达技巧&#xff1a;1、谈一下你对于mysql索引的理解&#xff1f;&#xff08;为什么mysql要选择B树来存储索引&#xff09;2、索引有哪些分类&#xff1f;3、聚簇索引与非聚簇索引4、回表、索引覆盖、最左匹配原则、索引下推&#xff08;1&#xff…

MATLAB 点云体素滤波 (58)

MATLAB 体素滤波 (58) 一、基本原理二、算法实现1.代码数据的海量性始终是点云处理时需要面临的一个大问题,严重的时间消耗和内存占用影响了点云处理的发展,当然了,点云数量主要应该看项目的实际需求,若是对细节要求较高,那么点云数量不可过少,但是要求过低时,我们就可…

【NUCLEO-G071RB】003——GPIO-按键控制LED灯

NUCLEO-G071RB&#xff1a;003——GPIO-按键控制LED灯 设计目标电路原理图芯片配置程序修改 设计目标 用输入控制输出&#xff0c;即以蓝色按键B1的输入控制LED4灯的输出 细节&#xff1a; 若判定为按键按下中&#xff0c;则LED灭灯&#xff0c;否则亮灯按键按下和抬起的检查…

怎样将excel的科学计数法设置为指数形式?

对了&#xff0c;这个问题中所谓的“指数形式”是指数学上书写的右上标的指数格式&#xff0c;能不能通过单元格设置来做这个格式的转换呢&#xff1f; 一、几个尝试 以下&#xff0c;以数字123000为例来说明。 情况1.转换成数学上的书写方式&#xff0c;如下图的样子&#x…

Windows 任务计划程序 【不管用户是否登录都要运行】执行时不显示CMD或程序窗口

任务计划程序右侧可以导出xml 「只在用户登录时运行」LogonType&#xff1a;InteractiveToken。 「不管用户是否登录都要运行」LogonType&#xff1a;Password。 用管理员运行CMD &#xff1a;schtasks /change /it /tn "test" 「不管用户是否登录都要运行」Logon…

20240329-1-SVM面试题

SVM面试题 1. SVM直观解释 SVM&#xff0c;Support Vector Machine&#xff0c;它是一种二分类模型&#xff0c;其基本模型定义为特征空间上的间隔最大的线性分类器&#xff0c;间隔最大使它有别于感知机&#xff1b;其还包括核技巧&#xff0c;这使它成为实质上的非线性分类…

vue+element作用域插槽

作用域插槽的样式由父组件决定&#xff0c;内容却由子组件控制。 在el-table使用作用域插槽 <el-table><el-table-column slot-scope" { row, column, $index }"></el-table-column> </el-table>在el-tree使用作用域插槽 <el-tree>…

redis-plus-plus的安装与使用

文章目录 一、安装第一步&#xff1a;安装hiredis第二步&#xff1a;安装redis-plus-plus第三步&#xff1a;将编译后的可执行文件移动到/usr/local对应目录第四步&#xff1a;更新动态库 二、使用第一步&#xff1a;编写示例代码第二步&#xff1a;编译运行 本文参考自 redis-…

JVM垃圾回收与算法

1. 如何确定垃圾 1.1 引用计数法 在 Java 中&#xff0c;引用和对象是有关联的。如果要操作对象则必须用引用进行。因此&#xff0c;很显然一个简单 的办法是通过引用计数来判断一个对象是否可以回收。简单说&#xff0c;即一个对象如果没有任何与之关 联的引用&#xff0c;即…

ENSP防火墙配置策略路由及ip-link探测

拓扑 配置目标 1.A区域走ISP1&#xff0c;B区域走ISP2 2. isp线路故障时及时切换到另一条线路 配置接口及安全区域 配置安全策略 配置nat 配置默认路由 配置ip-link 配置策略路由 cl-1 cl-2 验证配置成功 策略路由 A走ISP1 B走ISP2 验证线路故障 isp1 in g0/0/0 shoutdow…

基于Python的机器学习的文本分类系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

VIT论文阅读

论文地址&#xff1a;https://arxiv.org/pdf/2010.11929.pdf VIT论文阅读 摘要INTRODUCTION结论RELATEDWORKMETHOD1.VISIONTRANSFORMER(VIT)整体流程消融实验HEAD TYPE AND CLASSTOKENpoisitional embedding 整体过程公式Inductive biasHybrid Architecture 2.FINE-TUNINGANDH…

LeetCode236:二叉树的最近公共祖先

题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以是…

03攻防世界-unserialize3

根据题目可以看出&#xff0c;这是个反序列化的题目 打开网址观察题目可以看到这里是php的代码&#xff0c;那么也就是php的反序列化 本题需要利用反序列化字符串来进行解题&#xff0c;根据源码提示我们需要构造code。 序列化的意思是&#xff1a;是将变量转换为可保存或传输…

向量数据库与图数据库:理解它们的区别

作者&#xff1a;Elastic Platform Team 大数据管理不仅仅是尽可能存储更多的数据。它关乎能够识别有意义的见解、发现隐藏的模式&#xff0c;并做出明智的决策。这种对高级分析的追求一直是数据建模和存储解决方案创新的驱动力&#xff0c;远远超出了传统关系数据库。 这些创…

计算机网络 2.2数据传输方式

第二节 数据传输方式 一、数据通信系统模型 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 1.数据终端设备&#xff08;DTE&#xff09; 作用&#xff1a;用于处理用户数据的设备&#xff0c;是数据通信系统的信源和信宿。 设备&#xff1a;便携计算机…

通过调用Vcenter-Api获取Vcenter中服务器信息

通过调用Vcenter-Api获取Vcenter中服务器信息 文章目录 通过调用Vcenter-Api获取Vcenter中服务器信息1. 获取Vmware API帮助文档2. 获取访问凭证3. 获取服务器清单4. 获取服务器更多信息5. 获取虚机更多信息6. 获取磁盘信息7. 获取操作系统相关 1. 获取Vmware API帮助文档 htt…