全局限流

尽管分布式 熔断器 在大多数情况下控制分布式系统中的吞吐量非常有效,但有时它的效果并不是很好,这时候便需要全局限流。最常见的情况是当大量主机转发到少量主机并且平均请求延迟很短时(例如,发送给数据库服务器的连接/请求)。若目标主机成为备机,则下游主机将压垮上游集群。在这种情况下,很难对每个下游主机配置足够严格的熔断器,使得系统可以平稳运行,同时,当系统开始出现故障时,仍然可以防止级联故障。对于这种情况,全局限流是一个很好的解决方案。

Envoy 可以直接与全局 gRPC 限流服务集成。尽管可以使用任何实现定义 RPC/IDL 协议的服务,但 Lyft 提供了 Go 编写的使用 Redis 后端的 参考实现 。Envoy 的限流具有以下功能:

  • 网络级限流过滤器:Envoy 将会对配置了该过滤器的监听器上的每一个新请求调用限流服务。该配置指定了要设置限流的特定域和描述符。最终会限制每秒经过监听器的并发连接。参考配置

  • HTTP 级限流过滤器:Envoy 将会对配置了该过滤器且路由表指定应调用全局限流服务的监听器上为每个新请求调用限流服务。所有向目标上游集群发出的请求以及从源集群向目标集群发出的所有请求都可以进行限流。参考配置

限流服务 配置

注意,Envoy 还支持 本地限流。本地限流可以与全局限流结合使用,以减少全局限流服务的负载。例如,本地限流通过令牌桶可以承受非常大的突发负载,否则可能会压垮全局限流服务。因此,限流分为两个阶段。全局限流进行细粒度的分布式限流调控,本地限流通过令牌桶的方式进行粗粒度的限流。