2. Envoy 限流架构总览:全局限流与本地限流架构、限流过滤器链、限流服务组件关系

在微服务网关与 Sidecar 代理中,Envoy 提供了两种核心的限流模式:本地限流(Local Rate Limiting)与全局限流(Global Rate Limiting)。理解这两种模式的架构差异、过滤器链编排方式以及限流服务组件的协作关系,是掌握 Envoy 限流工程应用的基础。

2.1 全局限流 vs. 本地限流:架构对比

对比维度 全局限流(Global RL) 本地限流(Local RL)
决策中心 外部独立的限流服务(Rate Limit Service) Envoy 代理进程内部
数据一致性 强一致(依赖 Redis/etcd 等集中存储) 弱一致(每个 Envoy 实例独立计数)
延迟开销 高(每次请求需 RPC 调用限流服务) 低(纯内存操作,无网络开销)
适用场景 全局配额、跨集群共享限流、用户级限流 单机削峰、过载保护、冷启动预热
配置复杂度 高(需部署限流服务 + 配置描述符) 低(仅需 Envoy 配置)
冷启动削峰适配度 中等(依赖外部组件响应速度) 高(本地决策,响应迅速)
工程建议:在冷启动削峰场景中,优先采用本地限流作为第一道防线,利用其低延迟特性快速抑制突发流量;全局限流可作为全局兜底策略,用于跨集群的配额管控。

2.2 限流过滤器链:请求处理路径

Envoy 的限流能力通过 HTTP 过滤器(HTTP Filter)链实现。在 HTTP 连接管理器中,限流过滤器按照特定顺序插入,形成一条处理流水线:

  1. Router Filter(路由过滤器) — 确定请求的目标集群。
  2. Rate Limit Filter(限流过滤器) — 根据路由配置触发限流检查。
  3. Fault Filter(故障注入过滤器) — 可选,用于测试。
  4. Upstream Codec(上游编解码) — 转发请求到上游服务。

限流过滤器本身支持两种操作模式:

  • 全局限流模式:将限流描述符(Descriptor)通过 gRPC 发送给外部限流服务,等待决策。
  • 本地限流模式:在 Envoy 进程内使用令牌桶算法直接判断,不依赖外部服务。
关键配置片段:本地限流过滤器配置示例
http_filters:
- name: envoy.filters.http.local_ratelimit
  typed_config:
    "@type": type.googleapis.com/envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimit
    stat_prefix: http_local_rate_limiter
    _bucket:
      max_tokens: 100
      tokens_per_fill: 10
      fill_interval: 1s
    filter_enabled:
      runtime_key: local_rate_limit_enabled
      default_value:
        numerator: 100
        denominator: HUNDRED
    filter_enforced:
      runtime_key: local_rate_limit_enforced
      default_value:
        numerator: 100
        denominator: HUNDRED
    response_headers_to_add:
      - header:
          key: "X-Local-Rate-Limit"
          value: "true"

2.3 限流服务组件关系:全局限流架构

全局限流架构涉及多个组件的协作,其核心交互流程如下图所示:

全局限流架构组件关系图 客户端 Envoy 代理 限流过滤器 限流服务 Redis 存储 上游服务 请求 gRPC 限流请求 计数/查询 决策响应 放行/拒绝 说明:全局限流依赖外部限流服务与集中存储(如 Redis),每次请求均需 RPC 交互,延迟较高但全局计数准确。

2.4 本地限流架构:进程内决策

本地限流架构更为简洁,所有限流逻辑在 Envoy 进程内部完成,无需外部依赖:

本地限流架构组件关系图 客户端 Envoy 代理 本地令牌桶 上游服务 请求 消耗令牌 放行 令牌不足 → 拒绝 说明:本地限流在 Envoy 进程内维护令牌桶,决策延迟极低(微秒级),适合冷启动削峰等对响应速度要求高的场景。

2.5 限流服务组件关系总结

Envoy 限流架构中的核心组件及其职责可归纳如下:

组件 角色 关键接口/协议 冷启动削峰中的作用
Envoy HTTP 连接管理器 请求入口,管理过滤器链 HTTP/1.1, HTTP/2, gRPC 承载限流过滤器,控制请求处理流程
限流过滤器(HTTP Filter) 执行限流检查逻辑 envoy.filters.http.local_ratelimit / envoy.filters.http.ratelimit 根据配置决定是否放行或拒绝请求
限流服务(RLS) 全局限流决策引擎 envoy.service.ratelimit.v3.RateLimitService 提供全局配额查询,适用于跨集群场景
令牌桶( Bucket) 本地限流核心算法 max_tokens, tokens_per_fill, fill_interval 控制突发流量,实现平滑限流
限流描述符(Descriptor) 定义限流规则的匹配条件 key-value 对,支持通配符 精细化控制不同维度的限流策略
架构选型提醒:在冷启动削峰场景中,如果采用全局限流,务必关注限流服务的响应延迟和可用性。限流服务本身的故障可能导致整个集群的限流能力丧失。建议采用本地限流为主、全局限流为辅的混合架构,并通过 filter_enabled 和 filter_enforced 运行时参数动态调整限流生效比例。