Resilience中的RateLimiter

news2024/11/30 8:41:38

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-period
        timeout-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.coloradmin.cn/o/1602905.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多轴机械臂/正逆解/轨迹规划/机器人运动学/Matlab/DH法 学习记录03——机械臂运动学逆解

系列文章目录 本科毕设正在做多轴机械臂相关的内容&#xff0c;这里是一个学习机械臂运动学课程的相关记录。 如有任何问题&#xff0c;可发邮件至layraliufoxmail.com问询。 1. 数学基础 2. 机械臂几何法与DH表示法 3. 机械臂运动学逆解 文章目录 系列文章目录一、引言1.手臂…

ESP8266闪存文件系统(SPIFFS)

开发环境&#xff1a; 1、安装ESP8266的开发环境&#xff0c;如Arduino IDE。 2、下载并安装ESP8266的相关开发库和工具。 我们使用的是Arduino IDE。 基本介绍&#xff1a; 每一个ESP8266都配有一个闪存&#xff0c;这个闪存很像是一个小硬盘&#xff0c;我们上传的文件就被…

论文笔记:Does Writing with Language Models Reduce Content Diversity?

iclr 2024 reviewer评分 566 1 intro 大模型正在迅速改变人们创造内容的方式 虽然基于LLM的写作助手有可能提高写作质量并增加作者的生产力&#xff0c;但它们也引入了算法单一文化——>论文旨在评估与LLM一起写作是否无意中降低了内容的多样性论文设计了一个控制实验&…

【论文阅读】RS-Mamba for Large Remote Sensing Image Dense Prediction(附Code)

论文作者提出了RS-Mamba(RSM)用于高分辨率遥感图像遥感的密集预测任务。RSM设计用于模拟具有线性复杂性的遥感图像的全局特征&#xff0c;使其能够有效地处理大型VHR图像。它采用全向选择性扫描模块&#xff0c;从多个方向对图像进行全局建模&#xff0c;从多个方向捕捉大的空间…

Java -- (part12)

一.权限修饰符 1.属性:用private ->封装思想 2.成员方法public ->便于调用 3.构造public ->便于new对象 二.final关键字 1.修饰类 a.格式 -- public final class 类名 b.特点:不能被继承 2.修饰方法 a.格式:修饰符 final 返回值类型 方法名(形参){} b.特点…

推荐两个植物miRNA数据库(miRbase和PNRD)

前记 植物miRNA数据库是储存和整理植物微小RNA&#xff08;miRNA&#xff09;相关信息的数据库。miRNA是一类长度为21-24个核苷酸的非编码小分子RNA&#xff0c;能够通过与靶基因的mRNA结合&#xff0c;调控基因表达。植物miRNA数据库通常包含以下内容&#xff1a; miRNA序列信…

ROS2 仿真学习02 Gazebo导入官方示例模型

1.下载模型 git clone https://gitee.com/bingda-robot/gazebo_models.git将gazebo_models拖到到.gazebo当中&#xff08;如果没看到.gazebo文件请按住CTRLh&#xff09; 2.添加模型到gazebo的Insert 这就将官方示例的模型都导入到Gazebo 了 随便试试一个模型

每日OJ题_完全背包②_力扣322. 零钱兑换

目录 力扣322. 零钱兑换 问题解析 解析代码 优化代码&#xff08;滚动数组&#xff09; 力扣322. 零钱兑换 322. 零钱兑换 难度 中等 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以…

密码学 | 椭圆曲线密码学 ECC 入门(一)

目录 正文 1 公共密钥密码学的兴起 2 玩具版 RSA 算法 2.1 RSA 基本原理 2.2 RSA 举例说明 1 加密 2 解密 3 不是完美的陷门函数 ⚠️ 原文地址&#xff1a;A (Relatively Easy To Understand) Primer on Elliptic Curve Cryptography ⚠️ 写在前面&#xff1…

【测试开发学习历程】python常用的模块(下)

目录 8、MySQL数据库的操作-pymysql 8.1 连接并操作数据库 9、ini文件的操作-configparser 9.1 模块-configparser 9.2 读取ini文件中的内容 9.3 获取指定建的值 10 json文件操作-json 10.1 json文件的格式或者json数据的格式 10.2 json.load/json.loads 10.3 json.du…

OpenHarmony南向开发案例【智慧中控面板(基于 Bearpi-Micro)】

1 开发环境搭建 【从0开始搭建开发环境】【快速搭建开发环境】 参考鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或复制转到。 【注意】&#xff1a;快速上手教程第六步出拉取代码时需要修改代码仓库地址 在MobaXterm中输入…

ES-全文搜索

模糊查询&#xff1a; 写数据通过id路由到master分片 查询数据到一个节点&#xff0c;该节点会作为一个调度节点判断负载等情况将请求转发到真正节点&#xff08;一般し轮询&#xff09;

【学习笔记十九】EWM Yard Management概述及后台配置

一、EWM Yard堆场管理业务概述 1.Yard Management基本概念 YARD管理针对的是库房以外的区域,可以理解为入大门开始到库门之前的这部分的区域 堆场结构 像在仓库中一样,将相应仓位映射为堆场仓位,可将其分组到堆场分区。场地中可能具有以下结构: 停车位(Park):在堆场中存…

linux(ub)-redis环境部署

1.下载redis包 wget http://download.redis.io/releases/redis-7.0.5.tar.gz 2.解压缩&#xff1a; tar -zxvf redis-7.0.5.tar.gz 3.安装gcc&#xff1a;sudo apt-get install gcc 4. 编译&#xff1a;cd redis-7.0.5 make make make install 5. cd /usr/local/bin/ 6. mkdir …

JAVA基础08- 继承,重写,super以及this

目录 继承&#xff08;extends&#xff09; 定义 说明 作用 方法的重写 定义 重写关键点 方法重写与重载的区别 练习 练习1&#xff08;方法继承与重写的简单练习&#xff09; 练习2&#xff08;方法继承与重写的进阶练习&#xff09; This的使用 定义 作用以及注…

动态代理,XML,Dom4j

文章目录 动态代理概述特点代码实现实现的关键步骤优点 XML概述作用编写第一个XML文件组成声明元素(标签、标记)属性注释转义字符[实体字符字符区(了解) 约束DTD约束Schema约束名称空间 Dom4jXML解析解析方式和解析器解析方式解析器Snipaste_2024-04-17_21-22-44.png<br /&g…

企业linux-堡垒机与跳板机测试案例-6140字详谈

在开始今天内容前&#xff0c;小编先把专栏前面学的Linux命令&#xff08;部分&#xff09;做了思维导图帮助各位平时的学习&#xff1a; 场景&#xff1a; 运维人员管理三台机器&#xff0c;通过远程连接工具连接上三台机器&#xff0c;也知道这三台机器root密码&#xff0c…

Xshell无法输入命令输入命令卡顿

Xshell是一款功能强大的终端模拟软件&#xff0c;可以让用户通过SSH、Telnet、Rlogin、SFTP等协议远程连接到Linux、Unix、Windows等服务器。然而&#xff0c;在使用Xshell的过程中&#xff0c;我们可能会遇到一些问题。比如输入不了命令&#xff0c;或者输入命令很卡。这些问题…

C++笔记:异常

文章目录 C 运行时错误处理机制及其不足之处C 异常概念异常的使用异常的抛出和匹配原则在函数调用链中异常栈展开匹配原则异常的重新抛出举例演示说明例子一&#xff1a;串联举例演示大部分原则例子二&#xff1a;模拟服务器开发中常用的异常继承体系例子三&#xff1a;异常的重…

千锤百炼之每日算法(一)

目录 题外话 正题 第一题 第一题思路 第一题代码详解 第二题 第二题思路 动态规划 解法一 解法一代码详解 解法二 第三题 第三题思路 第三题代码详解 小结 题外话 从今天开始,每天都会更新算法题,一天就三道题 大家最好采用码形结合的方式,也就是代码和图形结合…