Rate-limiting

常用限流措施:

  • 网关层限流
  • MQ流量削峰
  • 单机协程池限流

网关层一般先通过 rate 包做一层简单的单机防护,再通过 Redis + Lua 做令牌桶限流 (允许一定程度的突发流量),全局精准控制QPS上限。
MQ流量削峰:

  • 平时(同步): 网关 -> 订单服务 -> 数据库(DB 压力大,容易崩)。
  • 大促(异步): 网关 -> 订单服务 -> MQ -> 下游服务 -> 数据库。

单机限流,避免瞬发流量(网关限流阈值内)引发单机的OOM。

令牌桶算法理解

  • 系统以恒定速率向桶中放入令牌。如果请求(request)需要处理,必须先从桶中获取一个令牌。当桶中没有令牌时,拒绝请求(request)。
  • 令牌桶算法允许突发流量在阈值范围内激增

漏桶算法理解

  • 所有的请求(request)缓冲至桶内,系统以恒定的速率处理请求(request),当请求(request)的量累积至溢出桶外,拒绝请求(request)。

需要更平滑的流量控制,令牌桶算法可能更适合;如果你需要严格的速率控制,漏桶算法可能更合适。


Comments