速率限制 是一种重要的机制,用于控制资源利用率并维护服务质量。Go 通过 goroutine、通道和 计时器 优雅地支持速率限制。 |
|
|
|
|
|
|
|
首先,我们将看一下基本的速率限制。假设我们想限制对传入请求的处理。我们将从同名通道中提供这些请求。 |
|
此 |
|
通过在为每个请求提供服务之前阻塞接收来自 |
|
我们可能希望在速率限制方案中允许短时间内的请求突发,同时保留总体速率限制。我们可以通过缓冲 |
|
填满通道以表示允许的突发。 |
|
每 200 毫秒,我们将尝试向 |
|
现在模拟 5 个传入请求。前 3 个请求将受益于 |
|
运行我们的程序,我们看到第一批请求按预期每 ~200 毫秒处理一次。 |
|
对于第二批请求,我们立即处理前 3 个请求,因为使用了可突发的速率限制,然后以 ~200 毫秒的延迟分别处理剩余的 2 个请求。 |
|
下一个示例:原子计数器.