当前位置: 首页 > news >正文

限流及限流算法

使用场景

限流是高并发的处理方法之一。

高并发处理方案: 
缓存:缓存的目的是提升系统访问速度和增大系统处理容量。
降级:降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题解决后再打开。
限流:限流的目的是通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理。

令牌桶算法:
  • 一个存放固定容量令牌的桶
  • 按照固定速率往桶里添加令牌。
  • 桶中最多存放指定个数的令牌,当桶满时,新添加的令牌被丢弃或拒绝;
  • 令牌桶允许突发的多个请求,只要有令牌就可以处理,支持一次拿3个令牌,4个令牌。
漏桶算法:

漏桶算法,通常使用 先进先出(FIFO) 队列来实现。
漏桶算法,有一个固定容量的漏桶。

  • 当一个请求到达时,会先检查桶是否已满。如果没有满,就将请求添加到队列中。如果满了,就丢弃请求。
  • 定期从队列中取出请求进行处理。

滑动窗口算法

滑动窗口算法:将时间窗口分为多个小窗口,每个小窗口都有自己的计数器。随着时间的滑动,过期的小窗口数据被删除,这样可以更精确地控制流量。

滑动窗口所允许通过的请求数:当前窗口的请求数 + 之前窗口的请求数* 滑动窗口和之前窗口的重合率。

滑动窗口算法的优点:

  • 平滑了流量中的波动,当前时间窗口内请求的速率是基于前一个时间窗口内请求的平均速率计算出来的
  • 对内存的使用很高效。

参考资料

《搞定系统设计》
《凤凰架构》
https://zhuanlan.zhihu.com/p/689922080

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • powershell脚本批量拉取 git仓库文件
  • 老外卖27刀每月的教程已经更新
  • c# sqlite使用
  • vue2 自定义指令
  • OpenAI模型GPT-4o、GPT-4、Gemini 1.5性能比较
  • R实验 方差分析
  • 【运维项目经历|024】MySQL性能优化与监控平台
  • 神奇动物在哪里?斯洛文尼亚旅游之野生动物寻踪
  • 2024年郫都区区级农业生产社会化服务重点服务组织评定申报条件材料、程序要求
  • Python筑基之旅-MySQL数据库(四)
  • Java+IDEA+SpringBoot药物不良反应ADR智能监测系统源码 ADR智能化监测系统源码
  • python数据分析——数据可视化(图形绘制)
  • 【BI 可视化插件】怎么做? 手把手教你实现
  • 基于springboot+html的二手交易平台(附源码)
  • Android软件渲染流程
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Android交互
  • HTTP请求重发
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • isset在php5.6-和php7.0+的一些差异
  • MySQL用户中的%到底包不包括localhost?
  • Swoft 源码剖析 - 代码自动更新机制
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • vue数据传递--我有特殊的实现技巧
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 动态规划入门(以爬楼梯为例)
  • 分享一份非常强势的Android面试题
  • 给Prometheus造假数据的方法
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 前嗅ForeSpider教程:创建模板
  • 思维导图—你不知道的JavaScript中卷
  • 国内开源镜像站点
  • ​​​【收录 Hello 算法】9.4 小结
  • ​香农与信息论三大定律
  • # Redis 入门到精通(一)数据类型(4)
  • #ifdef 的技巧用法
  • #Z0458. 树的中心2
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (1)Hilt的基本概念和使用
  • (175)FPGA门控时钟技术
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (2022 CVPR) Unbiased Teacher v2
  • (javaweb)Http协议
  • (rabbitmq的高级特性)消息可靠性
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (补充)IDEA项目结构
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (论文阅读30/100)Convolutional Pose Machines
  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (一)UDP基本编程步骤
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别