接口限流

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

为什么要接口限流


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


常见的解决方案


1.计数器法


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

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


2.漏桶算法


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

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


3.令牌桶算法


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


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


目录
相关文章
|
2月前
|
算法 NoSQL Java
服务、服务间接口限流实现
`shigen`是一位坚持更新博客的写手,专注于记录个人成长、分享认知与感动。本文探讨了接口限流的重要性,通过实例分析了在调用第三方API时遇到的“请求过多”问题及其解决方法,包括使用`Thread.sleep()`和`Guava RateLimiter`进行限流控制,以及在分布式环境中利用Redis实现更高效的限流策略。
37 0
服务、服务间接口限流实现
|
Java Spring
springcloud gateway sential 限流 自定义参数限流执行顺序问题
springcloud gateway sential 限流 自定义参数限流执行顺序问题
171 1
|
算法 NoSQL JavaScript
服务限流,我有6种实现方式…
服务限流,我有6种实现方式…
|
缓存 NoSQL 算法
限流实现-专题一
在实际业务中,经常会碰到突发流量的情况。如果公司基础架构做的不好,服务无法自动扩容缩容,在突发高流量情况下,服务会因为压力过大而崩溃。更恐怖的是,服务崩溃如同多米诺骨牌,一个服务出问题,可能影响到整个公司所有组的业务。
|
缓存 算法 网络协议
限流实现2
剩下的几种本来打算能立即写完,没想到一下三个月过去了,很是尴尬。本次主要实现如下两种算法 - 令牌桶算法 - 漏斗算法
|
算法 NoSQL API
限流功能的实现
限流功能的实现
189 0
|
监控 算法 安全
限流
1. 为什么需要限流 2. 如何限流 限流主要就是考虑这两点
257 0
限流
|
Java Maven 数据安全/隐私保护
使用 Sentinel 实现接口限流
使用 Sentinel 实现接口限流
|
算法
​什么是限流,如何限流
​什么是限流,如何限流
281 0
​什么是限流,如何限流
|
Java Maven 数据安全/隐私保护
使用 Sentinel 实现接口限流(上)
在前面一篇文章我已经对 Sentinel 做了一个简单的介绍,相信大家都有一个简单的了解,本次主要是讲述 Sentinel 的使用。在这个过程中我会讲到通过控制台配置流控规则,整合 RestTemplate 进行流控,配合 OpenFeign 进行流控三种 Sentinel 三种使用场景。
486 0
使用 Sentinel 实现接口限流(上)