前言在一个高并发系统中对流量的把控是非常重要的,当巨大的流量直接请求到我们的服务器上没多久就可能造成接口不可用,不处理的话甚至会造成整个应用不可用。
比如最近就有个这样的需求,我作为客户端要向kafka生产数据,而kafka的消费者则再源源不断的消费数据,并将消费的数据全部请求到web服务器,虽说做了负载(有4台web服务器)但业务数据的量也是巨大的,每秒钟可能有上万条数据产生。如果生产者直接生产数据的话极有可能把web服务器拖垮。
对此就必须要做限流处理,每秒钟生产一定限额的数据到kafka,这样就能极大程度的保证web的正常运转。
其实不管处理何种场景,本质都是降低流量保证应用的高可用。常见算法
对于限流常见有两种算法:
漏桶算法
令牌桶算法
漏桶算法比较简单,就是将流量放入桶中,漏桶同时也按照一定的速率流出,如果流量过快的话就会溢出(漏桶并不会提高流出速率)。溢出的流量则直接丢弃。
如下图所示:
这种做法简单粗暴。
漏桶算法虽说简单,但却不能应对实际场景,比如突然暴增的流量。
这时就需要用到令牌桶算法:
令牌桶会以一个恒定的速率向固定容量大小桶中放入令牌,当有流量来时则取走一个或多个令牌。当桶中没有令牌则将当前请求丢弃或阻塞。
相比之下令牌桶可以应对一定的突发流量.
RateLimiter实现
对于令牌桶的代码实现,可以直接使用Guava包中的RateLimiter。
调用结果如下:
代码可以看出以每秒向桶中放入两个令牌,请求一次消耗一个令牌。所以每秒钟只能发送两个请求。按照图中的时间来看也确实如此(返回值是获取此令牌所消耗的时间,差不多也是每500ms一个)。
使用有几个值得注意的地方:
允许先消费,后付款,意思就是它可以来一个请求的时候一次性取走几个或者是剩下所有的令牌甚至多取,但是后面的请求就得为上一次请求买单,它需要等待桶中的令牌补齐之后才能继续获取令牌。总结
针对于单个应用的限流够用了,如果是分布式环境可以借助Redis来完成。
相关下载 |
TIOBE索引是用于确定编程语言受欢迎程度的指标之一。它没有指出哪种编程语言是最好的,或者哪种编程语言写的最多。相反,它利用在各种引擎和网站(例如Google,Wikipedia,Bin详情>>
Postscript为当前强大的编程语言工具,该编程语言工具如果用汉语翻译来说就是一种脚本处理工具简单说就是页面描述语言工具,多被使用在一些相对设备独立方式中,在这种详情>>
作为全球排名第一的编程语言,本周末Java将迎来25岁生日。 Java起源于1991年的“ Oak”项目,由James Gosling领导。面向对象的Java以其“一次编写,随处详情>>
原标题:最幸福的编程语言:第一名竟然是它!PHP受尽吐槽~ 来自:Quant最爱 IT界有很好梗,比如: 今天,我们通过Github和来自开发者调查的数据给大家揭秘,哪门详情>>
原标题:TIOBE 12 月编程语言排行榜:争夺年度编程语言,Java、C、Python、C# 即将开战! 年末将至,谁将摘得年度编程语言称号? 整理 | 屠敏 须臾之间,2019 详情>>
原标题:TIOBE 2 月编程语言排行榜:Python 逼近 C,Groovy 重回 TOP20 作者 | 唐小引 出品 | CSDN(ID:CSDNnews) 新月伊始,一月一更的 TIOBE 编程语言社区发布了最新详情>>
原标题:PYPL 二月榜单发布:最受欢迎的编程语言、IDE 和数据库都是哪些 PYPL(PopularitY of Programming Language,编程语言流行指数) 二月榜单已发布,目前包含四个详情>>
原标题:最强编程语言 Java 和最受欢迎之 Python 的巅峰对决 作为程序员们的看家利器之编程语言,倘若技术开 详情>>
原标题:TIOBE 2 月编程语言排行榜:Python 逼近 C,Groovy 重回 TOP20 关注我哟 摘要 TIOBE 于近日公 详情>>
游戏类型:行业软件文件大小:5.67MB软件语言:简体中文运营:软件授权:免费版应用平台:WinAll安全认证:aardio编程语言最新官方版下载版本:v16.11 【软件介绍】 快手AAu详情>>
今天小编为大家带来的是电脑编程软件合集,感兴趣的用户们不妨来手机56这里看看吧!TOP1:eclipse64位中文版(编程软件类)详情>>
加斯帕罗夫是著名的俄罗斯国际象棋选手,曾23次获得世界排名第一,是位国际象棋大师。而在《编程模拟器》的第34关,我们就要制作一款媲美加斯帕罗夫的国际象棋机器人,下面就随着小编一起看看这一关的金牌该怎么详情>>
在《编程模拟器(whileTrue:learn()())》中,第29关过境管制系统也比较简单,我们只需要用负载均衡器实行4路并联,然后用“尺度不变特征变换”来进行分线详情>>
在《编程模拟器(Newtechnologiesintoymanufacturing)》中,第25关Industrialespionage需要我们进行双色的筛选,但详情>>
在《编程模拟器(Newtechnologiesintoymanufacturing)》第24关服装店的销售预估中,我们要将三色进行快速排序,此关卡只有所有奖牌的时间详情>>
导 读 在《杀戮尖塔》中,重编程和《三国杀》诸葛...很好用的滤牌辅助卡,有效清除基础牌,状态牌,以及诅咒...可以不断通过尝试改变世界线,在sl中找到一条通关的... 详情>>
原标题:《杀戮尖塔》机器人重编程详细介绍重编程怎么样在《杀戮尖塔》中,重编程和《三国杀》诸葛亮的技能观星一样,都可以检索抽牌堆的牌,然后排序。不过这张牌是为了下回详情>>
提到麻省理工学院,这所大学可谓是对VRAR技术充满着兴趣。从之前87君报道过的无人机VR训练系统到还原印加历史遗迹,MIT一直未曾停止利用VRAR探详情>>
我的世界编程一小时网页游戏详情>>
DOM是DocumentObjectModel的缩写,中文名称是文档对象模型。DOM是处理HTML页面的标准编程接口,DOM可被JavaScript用来读取、改变HTML的内容和结构。前端三大件指H详情>>
全栈工程师是掌握多种技能的程序员,一般我们把前后台工程师结合起来就是我们所谓的全栈工程师,全栈工程师可以一个人完成一个网站的完整开发过程。目前全栈工程师后台编程语言最多是PHP开发,PHP是专注we详情>>
叶柖对于《70亿人》的评测70亿人是个编程解谜游戏,在游戏中你会用到各种编程语句块去解决问题。游戏界面看详情>>
为了提高可移植性,Java最初的设想是依赖于软件解释器。这个解释器的指令集是被称为Java字节码,这与RISC-V指令集有很大的不同,为了使性能接近于等效的C程序,Java系统现在通常将Java字节详情>>
【流水】论如何用编程语言迫害凌渡详情>>
如今国内实用的计算机编程语言有很多,但是应用最广,学习及使用人数最多的就是JavaEE编程语言,如今参加JavaEE培训的人也在不断的增加。本篇文章扣丁学堂小编就和读者们一块来看一下计算机编程语言有详情>>
美国当地时间8月10日,RedMonk宣布推出2018年6月(Q3季度)RedMonk编程语言排名,下面让我们看看这份姗姗来迟的编程语言报告带来了哪些消息。开始之前,我们先来了解一下关详情>>
对于熟悉程序员的人来说,编程语言非常之多,那么学习哪个编程语言好呢?很多人都是根据兴趣去选择的,比如说自己对大数据感兴趣,那么会更多的选择Python,如果对软件开发感兴趣更多的选择Java等等。而详情>>
2018年8月全球编程语言的主题:Python首次接近前三,有望挑战C++的位置。编程语言Python非常接近TIOBE索引的前3位。如果Python超过C++并成为3号,那么对于Guidov详情>>
IEEESpectrum发布了第五年的编程语言年度排行榜。为对排行榜中的编程语言进行排名,作者所在团队所使用的评价方法综合了来自多个来源的指标。由于认识到不同的程序员有不同的需求和兴趣领域,我们并详情>>
陈彧卓在成都市青羊区实验中学附属小学读四年级,喜欢读《哈利波特》的他学习编程猫已经两年了。至于为什么学习编程猫,他这样告诉记者,“很早以前,我学详情>>
开发者盛宴来袭!7月28日51CTO首届开发者大赛决赛带来技术创新分享您应该使用像map、filter和reduce这样的函数,而不是编写for或while循环。这是个推荐做法,因为:循环使产生代码详情>>
以809H编程器为例,详细地讲解了笔记本IT8585EC芯片的刷写过程,包括三步:硬件接线,软件设置(IT8XXX系列均可用),刷写流程。第一步:硬件接线(以华硕X555LPB为例)找到主板的详情>>
定义Redis是一个使用ANSIC编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库Redis可以通过一些键值类型来存储数据。键值类型:String字符类型map散列类型list详情>>
小编为您搜罗的答案: 明白这一点能够让圈外人了解软件公司的运作,尤其是在它们变得如此强大又赚钱,制造的产品和服务进入我们生活各个角落的今天。如果你想知道为什么Facebook的外观和工作方式是现详情>>
这个问题很简单,但回答起来可一点也不简单。不妨先说说为什么人们想知道答案。通常问哪种语言最流行,是因为想学习有职业前景的编程语言,即便是已经拥有娴熟技能的程序员。1什么决定流行指数?那么,哪种语言最详情>>
小编为您搜罗的答案:这个你可以在淘宝上看看,很便宜的,很多的网友都在玩王f牌a对决啦,它是完全免费的游戏,里面有很多的明星乱斗,每个英雄都拥有自己的角色定位。如果你喜欢使用近战型肉盾英雄,那么你可以将详情>>
小编为您搜罗的答案:unity3d无论在那个平台它的制作流程、方法都是一样的,只是用的素材有所不同,这个课程我现在正在学习,非常不错。值得一看。详情>>
我们知道现在已经有一个中文界面编程语言,易语言,编程的语法全部是用中文来表达,但是现在推广程度及份额不敢恭维。那我们看看有哪些原因。1.现在市面上主流及成型的模块全部是英文写的,使用起来比较方便,交详情>>
网易日前宣布获得美国CodeCombat在中国区公立学校市场和在线个人用户市场的独家代理权,并以《极客战记》的中文... 详情>>