接口限流

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

为什么要接口限流


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


常见的解决方案


1.计数器法


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

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


2.漏桶算法


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

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


3.令牌桶算法


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


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


目录
相关文章
|
Linux Go iOS开发
掌握Go语言:配置环境变量、深入理解GOPATH和GOROOT(1)
掌握Go语言:配置环境变量、深入理解GOPATH和GOROOT(1)
2689 0
|
SQL 关系型数据库 MySQL
一次性导入千万级数据到Mysql(附源码)
MySql数据迁移、导入,在我们日常开发中,可以说是经常碰到。如果数据量比较小,一般都没什么问题,但是如果是涉及到千万级、亿级的数据量大数据量迁移,这里面就涉及到一个问题:如何快速导入千万数据到MySQL。 下面我们通过对比3种方法,来谈谈MySQL怎么高性能插入千万级的数据。
2974 0
|
算法 网络协议 Java
Spring Boot 的接口限流算法
本文介绍了高并发系统中流量控制的重要性及常见的限流算法。首先讲解了简单的计数器法,其通过设置时间窗口内的请求数限制来控制流量,但存在临界问题。接着介绍了滑动窗口算法,通过将时间窗口划分为多个格子,提高了统计精度并缓解了临界问题。随后详细描述了漏桶算法和令牌桶算法,前者以固定速率处理请求,后者允许一定程度的流量突发,更符合实际需求。最后对比了各算法的特点与适用场景,指出选择合适的算法需根据具体情况进行分析。
1185 56
Spring Boot 的接口限流算法
|
存储 安全 数据安全/隐私保护
Token 是什么?全面解析身份认证中的 Token 机制
本文全面解析Token在身份认证中的核心机制,涵盖JWT、Session Token、OAuth等类型,深入讲解其工作原理、安全性策略、生命周期管理及实际应用场景,助力开发者构建安全高效的现代Web应用认证体系。
6479 4
|
SpringCloudAlibaba Cloud Native Docker
SpringCloudAlibaba:4.1云原生网关higress的搭建
SpringCloudAlibaba:4.1云原生网关higress的搭建
1134 1
|
算法 中间件 API
使用漏桶和令牌桶实现API速率限制
本文介绍如何在 Go 语言的 Gin 框架中使用漏桶算法和令牌桶算法实现 API 限流,以保护系统资源,防止过载和恶意攻击,确保服务稳定。通过具体代码示例展示了两种算法的应用方法。
546 2
|
存储 算法 Java
Spring Boot 通用限流方案
Spring Boot 通用限流方案
1288 0
|
XML 安全 Java
【Maven】依赖管理,Maven仓库,Maven核心功能
【Maven】依赖管理,Maven仓库,Maven核心功能
2687 3
|
Java 测试技术 开发者
Java线程池ThreadPoolExcutor源码解读详解09-4种拒绝策略
本文介绍了线程池的四种拒绝策略:AbortPolicy、DiscardPolicy、DiscardOldestPolicy和CallerRunsPolicy,并通过代码示例展示了它们在任务过多时的不同处理方式。AbortPolicy会抛出异常并停止主线程;DiscardPolicy会默默丢弃新任务;DiscardOldestPolicy会抛弃队列中最旧的任务来接纳新任务;而CallerRunsPolicy则是由调用者线程执行被拒绝的任务,以减缓新任务的提交速度。这四种策略适用于不同的场景,开发者可以根据需求选择合适的策略。
2211 5

热门文章

最新文章