【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.hqwc.cn/news/486668.html

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

相关文章

Node.js安装及环境配置

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

redis架构系列——生产常用的部署模式介绍

主从高可用模式 这是最基本的高可用模式,它允许数据从主节点自动复制到一个或多个从节点。这种模式下,从节点可以处理读操作,从而实现负载均衡,并提供故障恢复的基本功能。然而,它的故障恢复不能自动化,写操…

导出本地环境venv包whl文件。

把python环境 venv 对应包的文件导出成whl文件 将 Python 虚拟环境中包导出到文件,可以方便地在其他电脑上安装相同的环境,无需重复下载。 使用 pip freeze 和 pip download 使用 pip freeze 命令列出所有已安装的包和版本号保存到 requirements.txt …

【某机构vip教程】Selenium(7):元素定位_css_selecto定位

Css_selector是什么 CSS是一个被用来描述如何在屏幕等处渲染HTML和XML文档的语言。CSS使用选择器来为文档中的元素绑定样式属性。 选择器(selector)是用来在树中匹配元素的模式,选择器对HTML和XML进行了优化,被设计用来在注重性能…

pikachu靶场-XSS

XSS: XSS(跨站脚本)概述 Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型: 1.反射性XSS; 2.存储型XSS; 3.DOM型XSS; …

有名管道的大小

管道:有名管道、无名管道 通信: 单工通信:固定的读端和写端 -- 广播 半双工通信:同一时刻,只有有一方写,另外一方读:对讲机 全双工通信:随时两方都能读写 -- 电话 特点: 管道属…

Microsoft 365自定义安装软件

如图,在安装类型的步骤的时候,可以勾选自己想要的软件(而非一股脑儿的安装一大堆自己不需要的)。

如何在java中使用 Excel 动态函数生成依赖列表

前言 在Excel 中,依赖列表或级联下拉列表表示两个或多个列表,其中一个列表的项根据另一个列表而变化。依赖列表通常用于Excel的业务报告,例如学术记分卡中的【班级-学生】列表、区域销售报告中的【区域-国家/地区】列表、人口仪表板中的【年…

使用redisMQ-spring-boot-starter实现消息队列和延时队列

简介 redisMQ-spring-boot-starter是一个轻量级的、基于Redis实现的消息队列中间件,它有如下优点: 开箱即用,你几乎不用添加额外的配置支持消息队列、延时队列,并提供精细化配置参数提供消息确认机制支持虚拟空间,不…

在springboot中调用openai Api并实现流式响应

之前在《在springboot项目中调用openai API及我遇到的问题》这篇博客中,我实现了在springboot中调用openai接口,但是在这里的返回的信息是一次性全部返回的,如果返回的文字比较多,我们可能需要等很久。 所以需要考虑将请求接口响应…

Nginx -2

接着上文写 5.4.7 验证模块 需要输入用户名和密码 模块名称:ngx_http_auth_basic_module 访问控制基于模块 ngx_http_auth_basic_module 实现,可以通过匹配客户端资源进行限制 语法: Syntax: auth_basic string | off; Default: auth_ba…

日常工作软件安装总结

日常工作软件安装总结 系统服务安装集成 Skywalking SpringBoot集成Skywalking服务 地址:http://192.168.1.52:8686/general nohup java -javaagent:/mnt/skywalking-agent/skywalking-agent/skywalking-agent.jar -DSW_AGENT_NAMEdev::rms-risk-service agent…