全局限速

尽管分布式 断路器 通常在控制分布式系统中的吞吐量方面非常有效,但在某些情况下它并不十分有效,并且需要全局限速。最常见的情况是,当大量主机转发到少量主机并且平均请求延迟很低时(例如,连接/请求到数据库服务器)。如果目标主机变得繁忙,下游主机将压垮上游集群。在这种情况下,在每个下游主机上配置足够严格的断路器限制非常困难,以至于系统在典型请求模式下正常运行,但在系统开始出现故障时仍能防止级联故障。全局限速是这种情况的良好解决方案。

Envoy 提供两种全局限速实现

  1. 每个连接或每个 HTTP 请求限速检查。

  2. 基于配额,并带有周期性负载报告,允许在 Envoy 的多个实例之间公平共享全局限速。此实现适用于具有高每秒请求负载的大型 Envoy 部署,这些负载可能不会在所有 Envoy 实例之间均匀分布。

每个连接或每个 HTTP 请求限速

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

  • 网络级限速过滤器:Envoy 将为安装了过滤器的监听器上的每个新连接调用限速服务。配置指定要限速的特定域和描述符集。这最终会影响通过监听器的每秒连接限速。 配置参考

  • HTTP 级限速过滤器:Envoy 将为安装了过滤器的监听器上的每个新请求调用限速服务,并且路由表指定应调用全局限速服务。对目标上游集群的所有请求以及来自源集群到目标集群的所有请求都可以被限速。 配置参考

限速服务 配置

请注意,Envoy 还支持 本地限速。本地限速可以与全局限速一起使用,以减少对全局限速服务的负载。例如,本地令牌桶限速可以吸收可能压垮全局限速服务的非常大的负载突发。因此,限速分两个阶段应用。在精细的全局限制完成之前,令牌桶限制会执行初始的粗粒度限制。

基于配额的限速

限速服务的开源参考实现目前不可用。限速配额扩展目前可与 Google Cloud Rate Limit Service 一起使用。

基于配额的全局限速只能应用于 HTTP 请求。Envoy 将使用 HTTP 过滤器 配置 对请求进行分组并从限速配额服务请求配额分配。

限速配额服务 配置