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

在这里插入图片描述

文章目录

  • 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节点常…

【NC16664】合唱队形

题目 合唱队形 此题可以用动态规划,也可以用贪心和二分 思路 此题就是求一个数组中山脉数组的最大长度。思路很直观,这里直接给出算法: 记数组元素个数为 n n n,遍历数组每个元素,对每个元素: (1) 求出这…

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

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

redis 结合Lua脚本实现 秒杀、防止超卖

需求:同1商品单个用户限购1件,库存不会超卖1 Lua脚本,因可实现原子性操作,这个文件放到resources目录下 local userId KEYS[1] -- 当前秒杀的用户 ID local goodsId KEYS[2] -- 秒杀的商品 ID -- 订单id local orderId ARGV[1…

微信收款码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,说明在这个时间点,内存突增达到了限额以上,服务重启了。因为这个服务布署了多节点,这次重启对业…

故障诊断 | 基于GASF-CNN的状态识别研究

概述 抗蛇行减振器作为高速动车组二系悬挂系统的关键零部件,对改善车辆运动稳定性、提高车辆系统的临界速度具有重要意义。抗蛇行减振器在高级修时需全部进行拆解维修或报废处理,若在高级修中的三、四级修时其性能尚能够满足实际使用要求,将其过早地拆解检修或者报废换新无…

【springboot整合redis】异常处理

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

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

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

树莓派的应用场景都有哪些?

树莓派是一种小型、低功耗、高性能的计算机主板,其广泛的应用场景包括但不限于以下几个方面: 媒体中心:树莓派可以连接到电视或音响系统,并安装如Kodi等媒体播放器软件,成为一个功能完整的家庭媒体中心,用…

部署一个自己的GPT客户端[以ChatGPT-Next-Web为例]

1. 引言 当我们有一个openai的key又想通过客户端进行访问对话功能的时候,chatGPT-next-web是一个选项(仅限是一个选项,也有更好的方案)。 2. 准备步骤 服务器背景: Ubuntu 20.04 2.1 docker的安装 首先应该保证服…

如何在three.js中画3D圆弧及半圆弧组成圆

在three.js中画圆弧以及画圆,首先会想到的是ArcCurve,这个曲线API,经过使用发现,他是一个二维平面的,也就是说只在X-Y轴组成的平面可以使用,三维坐标使用的时候不生效,比如说:我期望…

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

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

SSH功能及其在网络通信中的应用

SSH功能及其在网络通信中的应用 摘要: SSH(Secure Shell)是一种网络协议,用于在不安全的网络中提供加密的远程登录和其他网络服务。本文将详细介绍SSH的基本概念、工作原理、常用功能以及在网络通信中的应用。通过阅读本文&#…

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

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