经典面试题——让你设计一个限流的系统怎么做?

常见的限流算法及其实现方式 在高并发的分布式系统,如大型电商系统中,由于接口 API 无法控制上游调用方的行为,因此当瞬间请求量突增时,会导致服务器占用过多资源,发生响应速度降低、超时乃至宕机,甚至引发雪崩造成整个系统不可用。面对这种情况,一方面我们会提升 API 的吞吐量和 QPS(Query Per Second 每秒查询量),但总归会有上限,所以另一方面为了应对巨大流量的瞬间提交,我们需要做对应的限流处理,也就是对请求量进行限制,对于超出限制部分的请求作出快速拒绝、快速失败、丢弃处理,以保证本服务以及下游资源系统的稳定。 阅读详情

保障服务稳定的三大利器:熔断降级、服务限流和故障模拟。限流系统是当前很多系统都需要考虑的场景。首先在Nginx层面是可以做限流的,除此之外,在微服务层面还是有很多空间可以施展的。

限流的话,主要思路分为请求数量限制和消费能力限制两类。前者主要是限制一段时间内的总并发数、后者主要是限制消费者的消费能力。

限流算法

限流算法来说,主要包含令牌桶算法、漏桶算法和计数器等。对于简单的计数器算法,通过AtomicLong#incrementAndGet()来进行粗暴的控制,因为容易导致“突刺现象”(比如单位时间1s内的前10ms,已经通过了100个请求,那后面的990ms,只能拒绝),所以这里不做推荐。

令牌桶算法

令牌工厂:匀速生成令牌

令牌桶:拥有固定的令牌数

应用者:一次可以申请N个令牌,没有令牌不能进行后续处理。

如果使用Redis来实现的话会比较简单,大概思路如下:

1/ 获取令牌:依靠List的leftPop来获取令牌

Object result = redisTemplate.opsForList().leftPop("limit_list");

2/ 向令牌桶添加令牌

redisTemplate.opsForList().rightPush("limit_list",UUID.randomUUID().toString());

漏桶算法

漏桶:容量固定

流速:任意

流出水滴:固定速率

滑动窗口

用Redis的list数据结构可以轻而易举的实现该功能:保证每N秒内至多M个请求,缺点就是zset的数据结构会越来越大。实现方式相对也是比较简单的。

1/ 请求进来:UUID生成唯一的value;score用当前的时间戳

redisTemplate.opsForZSet().add("limit",UUID.randomUUID().toString(),currentTime);

2/ 限流:zset的range方法可以统计两个时间戳内的请求,达到限流效果

Integer count = redisTemplate.opsForZSet().rangeByScore("limit", currentTime -
SpringCloud - Sentinel 限流面试题 SpringCloud - Sentinel 面试题1. Sentinel是什么2. 类似Sentinel的产品你知道有什么3. 你了解哪些限流算法4. Sentinel 默认的限流算法是什么5. 你了解sentinel中的阈值应用类型吗6. Sentinel 限流规则中默认有哪些限流模式7. Sentinel的限流效果有哪些8. Sentinel 为什么可以对我们的业务进行限流,原理是什么9. 何为降级熔断10. 为什么要进行熔断呢11. Sentinel中限流,降级的异常父类是谁12. Sentinel 阅读详情

相关推荐

09-Sentinel限流熔断应用实践,多线程并发面试题

关于分布式,限流+缓存+缓存,这三大技术(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。以上的每一个专题每一个小分类都有相关的介绍,并且小编也已经将其整理成PDF啦。

d12333311322的博客 1797

设计一个高性能的分布式限流系统

同时,分布式场景中的限流不同于单机限流,需要应对多节点协同的问题,这就涉及到分布式存储和一致性方案的设计,比如借助 Redis 或 ZooKeeper 实现全局限流。一套高性能的分布式限流系统,不仅能够精准控制流量,防止系统过载,还需要在高并发场景下具备低延迟、高吞吐的能力,同时满足多样化的业务需求。限流算法是分布式限流系统的核心,它直接决定了限流的精准性、性能以及适用场景。设计一个高性能的分布式限流系统,需要从分布式架构的特点出发,解决限流过程中遇到的高并发、数据一致性、低延迟等问题。

u013257321的博客 1272

树莓派4B+WebRTC实现远程监控:5步搞定公网视频流传输(含Node.js配置)

本文详细介绍了如何利用树莓派4B和WebRTC技术,通过5个关键步骤搭建低延迟、高隐私的远程监控系统。重点阐述了WebRTC点对点传输相较于传统方案的优势,并提供了包含Node.js信令服务器配置、树莓派视频流捕获与推送、以及移动端自适应观看页面的完整实现方案,帮助用户实现公网视频流传输。

websocket5live的博客 292

设计一个限流器:四种限流算法详解

在互联网日益发达的今天,想要系统做到高可用,限流是一种非常有效的的方式。限流器是部署在网关中的一个过滤器(filter)组件,过滤器常见的还有验签、权限、登陆状态等,我们一般会把限流放到第一位。限流器是一种用于控制流量的设备或机制,通常用于计算机网络、软件系统或其他数据传输过程中。限流器的主要目的是防止系统超负荷,确保资源分配合理,提高系统的稳定性和性能。网络流量控制: 限制网络流量,防止过度拥塞,确保网络的正常运行。这可以通过设置带宽限制、流量速率限制或连接数限制来实现。

qq_24516525的博客 2843

YT8531 PHY芯片硬件设计与MDIO/RGMII实战指南

以太网PHY芯片是FPGA系统实现网络通信的物理层核心,其关键在于标准接口(如MDIO管理总线和RGMII数据接口)的正确实现与协同。MDIO作为IEEE 802.3定义的低速配置通道,负责寄存器级控制与状态监控;RGMII则通过双沿采样精简引脚,在千兆速率下兼顾性能与PCB布线可行性。技术价值体现在电压兼容性(支持1.8V/2.5V/3.3V)、可编程时序调节(RX_DELAY/TX_DELAY)及多级环回测试能力,显著提升国产FPGA平台(如Xilinx Zynq)的工程鲁棒性。典型应用场景涵盖嵌入式网

weixin_42453228的博客 1337

FPGA+CMV4000实战:从零搭建20fps成像系统的5个关键步骤(附避坑指南)

本文详细介绍了如何从零搭建基于FPGA和CMV4000传感器的20fps成像系统,涵盖硬件选型、SPI通信优化、LVDS数据采集、DDR2内存管理及系统集成等5个关键步骤。特别针对CMV4000传感器的SPI配置和高速数据处理的常见问题提供实用解决方案,帮助开发者避免常见陷阱,提升成像系统性能。

weixin_42628688的博客 427

系统设计之限流设计

限流设计 我们在一些系统中都可以看到这样的设计,比如,我们的数据库访问的连接池,还有我们的线程池,还有 Nginx 下的用于限制瞬时并发连接数的 limit_conn 模块,限制每秒平均速率的 limit_req 模块,还有限制 MQ 的生产速,等等。 限流的策略 限流的目的是通过对并发访问进行限速,相关的策略一般是,一旦达到限制的速率,那么就会触发相应的限流行为。一般来说,触发的限流行为如下。 ● 拒绝服务: 把多出来的请求拒绝掉。一般来说,好的限流系统在受到流量暴增时,会统计当前哪个客户端来的请求最多,

qq_42889658的博客 1482

Python学习24:中国古代数学问题——物不知数(Python123)

意思是说有一些物品,不知道有多少个,3个3个数的话,还多出2个;5个5个数则多出3个;7个7个数也会多出2个。题目为‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?现假设物品总数不超过n (n

weixin_60530224的博客 2万+

【架构设计】高并发系统设计之限流

当我们谈论Web应用或者服务,一个重要的话题就不能避免: 限流。这是一种保护系统和维持服务稳定性的重要手段。

BookSea的博客 597

Win7/10/11文件拖拽导致资源管理器闪退问题

最近老是遇到把文件从资源管理器拖动到微信或者浏览器时,资源管理器直接闪退的问题,一开始在公司遇到了还以为是电脑配置太低,直到被封闭在家办公,发现自己的高级电脑也有这个问题,那就来了解了解问题是出在什么地方把。

Nicer_feng's blog 1万+

姿态传感器/陀螺仪之BMI270应用原理图设计

BMI270是一款由博世(Bosch)推出的高性能、超低功耗惯性测量单元(IMU),专为可穿戴设备、智能设备及物联网应用设计。

corlin6688的博客 2864

JAVA面试场景题:一、项目中的限流是怎么做的?

本文从底层原理层分析限流是什么,为什么要限流及限流的技术原理。包括常见的限流算法、单机限流场景、分布式限流场景以及一些常见限流组件。

weixin_40841143的博客 1367

YOLOV5 自动刷图脚本实战(十五)之如何找到正确的门

DXF是一个2D游戏,我们所看到的人物移动,其实是后面的背景在移动,我们所看到的画面,不过是一个完整背景中的一个镜头视角而已想要正确找到门的坐标,我们需要对不同的地图中的每个房间做一些配置信息。

qq_38892949的博客 2811

Java面试-如何设计一个秒杀系统?高并发、限流、库存扣减

《Java面试200问》系列:秒杀系统设计全解析 本文深入探讨了高并发秒杀系统的核心设计与实现方案。通过需求分析指出秒杀系统面临的三大挑战:高并发访问、库存超卖问题和限流需求。针对这些难题,文章提出了分布式架构解决方案,包括: 负载均衡分流请求 Redis缓存热点数据 乐观锁/悲观锁防止超卖 令牌桶算法实现限流 系统架构部分详细展示了从单机到分布式集群的演进过程,并提供了MySQL表结构设计示例。最后强调监控和安全机制的重要性,为Java开发者提供了完整的秒杀系统实现思路。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

如何在 UniApp 中接入讯飞语音听写功能 文末附vue3+vue2完整代码

在开发过程中,我遇到了讯飞接口返回空数据的问题。通过仔细检查传送的每一帧数据,我发现问题出在第一帧的配置信息以及 Base64 数据的切片。确保每一帧的数据正确且符合接口要求,问题就能够得到解决。希望这个过程能帮助你在项目中顺利对接讯飞语音识别。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 997

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

经典面试题,如何设计一个秒杀系统

说起秒杀,从双十一购物到春节抢红包,再到逢年过节抢⻋票,“秒杀”的场景在我们的生活中处处可⻅。简单来说,秒杀就是在同一个时刻有大量的请求,争抢购买同一个商品并完成交易的过程。 不管校招,还是社招,如何设计一个秒杀系统的面试题经常出现,如果懂得其中原理,就可以对答如流,不过涉及到一些瓶颈优化,有些...

weixin_34109408的博客 5150

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Java面试-如何设计一个API网关?路由、认证、限流、熔断

用户全没了……”老板:“这哪是服务,这是‘自杀式接口’啊!别慌,不是你代码写得差,而是缺少一个“守门人”——API 网关。今天,我们就来设计一个高安全、高可用、高性能的 API 网关,让你的接口不再“裸奔”,也让面试官听完你的架构图,直接从椅子上跳起来喊:“这架构,封神了!@Component@Autowired@Override// 每秒最多 10 次if (!// 调用 Redis Lua 脚本// 实现见上文@Overridereturn 0;道。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

分布式系统面试题:熔断、降级、限流

分布式系统防护三剑客:熔断、降级、限流解析 本文系统介绍了分布式系统中保障稳定性的三大核心机制。熔断机制通过状态机模型(关闭/开启/半开)自动切断故障服务;降级策略在系统压力大时优先保障核心功能,提供默认值、缓存等多种处理方式;限流则通过计数器、滑动窗口、漏桶/令牌桶等算法控制流量。三者协同工作形成分层防护体系,从接入层到资源层全面保障系统高可用。文章还详细比较了Hystrix与Sentinel的实现差异,并提供了分布式限流、阈值设定等实用方案,最后给出完整的防护体系落地步骤。

weixin_39956506的博客 1687

如果让你设计一个秒杀系统,你会怎么做?

这个算是一个经典面试题了,虽说是一个场景题,但是也算是老八股了。今天就从系统设计的角度来和小伙伴们聊一聊这个话题。接下来我们就这里提到的点逐一进行分析。本文主要和大家讲思路,不讲具体做法,具体做法在松哥之前的文章中很多已经和大家聊过了。

江南一点雨的专栏 1413

太强了!一个基于 Redis 的限流系统的设计!

本文讲述基于 Redis 的限流系统的设计,主要会谈及限流系统中限流策略这个功能的设计;在实现方面,算法使用的是令牌桶算法来,访问 Redis 使用 lua 脚本。 1、概念 In computer networks, rate limiting is used to control the rate oftraffic sent or received by a network interface controller and is used to prevent DoS attacks 用我的理解翻

程序员白楠楠的博客 528

面试题:如何设计一个高并发系统?

一般来说系统的吞吐量是可以被测算的,为了保证系统的稳定运行,一旦达到的需要限制的阈值,就需要限制流量并采取一些措施以完成限制流量的目的。因为真正干过高并发的人一定知道,脱离了业务的系统架构都是在纸上谈兵,真正在复杂业务场景而且还高并发的时候,那系统架构一定不是那么简单的,用个 redis,用 mq 就能搞定?,大家可以仔细结合之前讲过的知识考虑一下,到时候你可以系统的把这块阐述一下,然后每个部分要注意哪些问题,之前都讲过了,你都可以阐述阐述,表明你对这块是有点积累的。读流量太多的时候,还可以加更多的从库。

Java开发工程师,专注微服务、分布式系统,部署运维,分享实战经验和源码解析。 762

面试题之如何设计一个秒杀系统?

前端校验通过后,通过多台NG的转发,到后端处理秒杀功能,单台ng可以处理2-3万的数据量,一旦NG集群了,就需要在NG上方进行部署网络及硬件级别相关的F5/LVS等。通过NG校验及转发后,就会到服务端的网关集成器,比如ribbon或者loadbalancer进行客户端的负债均衡的转发,通过上面四级的负债均衡大概能处理每秒10+万的qps请求并发量。这种秒杀系统一般配合docker、 K8S相关的云服务器的动态伸缩部署,当秒杀开始时,自动扩容服务器节点,结束后,自动缩减节点,有效的利用服务器资源和成本。

zbq1017的博客 1001

牛皮了!基于 Redis 的限流系统的设计!

本文讲述基于 Redis 的限流系统的设计,主要会谈及限流系统中限流策略这个功能的设计;在实现方面,算法使用的是令牌桶算法来,访问 Redis 使用 lua 脚本。 1、概念 In computer networks,rate limitingis used to control the rate of traffic sent or received by a network interface controller and is used to prevent DoS attacks 用我..

Java圈全能架构师的博客 545
上一篇: 延时消息常见实现方案
下一篇: 面试官问,怎么实现一个定时任务调度器?如果是分布式下的呢?
Javaesandyou
博客等级 码龄5年 742粉丝 563原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值