<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>场景题 on Tequila's 学习笔记</title><link>https://latnx.github.io/docs/notes/d-205f3859abe469be/d-e303a4ad6f96797b/</link><description>Recent content in 场景题 on Tequila's 学习笔记</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>© 2026 Tequila</copyright><atom:link href="https://latnx.github.io/docs/notes/d-205f3859abe469be/d-e303a4ad6f96797b/index.xml" rel="self" type="application/rss+xml"/><item><title>高并发限流</title><link>https://latnx.github.io/docs/notes/d-205f3859abe469be/d-e303a4ad6f96797b/n-976be63085041031/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://latnx.github.io/docs/notes/d-205f3859abe469be/d-e303a4ad6f96797b/n-976be63085041031/</guid><description>高并发限流解决方案 # 随着微服务架构的日益普及，服务之间的依赖和调用关系变得更加复杂，确保服务的稳定性变得尤为关键。在实际业务中，经常会遇到瞬时流量激增的情况，这可能导致请求超时，甚至引发服务器过载和宕机。为了保护系统自身及其上下游服务，我们通常会采用限流措施，迅速拒绝超过设定上限的请求，保障系统及上下游服务的稳定运行。合理的限流策略可以有效应对流量激增，确保系统的可用性和性能。本文接下来将深入探讨了几种常见的限流算法，比较它们的优缺点，并提供限流算法选择的建议，同时针对业务中的分布式限流提出了多种解决方案
1. 什么是限流 # 限流是高并发场景下，通过控制系统处理请求的速率，迅速拒绝超过设定上限的请求，保障系统及上下游服务的稳定运行的一种服务保护策略。
在限流技术中， 需要理解两个主要概念：阈值和拒绝策略
阈值：
阈值这是指在单位时间内允许的最大请求量。例如，将QPS（每秒请求数）限制为1000，意味着系统在1秒内最多接受1000次请求。通过设置适当的阈值，可以有效控制系统负载，避免系统因过多请求而崩溃或性能下降
拒绝策略：
处理超过阈值请求的方法。常见的拒绝策略包括直接拒绝和排队等待
直接拒绝策略会立即拒绝超过阈值的请求，然后直接向用户返回 排队等待策略则将请求放入队列中，按照一定规则处理，避免瞬间拒绝大量请求。 选择合适的拒绝策略可以在系统稳定性和用户体验之间取得平衡，能够帮助系统应对突发流量激增、恶意访问或频繁请求的情况，保障系统的稳定性和可用性。限流方案根据实施范围分为单机限流和分布式限流。其中，单机限流根据算法又可以细分为固定窗口、滑动窗口、漏桶和令牌桶等四种常见类型，接下来将详细介绍这些限流方案
2. 为什么要限流 # 限流主要是保证在高并发场景下，可以拒绝掉一部分请求，避免因过载导致系统崩溃或性能下降，从而保证服务能够健康稳定的运行。具体来看，主要有以下一些原因：
2.1 防止系统过载 # 2.2 提升系统稳定性 # 2.3 应对突发流量 # 瞬时高峰处理：在特定时间段（如促销活动、突发事件等），请求量可能突然增加。限流可以控制请求速率，平稳地处理瞬时高峰。
恶意请求防护：限流可以防止恶意用户或攻击者通过大量请求来消耗系统资源，提高系统的安全性。
3. 限流基本算法 # 3.1 固定窗口限流 # 3.1.1 算法原理 # 固定窗口限流是最简单直观的一种限流算法，其基本原理是将时间划分为固定大小的窗口，并在每个窗口内限制请求数量或速率。具体来说，就是将请求按照时间顺序放入时间窗口中，并计算该时间窗口内的请求数量，如果请求数量超出了限制，则拒绝该请求
算法步骤：
将时间划分为固定大小的窗口，例如每秒一个 在每个时间窗口内，记录请求的数量 当新的请求到达时，增加计数器的值加1 如果计数器的值超过了预设的阈值（例如3个请求），则拒绝该请求 当时间窗口结束时，重置计数器 如上图，假设时间窗口长度为1s，限流阈值为3，每秒内超过3个以上的请求都会被拒绝
3.1.3 优点 # 算法实现非常简单，易于实现和理解
3.1.4 缺点 # 请求分布不均匀：在固定窗口算法中，请求在窗口内的分布可能会不均衡，导致某些窗口内的请求量超出阈值，而其他窗口内的请求较少
应对突发流量能力有限：由于固定窗口算法的窗口大小是固定的，无法灵活调整，因此难以应对突发的流量高峰
存在明显的临界问题：在窗口结束时重置请求计数可能会导致处理请求的不公平。例如，窗口结束前的最后一秒内请求数已达上限，而窗口开始时的第一秒内请求计数为零
比如：限流阀值为每秒5个请求，单位时间窗口为1秒。如果在前0.5秒到1秒的时间内并发5个请求，接着在1秒到1.5秒的时间内又并发5个请求。虽然这两个时间段各自都没有超过限流阈值，但如果计算0.5秒到1.5秒的总请求数，则总共是10个请求，已经远远超过了1秒内不超过5个请求的限流标准。 3.1.5 适用场景 # 固定窗口算法适合在请求速率有明确要求且流量相对稳定的场景中使用。然而，对于应对突发流量和请求分布不均匀的情况，该算法可能表现不足，此时需要考虑使用其他更灵活的限流算法。
3.2 滑动窗口限流 # 3.2.1 算法原理 # 滑动窗口其实也是一种通过将时间窗口划分为一个一个小的时间段来限流的方法，每个小的时间段又称之为小周期。相比于固定窗口限流，它可以根据时间滑动删除过期的小周期，以解决固定窗口临界值的问题</description></item></channel></rss>