接口限流

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 防止用户恶意刷新接口, 防止对接口的恶意请求,减少不必要的资源浪费,从而保证服务可用。如果不做限流,任由某个用户以非正常方式高频率访问的话,会直接将网络流量、服务器资源挤占完,从而影响正常对外提供服务,造成服务不可用。

为什么要接口限流


防止用户恶意刷新接口, 防止对接口的恶意请求,减少不必要的资源浪费,从而保证服务可用。如果不做限流,任由某个用户以非正常方式高频率访问的话,会直接将网络流量、服务器资源挤占完,从而影响正常对外提供服务,造成服务不可用。


常见的解决方案


1.计数器法


使用redis或者其他方式存储单位时间内某个接口的或者IP的请求数量,当累加到最大数量时,返回错误,不再处理该请求。

该方案的缺点是,比如需求是5秒内只允许访问10次,那么如果第一秒内访问了10次,那么后面4秒的请求都会失败,全部被拒绝。


2.漏桶算法


漏桶算法是,将用户的请求当做水流,当用户请求进来的时候,相当于将水放到一个漏水的桶内,桶有自己漏水的速度,无论水流的大小,水流过大时,如果桶满了,就会被拒绝,返回错误。如果桶还没满,就放到桶里,等待执行。相当于有个缓冲,无论请求量大小,最后都会按照一定的速率执行。

该方案的缺点是,如果短时间内有大量请求进来,比如秒杀活动什么的,桶直接就满了,大量请求失败


3.令牌桶算法


令牌桶算法是漏桶算法的升级版,相对于漏桶算法而言,漏桶算法后台处理请求的速率是固定的,比如一秒处理十个请求;而令牌桶算法是有一个令牌桶,以一定的速率往桶里放令牌,和滴水一样,当桶满了令牌会被丢弃,只有拿到令牌的请求才会被处理,当桶里没有令牌时,会进行等待,当超过了超时时间还没拿到令牌时,请求会被拒绝。


该方案的优点是,可以应对短时大量请求。假如令牌桶的大小是100,放令牌的速率是1秒5个,前20秒没有请求,21秒来了100个请求,那么这100个请求都会被直接处理。22秒再来100个请求,等待时间是1秒,就只有5个请求会成功了,其余的拿不到令牌等待,再过1秒后,又有5个成功,其余90个被拒绝。


目录
相关文章
|
Prometheus 监控 Cloud Native
手把手教你Prometheus + Granafa实现mysql 性能监测部署
数据库性能监控可以说是十分重要,能否自行搭建环境实现像阿里云或是腾讯云那样直观的展示不同维度数据的功能?答案是肯定的。下面详细说明一下安装部署过程以及过程中出现的问题,希望对你有所帮助!
手把手教你Prometheus + Granafa实现mysql 性能监测部署
|
SQL 关系型数据库 MySQL
一次性导入千万级数据到Mysql(附源码)
MySql数据迁移、导入,在我们日常开发中,可以说是经常碰到。如果数据量比较小,一般都没什么问题,但是如果是涉及到千万级、亿级的数据量大数据量迁移,这里面就涉及到一个问题:如何快速导入千万数据到MySQL。 下面我们通过对比3种方法,来谈谈MySQL怎么高性能插入千万级的数据。
2875 0
|
算法 网络协议 Java
Spring Boot 的接口限流算法
本文介绍了高并发系统中流量控制的重要性及常见的限流算法。首先讲解了简单的计数器法,其通过设置时间窗口内的请求数限制来控制流量,但存在临界问题。接着介绍了滑动窗口算法,通过将时间窗口划分为多个格子,提高了统计精度并缓解了临界问题。随后详细描述了漏桶算法和令牌桶算法,前者以固定速率处理请求,后者允许一定程度的流量突发,更符合实际需求。最后对比了各算法的特点与适用场景,指出选择合适的算法需根据具体情况进行分析。
1049 56
Spring Boot 的接口限流算法
|
存储 监控 Shell
SkyWalking微服务监控部署与优化全攻略
综上所述,虽然SkyWalking的初始部署流程相对复杂,但通过一步步的准备和配置,可以充分发挥其作为可观测平台的强大功能,实现对微服务架构的高效监控和治理。尽管未亲临,心已向往。将一件事做到极致,便是天分的展现。
|
11月前
|
存储 NoSQL Java
Java Stream API:集合操作与并行处理
Stream API 是 Java 8 提供的集合处理工具,通过声明式编程简化数据操作。它支持链式调用、延迟执行和并行处理,能够高效实现过滤、转换、聚合等操作,提升代码可读性和性能。
|
编解码 搜索推荐 前端开发
字节跳动出大招!IconPark图标库,自定义图标,好用到停不下来!
【11月更文挑战第10天】IconPark 是字节跳动推出的一款高质量图标库,提供超过 2400 个图标,涵盖 32 种分类,支持在线编辑颜色、线条粗细等属性,提供 SVG 和 PNG 格式下载,支持 React、Vue3 等组件代码导出,开源免费商用,适用于网页、移动和桌面应用。
1289 4
|
算法 中间件 API
使用漏桶和令牌桶实现API速率限制
本文介绍如何在 Go 语言的 Gin 框架中使用漏桶算法和令牌桶算法实现 API 限流,以保护系统资源,防止过载和恶意攻击,确保服务稳定。通过具体代码示例展示了两种算法的应用方法。
455 2
|
监控 算法 Java
保卫你的API:深入了解接口限流
保卫你的API:深入了解接口限流
1231 0
|
存储 监控 数据库
什么是聚集索引和非聚集索引?
【8月更文挑战第3天】
10309 6