阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

限流措施

457次阅读
没有评论

共计 2512 个字符,预计需要花费 7 分钟才能阅读完成。

1、为什么要限流

一般而言,正常的流量越多越好,比如用户快速增长、热点事件带来的蜂拥的人流。但在实际的网络流量中,除正常的流量外,还有很多非正常的流量,比如网络攻击、恶意爬虫。所以在高并发的应用中,需要通过限流来保障服务对所有用户的可用性。限流和缓存、降级一样,也是保护高并发系统的利器。

2、常见的限流措施

高并发系统常采用以下限流措施:

  • 限制总并发数。如,数据库连接池,线程池

  • 限制瞬时并发数。如,Nginx 的 limit_conn 模块可以限制瞬时并发连接数

  • 限制时间窗口内的平均速率。如,Nginx 的 limit_req 模块

  • 限制消息中间件的消费速率

  • 限制远程接口的调用速率

  • 限制每秒的平均速率

  • 对线程池进行隔离。如果超过线程池的负载,则进行熔断

  • 通过 Tomcat 容器限制线程数来控制并发

一般限流都在网关层实现,比如使用 Nginx、Zuul、Spring Cloud Gateway、Openresty、Kong 等。

3、限流算法

3.1、计算器算法

算法原理:从第一个请求进来开始计时,在接下来时间内 (如 1s),每来一个请求就把计数加 1;如果累加的数字达到了设定的值,则后续的请求就会被全部拒绝;等单位时间结束后把计数恢复为 0,重新开始计数。

3.2、漏桶算法

算法原理: 把请求先放入漏桶里等待,然后漏桶以一定的速度处理进入漏桶中的请求;如果请求的进入速度过大,则导致漏桶装不下请求而拒绝后续的请求。

3.3、令牌桶算法

令牌桶算法和现在各大机构使用的叫号机很类似:当请求到达时,先去令牌桶中取一个令牌,然后等响应。

4、用 Spring Cloud Gateway 内置的限流工厂实现限流

4.1、添加依赖

Spring Cloud Gateway 内置了限流工厂 ”RequestRateLimiterGatewayFilterFactory”,它底层是使用 Redis 的 Lua 脚本实现的,所以在添加好 Spring Cloud Gateway 依赖后还需要添加 Redis 依赖。

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>

4.2、修改启动项,添加 IP 地址限流的 Bean

@SpringBootApplication public class GatewayEurekaApplication {public static void main(String[] args) {SpringApplication.run(GatewayEurekaApplication.class, args); } @Bean public KeyResolver ipKeyResolver(){// 根据 ip 地址限流 return exchange -> Mono.just(exchange.getRequest().getRemoteAddress().getHostName()); } }

4.3、编写配置文件

spring.application.name=gateway-eureka
server.port=50024
#注册中心地址
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=true
eureka.client.service-url.defaultZone=http://eureka01:50025/eureka/,http://eureka02:50026//eureka/
#Redis 数据库索引 (默认为 0)
spring.redis.database=0
#redis 服务器 ip 地址
spring.redis.host=192.168.0.201
spring.redis.port=6379
#Redis 服务器的连接密码 (默认为空)
#id: 自定义路由 ID
spring.cloud.gateway.routes[0].id=ip_route1
#uri: 目标服务地址
spring.cloud.gateway.routes[0].uri=lb://OPEN-FEIGN
#predicates: 路由条件。Predicate 根据输入参数返回一个布尔值。其包含多种默认方法来将 Predicate 组合成复杂的路由逻辑
spring.cloud.gateway.routes[0].predicates[0]=Path=/hello
# 限流过滤器使用 gateway 内置令牌算法
spring.cloud.gateway.routes[0].filters[0].name=RequestRateLimiter
#令牌补充的频率,每次就一个
spring.cloud.gateway.routes[0].filters[0].args.redis-rate-limiter.replenishRate=1
#令牌桶的最大容量, 允许在一秒钟内完成的最大请求数
spring.cloud.gateway.routes[0].filters[0].args.redis-rate-limiter.burstCapacity=2
#用于限流的键的解析器的 Bean 对象的名字。它使用 SpEL 表达式根据 #{@beanName} 从 Spring 容器中获取 Bean 对象。在 yml 配置文件中需要用双引号包裹。spring.cloud.gateway.routes[0].filters[0].args.key-resolver=#{@ipKeyResolver}

4.4、测试

步骤:

1、启动服务中心

2、启动服务提供者

3、启动服务消费者

4、启动网关工程

5、访问:http://localhost:50024/hello

当快速发送请求时,会进行限流服务不可用

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-06-06发表,共计2512字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7822018
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

  4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

  颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...