限流常用的策略及算法

太强了!主流的四种限流策略,都可以通过redis实现 引言 在web开发中功能是基石,除了功能以外运维和防护就是重头菜了。因为在网站运行期间可能会因为突然的访问量导致业务异常、也有可能遭受别人恶意攻击 所以我们的接口需要对流量进行限制。俗称的QPS也是对流量的一种描述 针对限流现在大多应该是令牌桶算法,因为它能保证更多的吞吐量。除了令牌桶算法还有他的前身漏桶算法和简单的计数算法 下面我们来看看这四种算法 当然作为阅读福利,小编精心准备了一套Redis相关学习笔记(包含面试、脑图、手写pdf等)作为福利无条件发送给阅读到本篇文章的Java程序员朋友们,需要的 阅读详情

限流

限流在分布式和微服务系统中非常常用的设计思想,在出现流量洪峰或者恶意攻击时,限流能够保护系统的服务能够正常运行。

 

 

限流策略

   1.拒绝服务:把多出来的请求拒绝掉

   2.服务降级:关闭或把后端做降级处理,释放资源给主流程服务

   3.优先级请求:将目前系统的资源分配给优先级更高的用户,优先处理权限更高的用户请求

   4.延时处理:一般来说会使用缓冲队列来缓冲大量的请求,系统根据自身负载能力异步消费队列中的请求

   5.弹性伸缩:采用自动化运维的方式对相应的服务做自动化伸缩

 

常用的限流算法

   常见的限流算法有:漏桶、令牌桶。计数器也可以用来进行粗暴限流实现。

 

1.漏桶算法:

   漏桶算法的基本思想是:利用一个缓冲区,当有请求进入系统时,无论请求的速率如何,都先在缓存区内保存,然后以固定的流速流出缓冲区进行处理。

   它的主要目的是控制数据进入系统的速率,平滑应对系统的突发流量,为系统提供一个稳定的请求流量。

 

2.令牌桶算法:

 令牌桶算法是一种反向的漏桶算法。在令牌桶算法中,桶中存放的不再是请求,而是令牌。处理程序只有拿到令牌后,才能对请求进行处理。如果没有令牌,那么处理程序要么丢弃请求,要么等待可用的令牌。为了限制流速,该算法在单个时间单位产生一定量的令牌存入桶中。

 

常用实现:

Java版本:google提供的Guava核心库中的RateLimiter类就是基于令牌桶实现的流控

Golang : Golang的golang.org/x/time/rate也是基于令牌桶实现的限流

 

 

3.计数器算法:

   给出一个单位时间,然后使用一个计数器counter统计单位时间内收到的请求数量,当请求数量超过门限时,其余的请求丢弃或者等待。

    这种算法简单粗暴,但是很难控制边界时间请求。

 

 

限流框架

限流框架可以使用阿里开源的Sentinel

Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。目前(2020年)已经支持Java、C++、Go版本。

  

 

高并发策略之限流:计数器、漏桶、令牌桶 三大算法的原理与实战(史上最全) 限流,降级和熔断是应对互联网高并发场景的方案之一,也是尝尝被问道的部分,今天单独讲一下【限流】的算法和实现。 阅读详情

相关推荐

并发限流算法的实践

保护高并发系统的三把利器是缓存、降级、限流。缓存之前讲过了,内存读取,提升相应速率,对高并发请求做暂存缓冲。熔断降级暂时也不做过多讲述,本篇主要讲限流。前面聊过网关流量控制(限流),熔断降级功能。那么限流是如何实现控制的呢?限流分瞬时流量控制和时间窗口流量;被限流的端口仍然可以提交任务,只是任务被阻塞,缓存在内存,会有OOM的风险;是对下游服务的一种保护;限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务或进行流量整形。

qq_25156781的博客 910

限流的4种策略--固定窗口、滑动窗口、漏桶、令牌桶

01 Why 分布式系统中,由于接口API无法控制上游调用方的行为,因此当瞬时请求量突增时,会导致服务器占用过多资源,发生响应速度降低、超时、乃至宕机,甚至引发雪崩造成整个系统不可用。 限流,Rate Limiting,就是对API的请求量进行限制,对于超出限制部分的请求作出快速拒绝、快速失败、丢弃处理,以保证本服务以及下游资源系统的稳定。 哪些原因会带来瞬时请求量突增? 1,热点业务、突发热点数据带来的激增。例如微博热搜的爆点。 2,上游系统的bug导致。 3,恶意的攻击流量。 实现限流的方法很多,..

lzf的博客 4145

Java高并发系统的常用限流策略

Java高并发系统的常用限流策略 在高并发访问时,常会出现服务或接口面对暴涨的请求而不可用的情况,更甚至导致整个系统崩溃.而使用的技术手段之一就是限流,当请求达到一定的并发数或速率,就进行等待,排队,降级,拒绝服务等. 在开发高并发系统时有三把利器用来保护系统:缓存,降级和限流. 限流常见算法 计数器/时间窗口法 最简单也最容易实现的一种,通过在单位时间内设置最大访问数就可以达到限流的目...

嗨,包 624

基于redis实现的四种常见的限流策略

引言 在web开发中功能是基石,除了功能以外运维和防护就是重头菜了。因为在网站运行期间可能会因为突然的访问量导致业务异常、也有可能遭受别人恶意攻击 所以我们的接口需要对流量进行限制。俗称的QPS也是对流量的一种描述 针对限流现在大多应该是令牌桶算法,因为它能保证更多的吞吐量。除了令牌桶算法还有他的前身漏桶算法和简单的计数算法 下面我们来看看这四种算法 固定时间窗口算法 固定时间窗口算法也可以叫做简单计数算法。网上有很多都将计数算法单独抽离出来。但是笔者认为计数算法是一种思想,而固定时间窗口算法是他的一

老男孩的架构路 767

U2Net网络实战:从原理到代码实现(附背景去除应用)

本文深入解析了U2Net网络的原理与代码实现,重点剖析了其独特的嵌套U型结构(RSU模块)和显著图融合机制。通过实战演示,指导读者如何加载预训练模型并应用于精准的图像背景去除任务,为电商、摄影等领域提供高效的自动化抠图解决方案。

nn3456的博客 491

数字IC面试核心:从MUX基础到Glitch-Free时钟切换电路深度剖析

本文深入剖析数字IC设计中的MUX基础原理及其在Glitch-Free时钟切换电路中的应用。从二选一MUX的门级实现到时钟切换中的毛刺问题,详细讲解了同步切换机制和工程优化技巧,帮助工程师掌握高速时钟电路设计的核心要点。

weixin_42629815的博客 328

5种限流算法,7种限流方式,挡住突发流量

限流算法

gb4215287的博客 1498

STM32 ADC+DMA实战:手把手教你驱动XGZP6847A压力传感器(附完整代码)

本文详细介绍了如何使用STM32的ADC和DMA外设驱动XGZP6847A压力传感器,包括硬件连接、ADC配置、DMA高效传输实现以及数据处理与校准方法。通过实战案例和完整代码,帮助开发者快速掌握高精度压力数据采集技术,适用于工业控制和医疗设备等领域。

weixin_42570484的博客 404

基于用户的API限流策略

应用场景 API接口的流量控制策略:缓存、降级、限流。限流可以认为服务降级的一种,限流就是限制系统的输入和输出流量已达到保护系统的目的。限流策略虽然降低了服务接口的访问频率和并发量,却换取服务接口和业务应用系统的高可用。 常用的限流策略: Nginx 限流 按照一定的规则如帐号、IP、系统间调用逻辑等在 Nginx 层面做限流 业务系统限流 客户端限流 服务端限流 数据库限流 常用限流算法 计数器 计数器是最简单粗暴的算法,通过直接统计每个时间的请求数目来判断是否需要拒绝。 比如某个服务

疯一样的女子 1874

海康威视VS互联网大厂:薪资、福利、工作强度全方位对比

本文全面对比了海康威视与互联网大厂在薪资、福利和工作强度等方面的差异。海康威视提供稳定的薪资结构和较低的工作强度,适合追求专业深度的职场人;而互联网大厂则以高薪和快速成长吸引人才,但工作压力较大。文章还分析了职业发展路径和长期价值,帮助求职者做出明智选择。

weixin_29171129的博客 390

Flink项目基础配置指南

在大数据处理领域,Apache Flink凭借强大的实时流处理和批处理能力,成为众多开发者的首选工具。在日常工作中,开发Flink Jar任务是常见需求,但每次都需重复配置日志、梳理pom依赖、设置打包插件等,流程繁琐且易出错。为提升开发效率,减少重复劳动,将这些基础配置进行整理归纳十分必要。本文将围绕Flink项目的本地日志配置、pom依赖及插件配置展开详细介绍,为开发者提供一套可直接复用的基础配置方案,助力Flink项目高效开发。在Flink项目中,日志是了解任务运行状态、排查问题的重要依据。本地日志配

qq_42773076的博客 1212

手撸5种常见限流算法

固定窗口算法实现简单,性能高,但是会有临界突发流量问题,瞬时流量最大可以达到阈值的2倍。为了解决临界突发流量,可以将窗口划分为多个更细粒度的单元,每次窗口向右移动一个单元,于是便有了滑动窗口算法。滑动窗口当流量到达阈值时会瞬间掐断流量,所以导致流量不够平滑。想要达到限流的目的,又不会掐断流量,使得流量更加平滑?可以考虑漏桶算法!需要注意的是,漏桶算法通常配置一个FIFO的队列使用以达到允许限流的作用。由于速率固定,即使在某个时刻下游处理能力过剩,也不能得到很好的利用,这是漏桶算法的一个短板。,,......

AlbenXie的博客 775

Ceres Solver:从入门到使用

Ceres Solver是谷歌开源的C++非线性优化库,能够解决有约束或无约束条件下的非线性最小二乘问题。2010年之后大量的运用在谷歌的产品开发中,尤其在谷歌开源的cartographer中被大量的使用。 ceres可以在Linux,Windows,macOS,Andrioid,IOS系统进行安装使用,详情可查看下方的官网链接。 Ceres Solver 官网:http://ceres-solver.org/

非晚非晚的博客 1万+

Java 限流策略

概要 在大数据量高并发访问时,经常会出现服务或接口面对暴涨的请求而不可用的情况,甚至引发连锁反映导致整个系统崩溃。此时你需要使用的技术手段之一就是限流,当请求达到一定的并发数或速率,就进行等待、排队、降级、拒绝服务等。在限流时,常见的两种算法是漏桶和令牌桶算法。 限流算法 令牌桶(Token Bucket)、漏桶(leaky bucket)和计数器算法是最常用的三种限流的算法。 1. 令牌...

heima201907的博客 360

RK3588 MPP,RGA,DRM,QT之RGA

RK3588多路视频采用RGA来进行混合成一帧

dreamliweiming的博客 4267

神州路由器DHCPv6配置

神州路由器DHCPv6配置.。

weixin_41687096的博客 462

Java限流及常用解决方案

大家好,我是二师兄,今天给大家分享一篇关于Java限流解决方案的文章,文中分享了不少实战相关的经验,值得一读。

程序新视界 1767

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

令牌桶算法限流

限流 限流是对某一时间窗口内的请求数进行限制,保持系统的可用性和稳定性,防止因流量暴增而导致的系统运行缓慢或宕机。常用的限流算法有令牌桶和和漏桶,而Google开源项目Guava中的RateLimiter使用的就是令牌桶控制算法。 在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流 缓存:缓存的目的是提升系统访问速度和增大系统处理容量 降级:降级是当服务器压力剧增的情况下,根据当前...

东境物语 878

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java api限流

我整理的一些关于【Java】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/f2PFnN如何在Java中实现API限流 在现代应用中,API限流是一种常用的防护措施,用于控制系统的访问量,从而保持系统的稳定性。本文将指导你如何实现Java API限流。我们将通过一系列步骤来完...

weixin_37060769的博客 156

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

高并发处理之接口限流

https://blog.youkuaiyun.com/fanrenxiang/article/details/80683378 最近开发的抢购活动上线后发现了两个比较明显的问题,其一:活动一开始,接口访问量剧增;其二:黑名单中增加了一大批黑名单用户(或者说IP),这其中就包含了一些恶意用户或机器人刷接口。 针对一些高并发的接口,限流是处理高并发的几大利剑之一。一方面,限流可以防止接口被刷,造成不必要的服务层压力,另一方面,是为了防止接口被滥用。 限流的方式也蛮多,本篇只讲几种我自己常用的,并且是后端的限流操作。

只为成功找方法 不为失败找借口 507

常用限流算法

摘要:本文对比了四种常用限流算法的特性及应用场景。固定窗口算法实现简单但精度低;滑动窗口能缓解临界突刺;漏桶算法输出绝对平滑但无法处理突发;令牌桶算法兼具平滑与突发处理能力。选择时需考虑业务需求:简单场景用固定窗口,严格限速用漏桶,用户体验优先选令牌桶,高精度要求用滑动窗口。分布式环境需结合Redis等中间件实现,并合理设置阈值和降级策略。

tqs_123456的博客 428

SpringBoot 服务接口限流

在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。限流可以认为服务降级的一种,限流通过限制请求的流量以达到保护系统的目的。一般来说,系统的吞吐量是可以计算出一个阈值的,为了保证系统的稳定运行,一旦达到这个阈值,就需要限制流量并采取一些措施以完成限制流量的目的。比如:延迟处理,拒绝处理,或者部分拒绝处理等等。否则,很容易导致服务器的宕机。...

m0_67402731的博客 1081

[转]服务接口API限流 Rate Limit

一、场景描述 很多做服务接口的人或多或少的遇到这样的场景,由于业务应用系统的负载能力有限,...

186

限流算法之漏桶算法、令牌桶算法

昨天CodeReview的时候看到同时使用RateLimiter这个类用作QPS访问限制.学习一下这个类. RateLimiter是Guava的concurrent包下的一个用于限制访问频率的类. 1.限流 每个API接口都是有访问上限的,当访问频率或者并发量超过其承受范围时候,我们就必须考虑限流来保证接口的可用性或者降级可用性.即接口也需要安装上保险丝,以防止非预期的请求对系统压力过大而引...

skiof007的专栏 3247

php接口限制流量,php如何对Api接口限流

在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流缓存: 缓存的目的是提升系统访问速度和增大系统吞吐量。降级: 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题解决后再打开。限流: 限流的目的是通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理。接口限流的常用算法:0x00 计数器法计数...

weixin_29248611的博客 1424

高并发系统设计--限流

前面学习过的熔断和降级都是通过暂时关闭某些非核心服务或者组件来保护核心系统的可用性。但是并不是所有的场景下都可以使用熔断降级的策略,例如当核心服务产生比较大的影响时,总不能把核心服务进行熔断与降级,些时一般采用限流方案来进行保护。 限流指的是通过限制到达系统的并发请求数量,保证系统能够正常响应部分用户请求,而对于超过限制的流量,则只能通过拒绝服务的方式保证整体系统的可用性。限流策略一般部署在服务的入口层,比如 API 网关中。 现实中可以在多个维度上对到达系统的流量做控制,例如: 你可以对系统每分钟处理多

hnsitsing的博客 194
上一篇: Golang 使用递归实例
下一篇: Go微服务实战学习架构图(推荐)
思维的深度
博客等级 码龄11年 2万+粉丝 391原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值