【分布式 | 第四篇】限流算法实现方案

在这里插入图片描述

文章目录

  • 4.限流算法
    • 4.1计算器
    • 4.2漏桶算法
    • 4.3令牌桶限流

4.限流算法

4.1计算器

  • 计数器比较简单粗暴,比如我们要限制1s能够通过的请求数
  • 实现的思路就是从第一个请求进来开始计时,在接下来的1s内,每个请求进来请求数就+1,超过最大请求数的请求会被拒绝,等到1s结束后计数清零,重新开始计数。

这种方式有个很大的弊端:比如前10ms已经通过了最大的请求数,那么后面的990ms的请求只能拒绝,这种现象叫做“突刺现象”。

4.2漏桶算法

  • 原理:

    • 桶底出水的速度恒定,进水的速度可能快慢不一

    • 但是当进水量大于出水量的时候,水会被装在桶里,不会直接被丢弃;但是桶也是有容量限制的,当桶装满水后溢出的部分还是会被丢弃的。

  • 核心思想: 接收指定数量的请求,按照指定的速率处理

  • 算法实现:

    • 可以准备一个队列来保存暂时处理不了的请求,然后通过一个线程池定期从队列中获取请求来执行。
  • 缺点:并发性差,需要对每个水滴(请求)逐个进行处理

4.3令牌桶限流

  • 核心思想:

    • 令牌桶就是生产访问令牌的一个地方,生产的速度恒定
    • 用户访问的时候当桶中有令牌时就可以访问,否则将触发限流。
  • 算法步骤:

    • 每隔一段时间生成一定数量的令牌放入桶中;
    • 当有请求到达时,从桶中获取一个令牌,如果没有令牌可用,则拒绝该请求。
  • 实现方案:Guava RateLimiter限流

    Guava RateLimiter是一个谷歌提供的限流,其基于令牌桶算法,比较适用于单实例的系统。

  • 优点:令牌桶限流的并发性能比较高,我们可以批量对拿到令牌的请求进行处理。

在这里插入图片描述

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

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

相关文章

删除二叉搜索树中的节点

题目链接 删除二叉搜索树中的节点 题目描述 注意点 节点值唯一root 是合法的二叉搜索树节点数的范围 [0, 10000] 解答思路 可以根据二叉搜索树的性质找到要删除的节点,关键是删除节点后怎么重新构建成一棵新的二叉搜索树首先要找到的是删除节点node的父节点nod…

微信小程序:9.小程序配置

全局配置文件 小程序根目录下的app.json文件是小程序的全局配置文件。 常用的配置文件如下: pages 记录当前小程序所有的页面存放路径信息 window 全局设置小程序窗口外观 tabBar 设置小程序底部的tabBar效果 style 是否启用新版style 小程序窗口的组成部分 了解windo节点常…

场景文本检测识别学习 day07(BERT论文精读)

BERT 在CV领域,可以通过训练一个大的CNN模型作为预训练模型,来帮助其他任务提高各自模型的性能,但是在NLP领域,没有这样的模型,而BERT的提出,解决了这个问题BERT和GPT、ELMO的区别: BERT是用来…

微信收款码0.2费率开通

很多人想申请低手续费率的收款码不知从何下手,在参考了大量博客教学之后,终于搞懂了详细流程以及注意事项。在此记录一下。我申请的是一个只需要0.2%费率的微信收款码,申请时间是2022年2月12日。申请之前只需要准备营业执照和法人身份z&#…

【iconv】Linux c++ 中文字符串转十六进制 GBK 编码/内码

文章目录 问题描述c 代码CMakeLists.txt参考链接 问题描述 Linux 系统默认使用的是 UTF-8 编码,并且 c 中没有标准库可以直接将中文字符转为 GBK 编码/内码。因此需要借助 iconv 库来实现。 在实现代码之前,可以在一下在线工具网站进行中文字符到各个编…

​可视化大屏C位图:园区鸟瞰

将园区鸟瞰图作为可视化大屏设计的焦点图有以下几个好处: 提供全局视图:园区鸟瞰图可以展示整个园区的布局和结构,提供全局视图。这对于大型园区或复杂的场所来说尤为重要,用户可以一目了然地了解整个园区的规模、分布和关联关系…

使用新版ESLint,搭配Prettier使用的配置方式

概述 ESLint重大更新(9.0.0版本)后,将不再支持非扁平化配置文件,并且移除了与Prettier冲突的规则,也就是说与Prettier搭配使用,不再需要使用插件“eslint-config-prettier”来处理冲突问题。 注:使用新版的前提条件是Node.js版本必须是18.18.0、20.9.0,或者是>=21.1…

ESP-IDF编译系统详解(1)

接前一篇文章:VSCode ESP-IDF安装与配置全过程 本文内容主要参考: 《ESP32-C3物联网工程开发实战》 —— 乐鑫科技 编著 特此致谢! 前文已经详述了ESP-IDF开发环境的搭建,包括ESP-IDF的下载与安装完整流程,以及VSCo…

怎么排查K8S容器当中的Java程序内存泄露问题

今天早上发现生产线其中的一个服务在凌晨的时候突然重启了,内存突然从1G升到1.8G,CPU使用量从0.1升到了0.28,说明在这个时间点,内存突增达到了限额以上,服务重启了。因为这个服务布署了多节点,这次重启对业…

【springboot整合redis】异常处理

这个问题是在使用springboot整合redis时,创建好工程后,测试时所产生的 报错: org.springframework.data.redis.RedisSystemException: Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: NOAUTH A…

共享购:融合社交分享与消费返利的创新电商模式

共享购电商模式是一种独特的商业模式,巧妙地将社交分享与消费返利结合,让消费者在购物的同时,也能通过平台资产奖励实现价值的双重增长。该平台资产体系主要由共享值和共享积分两大要素构成,共同构建了一个充满活力的电商生态系统…

巴特沃斯滤波原理及代码实现(matlab详细过程版)

目录 一、算法原理1、原理概述2、参考文献 二、代码实现三、结果展示 本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、原理概述 巴特沃斯滤波器(Butterworth filt…

SQLite运行时可加载扩展(三十五)

返回:SQLite—系列文章目录 上一篇:SQLite轻量级会话扩展(三十四) 下一篇:SQLite的DBSTAT 虚拟表(三十六) 1. 概述 SQLite 能够在运行时加载扩展(包括新的应用程序定义的 SQL 函数、整理序列、虚拟表和 VFS&…

Mysql-主从复制理解

环境:mysql,主从复制,必须有2个mysql实例,也就是说可以在一台电脑上安装2个msyql,或者2台服务器,一个主服务器,一个从服务器 在实际的生产中,为了解决Mysql的单点故障已经提高MySQL的…

Tomcat安装和配置以及多实例部署(附脚本)

TOMCAT详细部署 Tomcat服务器简介核心组件Tomcat 各组件及关系工作流程 Tomcat server.xml 配置详解serverserviceConnectorEngineHostContextValve 阀门 Tomcat部署与安装部署脚本主要目录说明 Tomcat多实例部署扩展和优化 Tomcat 的 catalina.sh 文件以调整 JVM 参数 Tomcat服…

前端工程化Vue使用Node.js设置国内高速npm镜像源(踩坑记录版)

前端工程化Vue使用Node.js设置国内高速npm镜像源(踩坑记录版) 此篇仅为踩坑记录,并未成功更换高速镜像源,实际解决方法见文末跳转链接。 1.自身源镜像 自身镜像源创建Vue项目下载速度感人 2.更改镜像源 2.1 通过命令行配置 前提…

K8s容器部署maven项目

最近在整一整套devops自动化持续集成的东西,一开始就做好了踩坑的准备。 failed to verify certificate: x509: certificate signed by unknown authority 今天在执行kubectl get nodes的时候报的证书验证问题,看了一圈首次搭建k8s的都是高频出现的问题…

泰坦尼克号乘客生存情况预测分析2

泰坦尼克号乘客生存情况预测分析1 泰坦尼克号乘客生存情况预测分析2 泰坦尼克号乘客生存情况预测分析3 泰坦尼克号乘客生存情况预测分析总 背景描述 Titanic数据集在数据分析领域是十分经典的数据集,非常适合刚入门的小伙伴进行学习! 泰坦尼克号轮船的…

基于LM Studio + LLaMA3 建立本地化的ChatGPT

4月19日,Facebook母公司Meta重磅推出了Llama3。即便大家现在对于大厂和巨头频繁迭代AI模型的行为已经见怪不怪,Meta的Llama3仍旧显得与众不同,因为这是迄今最强大的开源AI模型。LLaMA模型通常采用了类似于GPT(由OpenAI开发&#x…

【Qt】error LNK2001: 无法解析的外部符号

参考:Qt/VS LNK2019/LNK2001:无法解析的外部符号_qt lnk2001无法解析的外部符号-CSDN博客 微软官方报错文档-链接器工具错误 LNK2019 __declspec error LNK2001: 无法解析的外部符号 "__declspec(dllimport) 原因 以这种为前缀的基本上跟库相关…