【java面试系列】服务的限流

在这里插入图片描述

目录

  • 一、常用的限流算法
    • 1.固定窗口计数器(计数器算法)
    • 2 滑动窗口计数器算法
    • 3. 漏桶算法
    • 4 令牌桶算法(`常用`)
      • Google开源项目Guava中的RateLimiter使用的就是令牌桶控制算法
  • 二、 分布式限流
    • 1、网关层(Nginx、Openresty、Spring Cloud Gateway等)流量限制
      • nginx限流
      • Spring Cloud Gateway 有两种方式来配置限流
    • 2、中间件限流
      • Redis
      • Sentinel
  • 系列文章
  • 版本记录

在这里插入图片描述

在开发高并发系统时有三把利器用来保护系统:缓存降级限流


一、常用的限流算法

1.固定窗口计数器(计数器算法)

在这里插入图片描述

固定窗口计数器算法概念如下:

  • 将时间划分为多个窗口;

  • 在每个窗口内每有一次请求就将计数器加一;

  • 如果计数器超过了限制数量,则本窗口内所有的请求都被丢弃当时间到达下一个窗口时,计数器重置。

固定窗口计数器是最为简单的算法,但这个算法有时会让通过请求量允许为限制的两倍。考虑如下情况:限制1秒内最多通过5个请求,在第一个窗口的最后半秒内通过了5个请求,第二个窗口的前半秒内又通过了5个请求。这样看来就是在1秒内通过了10个请求。

2 滑动窗口计数器算法

在这里插入图片描述
滑动窗口计数器算法概念如下:

  • 将时间划分为多个区间;

  • 在每个区间内每有一次请求就将计数器加一维持一个时间窗口,占据多个区间;

  • 每经过一个区间的时间,则抛弃最老的一个区间,并纳入最新的一个区间;

  • 如果当前窗口内区间的请求计数总和超过了限制数量,则本窗口内所有的请求都被丢弃。

滑动窗口计数器是通过将窗口再细分,并且按照时间"滑动",这种算法避免了固定窗口计数器带来的双倍突发请求,但时间区间的精度越高,算法所需的空间容量就越大。

3. 漏桶算法

在这里插入图片描述
漏桶算法概念如下:

  • 将每个请求视作"水滴"放入"漏桶"进行存储;

  • “漏桶"以固定速率向外"漏"出请求来执行,如果"漏桶"空了则停止"漏水”;

  • 如果"漏桶"满了则多余的"水滴"会被直接丢弃。

漏桶算法多使用队列实现,服务的请求会存到队列中,服务的提供方则按照固定的速率从队列中取出请求并执行,过多的请求则放在队列中排队

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

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

相关文章

【MySQL初阶】索引与事务

1. 索引 1.1 索引基本概念 1.1.1 索引介绍 索引(index):是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或者多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。(具体细节在My…

OpenCV笔记4:级联分类器实现嘴部检测

OpenCV 嘴部检测 """ 嘴部区域检测 1. 静态图像检测嘴部区域创建分类器加载特征文件检测图像绘制嘴部区域显示 2. 切换为摄像头 """ import cv2 import numpy as npclass FaceDetect:def __init__(self):# 级联分类器# 创建级联分类器&#xf…

AI绘画巅峰对决:Stable Diffusion 3与DALL·E 3原理深度比较

最近,Stable Diffusion 3 的预览版已经亮相啦! 虽然这个AI绘画模型还没全面上线,但官方已经开启预览申请通道了。 https://stability.ai/stablediffusion3 而且好消息是,后面还会推出开源版本哦! 这个模型套件真的…

数字化转型导师坚鹏:政府数字化转型案例研究(包括省市政府)

政府数字化转型案例研究(包括省市政府) 课程背景: 很多地方政府存在以下问题: 不清楚标杆省政府数字化转型的成功案例 不清楚直辖市政府数字化转型的成功案例 不清楚地级市政府数字化转型的成功案例 课程特色&#xff1a…

ORA-02062: distributed recovery received DBID 9ad10df5, expected 38cc1cd5

今晚做重启维护,发现节点二上报错如下 Fri Feb 23 21:47:43 2024 Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl2/trace/orcl2_reco_58540.trc: ORA-02062: distributed recovery received DBID 9ad10df5, expected 38cc1cd5 Errors in file /u01/app/oracl…

Node.js安装及环境配置

1. 前言 Node.js简介 Node.js 是一个开源的、跨平台的 JavaScript 运行环境,它允许开发者使用 JavaScript 编写服务器端代码。Node.js 基于 Google 的 V8 JavaScript 引擎构建,该引擎是 Chrome 浏览器中用于解析和执行 JavaScript 的核心组件。因此&am…

【Java】接口及其实现(实验四)

目录 一、实验目的 二、实验内容 三、实验小结 一、实验目的 了解接口的作用掌握接口的定义与实现掌握接口的回调 二、实验内容 1. 定义一个接口Human,其中有一无参的、返回类型为void的方法speak();定义类Student实现接口&a…

【ECharts】调用接口获取后端数据的四种方法

使用eacharts做大屏,需要使用后端数据,下面的方法是自己试过有效的,有什么不对的,望各位大佬指点。 目录 方法一:在mounted中使用定时器调用eacharts方法(定时器可以获取到data中的数据) 方法…

Stable Diffusion 3震撼发布模型与Sora同架构

Prompt:Epic anime artwork of a wizard atop a mountain at night casting a cosmic spell into the dark sky that says "Stable Diffusion 3" made out of colorful energy Stability AI发布Stable Diffusion 3文本到图像模型。该模型采用扩散变换架构…

SQL库操作

1、创建数据库 概念 创建数据库:根据项目需求创建一个存储数据的仓库 使用create database 数据库名字创建 数据库层面可以指定字符集:charset/character set 数据库层面可以指定校对集:collate 创建数据库会在磁盘指定存放处产生一个文件夹 创建语法 create …

【算法分析与设计】1的个数

📝个人主页:五敷有你 🔥系列专栏:算法分析与设计 ⛺️稳中求进,晒太阳 题目 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位…

【初始RabbitMQ】交换机的实现

交换机概念 RabbitMQ消息传递模型的核心思想就是:生产者生产的消息从不会直接发送到队列。实际上,通常生产者不知道这些消息会传递到那些队列中 相反,生产者只能将消息发送到交换机,交换机的工作内容也很简单,一方面…

云服务器发展史

在数字化浪潮的推动下,云服务器作为信息技术领域的一颗璀璨明珠,其发展史是一部科技进步和创新思维的缩影。从最初的概念提出到现如今的广泛应用,云服务器经历了翻天覆地的变化,不仅极大地推动了信息技术的发展,也彻底…

JavaScript运算符

文章目录 运算符介绍算术运算符递增和递减运算符比较运算符逻辑运算符短路运算逻辑与 逻辑或 赋值运算符运算符优先级 运算符介绍 算术运算符 %取余运算符的主要用途: 判断某个数是否能被某个数整除。 浮点数的精度问题: 所以:不要直接判断…

Unicode转换 [ASIS 2019]Unicorn shop1

打开题目 点击进去之后是一个购买独角兽的界面,有四种类型的独角兽,前三种的价格比较便宜,最后的独角兽价格比较贵。 我们先尝试购买前三种独角兽,输入id,然后price输入9 我们直接查看源代码 可以看到在charset"…

操作符的属性:优先级、结合性(缺表达式求值)

C语言的操作符有2个重要的属性:优先级、结合性,这两个属性决定了表达式求值的计算顺序。 我们先简单了解一下操作符的优先级和结合性,附上表格,简单记一下顺序,搭配几道题来加深印象。 1.优先级 优先级指的是&#x…

linux常用的网络命令实战分享

文章目录 ifup/down命令ifconfig命令观察网络接口信息修改接口参数增加虚拟网络接口 route命令查看路由表增加路由表规则删除路由表规则 IP 命令ip linkip addr设定路由 ip route arp 命令 在实际研发运维工作中常常会涉及到网关相关的操作和知识,这里对linux下常用…

要赢,且不止一次,2024创维汽车势不可挡!

随着除夕钟声的敲响,创维汽车迎来了全新的一年。过往取得的成绩已成为了历史,全新的未来还有待奋斗者们去开创。为辞旧迎新,创维汽车于2月22日及2月23日召开了“新春启航,共谋发展”营销会议,为2024做下全新布局。 创维…

js设计模式:组合模式

作用: 可以用来将数据组合成树形的数据,可以像操作单独的对象一样去操作整个树形结构 树是相对复杂的数据,使用组合模式去封装树形的组件,是很重要的,可以对外暴露很多树的操作方法 示例: //一个树型的对象数据class Organ {constructor(label, value, parentName) {this.la…

离散化算法

离散化算法的思想是将一组连续的数据映射到一组离散的取值&#xff0c;通常是整数。它的主要目的是将连续的数据转换为离散的数据&#xff0c;以便进行统计、计数、排序等操作。 C代码实现: #include<iostream> #include<vector> #include<algorithm> usi…