0Pricing
C# Academy · 课时

速率限制算法

比较固定窗口、滑动窗口、令牌和并发限制器。

速率限制算法 是 CoddyKit 上的免费 C# Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C# Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C# Academy 课程共包含 4 节课。

为什么要进行速率限制

速率限制规定客户端在一段时间内可以发出的请求数量上限。它可以保护 API 免受滥用、失控客户端和意外流量激增的影响,并确保各用户公平共享容量。

// e.g. allow 100 requests per minute per API key

内置速率限制

从 .NET 7 开始,ASP.NET Core 在 Microsoft.AspNetCore.RateLimiting 中提供了完善的速率限制中间件,并内置四种算法。

// Algorithms: Fixed Window, Sliding Window,
//             Token Bucket, Concurrency

固定窗口

固定窗口算法允许在每个固定时间块内发出 N 个请求。时间块结束时,计数器会重置为零。

这种算法很简单,但窗口边界处的突发流量可能会使实际速率短暂翻倍。

// 10 requests per 60s window
// All 10 used at 0:59, 10 more at 1:00 -> 20 in 2 seconds

滑动窗口

滑动窗口通过将窗口划分为多个区段,并向前滚动已过期的区段,平滑边界问题,因此限制会应用于任意连续窗口。

// 10 requests per 60s, 6 segments of 10s each
// The count slides as each segment expires

令牌桶

令牌桶维护一个令牌桶。每个请求消耗一个令牌;令牌以稳定速率补充。它允许在桶容量范围内进行短时突发,同时保持长期平均速率。

// Bucket = 10 tokens, refill 5 tokens / 10s
// Burst of 10 allowed, then 5 every 10 seconds

并发限制器

并发限制器有所不同:它限制的是同时处理中的请求数,而不是单位时间内的请求数。非常适合保护开销较大的操作。

// At most 5 concurrent requests in flight
// The 6th waits in the queue or is rejected

队列

每个限制器都可以将超出限制的请求加入队列,而不是立即拒绝。QueueLimit 设置队列大小,QueueProcessingOrder 设置公平顺序(最早或最新的请求优先)。

// QueueLimit = 2, OldestFirst
// Over-limit requests wait if a slot exists, else get 503/429

选择算法

根据目标选择算法:

  • 固定窗口:最简单,适用于许多场景。
  • 滑动窗口:更加平滑,可以避免边界处的突发流量。
  • 令牌桶:允许受控的突发流量。
  • 并发:限制同时负载,而不是速率。
// Bursty clients -> token bucket
// Expensive endpoint -> concurrency

分区

限制会按分区键应用——通常是用户、API 密钥或 IP——因此某个流量过大的客户端无法耗尽所有人的配额。单个共享分区会将所有流量合并限制。

// Partition by user id, IP, or API key
// Each partition gets its own independent counter

客户端看到的内容

被拒绝的请求会返回 HTTP 429 请求过多。行为良好的 API 还会返回 Retry-After 标头,告知客户端何时可以重试。

// HTTP/1.1 429 Too Many Requests
// Retry-After: 30

速率限制、节流与配额的区别

相关概念:速率限制约束短期频率,配额约束较长期的总量(每天或每月),而节流会降低速度而不是拒绝请求。该中间件专注于速率限制。

// rate limit: 100/min   quota: 10000/day

快速检查

测试您对这些算法的理解。

回顾

您了解了速率限制的概念:

  • 四种算法:固定窗口、滑动窗口、令牌桶和并发。
  • 令牌桶允许突发流量;并发限制器限制同时负载。
  • 限制按分区键应用;队列可以平缓溢出流量。
  • 被拒绝的请求会收到带有 Retry-After 的429响应。

接下来:配置中间件。

常见问题解答

「速率限制算法」课时是免费的吗?

是的 — 「速率限制算法」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C# Academy 课程的其余内容,请升级到 CoddyKit PRO。 C# Academy 课程共包含 4 节课。

「速率限制算法」这节课中我会学到什么?

比较固定窗口、滑动窗口、令牌和并发限制器。 你通过在浏览器中直接运行的动手代码来练习 C# Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 C# Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 C# Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「速率限制算法」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 C# Academy 课中编写并运行代码吗?

能。每节 C# Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 速率限制算法
  2. 配置速率限制中间件
  3. 输出缓存基础
  4. 缓存策略与失效
← 返回 C# Academy