当前位置:首页 > 科技  > 软件

五分钟技术趣谈 | 业务系统常用限流算法浅析

来源: 责编: 时间:2023-09-18 21:40:32 431观看
导读Part 01什么是限流? 业务系统限流是指系统在面临高并发或者大流量请求的情况下,限制新的请求对系统的访问,从而保证系统的稳定性和安全性。Part 02为什么要限流? 系统资源和处理能力都是有限的,如果一个系统不限制流量,比

图片yAl28资讯网——每日最新资讯28at.com

Part 05

滑动窗口算法 

为了解决固定窗口算法中的临界问题,让流量限制更加平滑,产生了滑动窗口算法。该算法将固定窗口中分割出多个小窗口,分别记录每个小窗口内的访问次数,然后根据时间将窗口往前滑动并删除过期的小窗口。yAl28资讯网——每日最新资讯28at.com

图片yAl28资讯网——每日最新资讯28at.com

假设窗口时间还是1分钟,滑动窗口算法把它划分为6个小周期,每个小周期是10秒,对应滑动窗口被划分为6个小格子。每隔10秒时间窗口就会往右滑动一格,每个小窗口都有独立的计数器,如果请求是43秒到达的,40秒到50秒小窗口对应的计数器就会加1。yAl28资讯网——每日最新资讯28at.com

我们看下滑动窗口是如何解决临界问题的,假设1分钟内的限流阀值还是10,50秒到60秒内(比如58秒的时候)来了10个请求,落在绿色格子里。时间过了60秒这个点之后又来10个请求,落在红色格子里。滑动窗口过了60秒这个点后会右移一个小格,当前的窗口时间段是10秒到70秒,这个区域的请求已经超过限定的10了,所以红色格子的请求都会被拒绝。yAl28资讯网——每日最新资讯28at.com

滑动窗口算法虽然解决了临界问题,但是一旦到达限流阈值后,请求都会被直接拒绝。在实际应用中我们要的限流效果不是把流量一下子掐断,而是让流量平滑地进入系统当中。yAl28资讯网——每日最新资讯28at.com

Part 06

漏桶算法 

如何更加平滑的限流,我们来看看漏桶算法。漏桶算法的限流原理可以认为就是进水漏水的过程。请求像水一样以任意速率注入漏桶,而漏桶会按照固定的速率将水漏掉;当进水速度超过漏水速度时,漏桶会装满,此后进入的水会溢出,也就是请求被丢弃。yAl28资讯网——每日最新资讯28at.com

图片yAl28资讯网——每日最新资讯28at.com

漏桶算法主要目的是将网络中的突发流量整合成平滑稳定的流量,不过由于漏桶对流量的控制过于严格,导致部分场景下不能充分利用系统资源。因为漏桶的漏水速率是固定的,即使在某一时刻下游系统处理能力富余,漏桶也不会允许突发流量通过。流量突发时我们希望系统在稳定的同时,能尽可能快的处理用户请求,接下来介绍的令牌桶算法能够在一定程度上解决流量突发的问题。yAl28资讯网——每日最新资讯28at.com

Part 07

令牌桶算法 

令牌桶算法是对漏桶算法的一种改进,除了能够限流外,还允许一定程度的流量突发。其原理是设置一个令牌桶,以恒定速率向令牌桶放入令牌,请求到达时尝试从令牌桶中拿令牌,只有拿到令牌才能够放行,否则请求将会被拒绝。yAl28资讯网——每日最新资讯28at.com

令牌桶具有以下特点:yAl28资讯网——每日最新资讯28at.com

  • 根据限流大小定速往令牌桶里放令牌。
  • 如果令牌数量超过令牌桶容量的限制就丢弃令牌。
  • 每一个请求首先去令牌桶拿令牌,拿到令牌就处理请求,拿不到令牌就直接拒绝。

图片yAl28资讯网——每日最新资讯28at.com

Part 08

 小结  

最后我们对上述四种限流算法进行一下简单的总结。yAl28资讯网——每日最新资讯28at.com

固定窗口算法实现简单,但是流量曲线不够平滑有突刺现象,在窗口切换时可能会产生两倍阈值流量的临界问题。滑动窗口算法作为固定窗口算法的一种改进,有效解决了窗口切换时的临界问题。阿里开源的流量控制框架Sentinel就是基于滑动窗口实现的。yAl28资讯网——每日最新资讯28at.com

漏桶算法能够对流量起到平滑整流的作用,让随机不确定的流量以固定的速率流出,但是不能解决流量突发问题。令牌桶算法能够在限制数据的平均传输速率的同时还允许某种程度的突发传输。Guava的RateLimiter限流组件,就是基于令牌桶算法实现的。yAl28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-10423-0.html五分钟技术趣谈 | 业务系统常用限流算法浅析

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: T·Club技术开放日杭州站精彩回顾:音视频技术创新探索与应用实践 T·Club

下一篇: Python中30个常见的内置函数使用讲解(一)

标签:
  • 热门焦点
  • 卢伟冰长文解析K60至尊版 对Redmi有着里程碑式的意义

    在今天的Redmi后性能时代战略发布会结束之后,Redmi总经理卢伟冰又带来了一篇长文,详解了为什么 Redmi 要开启后性能时代?为什么选择和 MediaTek、Pixelworks 深度合作?以及后性
  • 2023 年的 Node.js 生态系统

    随着技术的不断演进和创新,Node.js 在 2023 年达到了一个新的高度。Node.js 拥有一个庞大的生态系统,可以帮助开发人员更快地实现复杂的应用。本文就来看看 Node.js 最新的生
  • 三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • 虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 2023年,我眼中的字节跳动

    此时此刻(2023年7月),字节跳动从未上市,也从未公布过任何官方的上市计划;但是这并不妨碍它成为中国最受关注的互联网公司之一。从2016-17年的抖音强势崛起,到2018年的“头腾
  • 中国家电海外掘金正当时|出海专题

    作者|吴南南编辑|胡展嘉运营|陈佳慧出品|零态LT(ID:LingTai_LT)2023年,出海市场战况空前,中国创业者在海外纷纷摩拳擦掌,以期能够把中国的商业模式、创业理念、战略打法输出海外,他们依
  • 机构称Q2国内智能手机销量同比下滑4% vivo份额重回第1

    7月29日消息,根据市场调查机构Counterpoint Research公布的最新报告,2023年第2季度中国智能手机销量同比下降4%,创新自2014年以来第2季度销量新低。报
  • iQOO Neo8 Pro即将开售:到手价3099元起 安卓性能最强旗舰

    5月23日,iQOO如期举行了新品发布会,全新的iQOO Neo8系列也正式与大家见面,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更
  • Windows 11发布,微软一改往常对老机型开放的态度

    距离 Windows 11 发布已经过去一周,在过去一周里,很多数码爱好者围绕其对 Android 应用的支持、对老机型的升级问题展开了激烈讨论。与以往不同的是,在这次大
Top