Spring Cloud Gateway⑤令牌桶算法
目录
- 背景
- 官网对Spring Cloud Gateway的介绍
- maven依赖
- 核心依赖
- Redis依赖
- yml配置项
- 令牌桶算法核心参数解析
- 源码分析
背景
- Spring Cloud Gateway①入门以及自定义过滤器开发
- Spring Cloud Gateway②聚合Swagger
- Spring Cloud Gateway③编码实现动态增加、修改、删除路由
- Spring Cloud Gateway④自定义限流控制策略
- Spring Cloud Gateway⑤令牌桶算法
官网对Spring Cloud Gateway的介绍
Spring Cloud Gateway
maven依赖
核心依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>
Redis依赖
Spring Cloud Gateway默认限流算法采用的是令牌桶算法,令牌桶算法是基于Redis实现的,因此需要添加如下依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis-reactive</artifactId></dependency>
yml配置项
spring:cloud:gateway:routes:# id可以随便取- id: requestratelimiter_route# 目标地址,通过是挂到gateway上的微服务APIuri: https://example.org# 必须指定filter才会开启限流,不指定相当于无限制filters:- name: RequestRateLimiterargs:# 允许用户每秒执行多少请求,而不丢弃任何请求。这是令牌桶的填充速率redis-rate-limiter.replenishRate: 1000# 允许用户在一秒钟内执行的最大请求数。这是令牌桶可以保存的令牌数。将此值设置为零将阻止所有请求。redis-rate-limiter.burstCapacity: 1000# 是每个请求消耗多少个令牌,默认是1redis-rate-limiter.requestedTokens: 1
令牌桶算法核心参数解析
参数 | 说明 |
---|---|
replenishRate | 每秒生产的令牌数量 |
burstCapacity | 令牌桶的最大容量 |
requestedTokens | 每个请求消耗的令牌数量 |
这是令牌桶算法的核心参数,Spring Cloud Gateway中requestedTokens参数是写死为1,所以只对外开放另外2个参数的配置。requestedTokens=1代表每个请求消耗1个令牌。replenishRate是每秒生产的令牌数量,可以理解为每秒允许的请求数。如果每秒实际的请求数大于replenishRate,那么多出来请求就会消耗burstCapacity里面的令牌,当burstCapacity令牌数消耗完之后,就会拒绝请求,返回429。
稳定速率是通过在replenishRate(补充令牌速度) 和 burstCapacity(令牌桶容量)中设置相同的值来实现的。可通过设置burstCapacity高于replenishRate来允许临时突发流浪。在这种情况下,限流器需要在两次突发之间留出一段时间(根据replenishRate),因为连续两次突发将导致请求丢失 (HTTP 429 - Too Many Requests)
源码分析
- 令牌桶算法限速的类是RedisRateLimiter,isAllowed方法决定是否允许请求
- RequestRateLimiterGatewayFilterFactory
- 令牌桶算法是通过执行Redis的Lua脚本实现的,脚本放的位置在:
spring-cloud-gateway-core-2.1.2.RELEASE.jar/META-INF/request_rate_limiter.lua
Spring Cloud Gateway⑤令牌桶算法相关推荐
- 【229期】Spring Boot 使用令牌桶算法+拦截器+自定义注解+自定义异常实现简单的限流...
点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每天 08:15 更新文章,每天进步一点点... ...
- 限流10万QPS、跨域、过滤器、令牌桶算法-网关Gateway内容都在这儿
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 作者:雄 ...
- 实战 Spring Cloud Gateway 之限流篇
来源:https://www.aneasystone.com/archives/2020/08/spring-cloud-gateway-current-limiting.html 话说在 Sprin ...
- 微服务网关Zuul迁移到Spring Cloud Gateway
https://juejin.im/post/5ba8daa56fb9a05cfe486ebf 背景 在之前的文章中,我们介绍过微服务网关Spring Cloud Netflix Zuul,前段时间有 ...
- Spring Cloud Gateway(限流)
在高并发的应用中,限流是一个绕不开的话题.限流可以保障我们的 API 服务对所有用户的可用性,也可以防止网络攻击. 一般开发高并发系统常见的限流有:限制总并发数(比如数据库连接池.线程池).限制瞬时并 ...
- Spring Cloud Gateway介绍(一)
特性 基于 Java 8 编码 基于 Spring Framework 5 + Project Reactor + Spring Boot 2.0 构建 支持动态路由,能够匹配任何请求属性上的路由 支 ...
- 网关限流(令牌桶算法)
一.需求: 每个ip地址1秒内只能发送1次请求,多出来的请求返回429错误. 二.引入依赖 spring cloud gateway 默认使用redis的RateLimter限流算法来实现.所以我们要 ...
- spring cloud gateway 网关_微服务网关Spring Cloud Gateway全搞定
一.微服务网关Spring Cloud Gateway 1.1 导引 文中内容包含:微服务网关限流10万QPS.跨域.过滤器.令牌桶算法. 在构建微服务系统中,必不可少的技术就是网关了,从早期的Zuu ...
- spring cloud gateway 之限流篇
转载请标明出处: https://www.fangzhipeng.com 本文出自方志朋的博客 在高并发的系统中,往往需要在系统中做限流,一方面是为了防止大量的请求使服务器过载,导致服务不可用,另一方 ...
- ws配置 zuul_微服务网关 Spring Cloud Gateway
1. 为什么是Spring Cloud Gateway 一句话,Spring Cloud已经放弃Netflix Zuul了.现在Spring Cloud中引用的还是Zuul 1.x版本,而这个版本是 ...
最新文章
- java控制台两个字符串_java控制台输入字符串
- Python函数参数的五种类型
- 李飞飞点赞的NeurIPS新赛道,刚刚公布了第一批数据集benchmark入围名单
- html 自定义标签使用实现方法
- 面对大规模 K8s 集群,如何先于用户发现问题?
- vista 中php4, php5 共存
- linux与windows编码转化
- 21-win10下ElasticSearch.6.1.0安装SQL插件
- STM32工作笔记0042---认识三极管的集电极,发射极,基极
- JVM启动参数手册——JVM之八
- DependsOn注解
- yolov3gpu配置_YOLO3-WIN10-GPU版配置详细教程
- EXCEL常用函数的操作及使用技巧(上篇)
- SequelizeAccessDeniedError的原因和解决方式
- 博弈 - SG函数和SG定理
- access 命令不符 等级考试_全国计算机等级考试二级笔试样卷Access数据库程序设计...
- PowerBI 实现中国式报表
- oracle部门总工资的函数,Oracle分析函数
- java 语音包_有人开发了马保国语音包
- 质量小议19 -- 熵