大型网站限流算法的实现和改造

news/2024/5/9 19:56:54/文章来源:https://blog.csdn.net/weixin_33812433/article/details/92717416

最近写了一个限流的插件,所以避免不了的接触到了一些限流算法。本篇文章就来分析一下这几种常见的限流算法

分析之前

  1. 依我个人的理解来说限流的话应该灵活到可以针对每一个接口来做。比如说一个类里面有5个接口,那么我的限流插件就应该能针对每一个接口就行不同的限流方案。所以呢,既然针对的每个接口所以就需要一个可以唯一标示这个接口的key(我取的是类名+方法名+入参)。
  2. 分布式限流强烈推荐使用redis+lua或者nginx+lua来实现。
  3. 这里用2个限流条件来做示例讲一下常见的限流算法:
  4. 接口1它10秒钟最大允许访问100次
  5. 接口2它10秒钟最大允许每个人访问100次。

计数器算法

这个算法可以说是限流算法中最简单的一种算法了。

核心思想

计数器算法的意思呢就是当接口在一个时间单位中被访问时,我就记下来访问次数,直到它访问的次数到达上限。

涉及变量
  1. 接口(key)
  2. 时间单位(expire)
  3. 允许访问多少次(limit)
  4. 访问次数(value)
    条件一

    当一个请求过来时,我们就会得到这个key。

    if(存在key){
    value++;
    if(value>=limit){
    不能访问
    }
    }else{
    添加key,value为1
    设置key过期时间为expire
    }
    条件二

    既然条件一已经实现了,那条件二会复杂么 ?<br>

相比于条件一来说就是同一个key对应了多个用户。那么我们只需要把key加上用户的信息就可以了。比如说 key_用户1、key_用户2。

漏桶算法

核心思想

漏桶算法的意思呢就是一个接口在一个时间单位中允许被访问次数是动态变化的(假如一分钟允许访问60次,那么从开始计时时不管有没有被访问第59秒只允许访问59次,30秒只允许30次)。为什么这样呢,因为有另外一个线程在进行递减操作

涉及变量
  1. 接口(key)
  2. 时间单位(expire)
  3. 允许访问多少次(limit)
  4. 递减间隔时间(interval)
  5. 递减步长(step)
  6. 剩余可访问次数(value)
  7. key的访问时间(lastUpdateTime)
  8. 当前时间(nowTime)(注意nowTime的取值应为应用取得的时间而不是redis或者nginx取得的时间)
条件一

线程一:

    if(存在key){value--;if(value<=0){不能访问}}else{添加key,设置value为limit}

线程二:

    while(过去interval时间){所有key的value-step}
条件二

参考计数器算法条件二实现。

算法升级

可以看到实现漏桶算法的话需要每隔interval时间都要另外一条线程去遍历所key的value去做递减操作,那么有没有什么办法可以省略这一步呢。答案是肯定有。<br>

    if(存在key){value--;if((nowTime-lastUpdateTime)>interval){value=value-(nowTime-lastUpdateTime)/interval*step;lastUpdateTime=nowTime;}if(value<=0){不能访问}}else{添加key,设置value为limit;lastUpdateTime=nowTime;}

令牌桶算法

核心思想

令牌桶算法呢,恰恰是和漏桶算法相反的一个算法,不过还是推荐你使用这个。这个算法的原理我不讲,我觉得聪明的你看了伪代码就明白了。

涉及变量
  1. 接口(key)
  2. 时间单位(expire)
  3. 允许访问多少次(limit)
  4. 递增间隔时间(interval)
  5. 递增步长(step)
  6. 当前可访问次数(value)
  7. key的访问时间(lastUpdateTime)
  8. 当前时间(nowTime)(参照漏桶算法需要注意的点)
条件一

线程一:

    if(存在key){value++;if(value>=limit){不能访问}}else{添加key,设置value为limit}

线程二:

    while(过去interval时间){所有key的value+step}
条件二

参考计算器算法条件二实现。

算法升级

参考漏桶算法升级实现。

代码

代码实现请参考我的限流框架https://github.com/shiyujun/syj-ratelimit

大型网站限流算法的实现和改造

本文出自http://zhixiang.org.cn,转载请保留。>

转载于:https://blog.51cto.com/12980017/2286332

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_818681.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx 通过 certbot 为网站自动配置 SSL 证书并续期

目录 一、背景知识1.1、http 和 https 是什么&#xff1f;1.2、SSL/TLS 是什么&#xff1f;1.3、为什么要部署 https&#xff1f;1.4、怎么部署 https 呢&#xff1f;1.5、怎么获得 SSL 安全证书呢&#xff1f;二、Let’s Encrypt 及 Certbot 简介2.1、Authenticators 和 Insta…

部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线

概述&#xff1a; 社交网站的第一个版本部署在LNMP平台之上&#xff0c;前段为Nginx服务器&#xff0c;通过fastcgi协议访问后端的PHP服务器。为了保证数据安全&#xff0c;要求搭建MySQL数据库主从集群。 项目介绍&#xff1a; 本项目案例结合SVN、LNMP和MySQL三种环境&#x…

《大型网站架构技术》系列分享专栏

2019独角兽企业重金招聘Python工程师标准>>> 在这里整理一些大型网站架构方面的技术文章&#xff0c;包括大型网站存储&#xff0c;架构&#xff0c;静态化处理&#xff0c;高并发&#xff0c;高性能方面的问题处理&#xff0c;解决方案等知识 《大型网站架构技术》…

阿里云官方网站免费套餐怎么抢

阿里云推出包含云服务器 ECS、负载均衡、云数据库 RDS、云数据库 Redis 版、云数据库 Mongodb 版、弹性公网 IP、CDN、对象存储 OSS、文件存储 NAS等40核心云产品&#xff0c;6个月免费使用何为免费套餐&#xff0c;其实就是让你先体验&#xff0c;觉得好用&#xff0c;易用&am…

一步步构建大型网站架构

2019独角兽企业重金招聘Python工程师标准>>> 之前我简单向大家介绍了各个知名大型网站的架构&#xff0c;亿万用户网站MySpace的成功秘密、Flickr架构、YouTube网站架构、PlentyOfFish 网站架构学习、WikiPedia技术架构学习笔记。这几个都很典型&#xff0c;我们可以…

html:demo网站学习

学习网站https://www.sc-edu.com 涉及知识如下&#xff1a; 目录HTML < ul> 标签HTML lang 属性HTML 标签的 alt 属性CSS 选择器CSS position绝对定位&#xff1a;absolute relativeCSS background-position 属性CSS3 animation(动画)属性 与 keyframes 规则CSS paddin…

html:写网站时遇到的问题及解决

目录01 绝对路径改相对路径出错&#xff1a;图片无法显示02 两端文字空开&#xff0c;且每行这两端文字对齐03 在一行&#xff0c;一侧显示文字&#xff0c;一侧显示图片04 动画效果&#xff0c;文字乱跑05 padding 和 margin01 绝对路径改相对路径出错&#xff1a;图片无法显示…

四招避免SEO优化过度

在对网站进行优化的过程中&#xff0c;很多人往往会将所看到的优化方法不分青红皂白的一律应用&#xff0c;但这样一来就往往会出现优化过度的现象&#xff0c;优化过度甚至比不优化还要对网站有危害&#xff0c;只需要注意以下四个方面&#xff0c;就可以避免在优化网站中经常…

MOSS通过此命令注册模板,web应用程序可以根据stp模块生成网站集

注&#xff1a;C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\bin stsadm –o addtemplate –title 凤凰小学模版 –filename d:\fenghuangxiaoxue.stp MOSS部署常用的stsadm命令行 常用的stsadm命令行参数有&#xff1a; 1、installfeature、uni…

如何部署互动百科的开源wiki建站系统

最近想在技术部门内部搭建一个知识共享平台&#xff0c;经过一番了解和相关资料的查阅&#xff0c;选定了互动百科的开源wiki系统。选定互动wiki&#xff08;下文简称hdwiki)&#xff0c;主要的原因有如下几个方面&#xff1a; 1.中文版。这样对于我个人或者团队内部成员而言&a…

国外人经常上的网站,即全球各个领域最大的互联网网站

由于身处的行业原因&#xff0c;我经常上中国以外的互联网&#xff0c;其实全世界的网民跟国内的网民差不多&#xff0c;他们也经常上网&#xff0c;玩空间、网络视频、分享照片、写博客。由于国内对于互联网的封锁&#xff0c;所以国内大部分的童鞋并不了解外国人的上网都去哪…

分享一个交友网站源码-类Facebook

源码地址&#xff1a; https://gitee.com/tonygeli/social

wordpress账号无法登陆_外贸独立站Wordpress+WooCommerce建站记录贴

一、打开SiteGround网站&#xff0c;进行虚拟主机购买二、选择WooCommerce虚拟主机&#xff0c;第一个只能建一个网站&#xff0c;第二个建立无数个网站&#xff0c;第三个更贵&#xff0c;以后升级可选&#xff1b;我选择第二个&#xff1b;三、在购买的时候在SiteGround上选择…

VS2012下开发MVC4网站(EF出现找不到元数据)

这个错误出现的莫名其妙,在项目里,连了两个数据库,一个2008,一个mysql5.5,调试运行,一点问题都没有,但是发布到IIS7里面,就提示找不到元数据了. 找了好多办法,什么该连接串中的&quot;为,还有一个把metedata的配置,改为具体的名称res://*/test.csdl...把*改成具体的命名空间…

婚纱网站php源码,婚纱摄影宣传网站模板(PHP 源码)

★模板安装方法★1、将web文件夹里的文件覆盖到网站根目录.2、安装dede系统。(如果您已经安装,请跳过本步.)直接运行&#xff1a;http://www.yourname.com/install/index.php (请换成你的域名)3、还原数据库&#xff1a;1)进入dede后台&#xff0c;找到‘系统’-‘数据库备份/还…

php程序设置ip黑名单,网站访客IP黑名单源码有效屏蔽ip(PHP实现,CC防火墙)

在其他地方看到的&#xff0c;感觉不错就 分享一下..网站IP黑名单2组源代码可有效阻止ip(在PHP中实现&#xff0c;可以用作CC防火墙)&#xff0c;一组是单页banIP版本(支持PHP5.4或更高版本&#xff0c;未选择服务器环境) &#xff0c;系统未选中)一组是整个站点的banIP版本(支…

qq修改实名认证已达上限_实名认证修改申请网站 腾讯游戏王者荣耀、战场:健康系统实名认证修改方法...

解除成长守护平台可以解除健康系统的限制吗&#xff1f;成长守护平台和健康系统都属于腾讯未成年人保护体系&#xff0c;二者相互独立运行&#xff0c;解绑成长守护平台不能解除健康系统的限制。腾讯健康系统实名认证修改方法 仅可修改一次 (未成年无效) 这个修改方法 这两天都…

搜索引擎排名都选乐云seo_到9012年搜索引擎都不一定会死,但百家号真的可以用来做SEO优化...

小谷这两天被《搜索引擎百度已死》这篇文章刷屏了&#xff0c;文章主旨就是指责百度搜索结果一半以上会指向百度自家产品&#xff0c;尤其是百家号&#xff0c;而百家号充斥着大量营销和质量低劣的内容&#xff0c;也导致百度搜索结果的内容质量大幅下滑。意思就是百度正在利用…

visual studio 2013发布网站

visual studio 2013发布网站 转载于:https://www.cnblogs.com/Gxiaopan/p/4341610.html

jmh气象传真图网站_在冬奥滑雪场,他凭着气象信息,念好一本生意经_政务_澎湃新闻...

原创 不同视角的气象 中国气象局随着冬季来临冰雪运动再次“热”了起来&#xff01;河北省张家口市崇礼区距离北京220公里目前已建成7家大型滑雪场拥有169条雪道总长度162公里作为2022年冬奥会雪上项目的主要举办地崇礼早已是世界闻名的滑雪胜地这个冬季这里再次涌入了大批滑雪…