Envoy Gateway 限流机制设计与实现详解
什么是限流
限流(Rate Limit)是一种通过控制请求流量来保护系统的重要机制。在微服务架构中,合理的限流策略能够:
- 防止恶意攻击如DDoS
- 避免后端服务因过载而崩溃
- 实现基于用户权限的API访问控制
Envoy Gateway 限流类型
全局限流(Global)
全局限流是指在整个Envoy代理集群范围内共享的限流策略。例如:
- 当设置限流为10请求/秒时
- 如果数据平面有2个Envoy副本运行
- 第一个副本处理5个请求,第二个副本处理5个请求
- 在同一秒内总共处理10个请求,达到限流阈值
本地限流(Local)
本地限流是指每个Envoy实例独立维护的限流计数器。注意:当前版本尚未实现此功能,将在未来版本中支持。
限流匹配模式详解
1. 针对特定流量的限流
这种模式允许对特定特征的请求进行限流。例如,限制某个特定用户的访问频率:
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: RateLimitFilter
metadata:
name: ratelimit-specific-user
spec:
type: Global
global:
rules:
- clientSelectors:
- headers:
- name: x-user-id
value: one
limit:
requests: 10
unit: Hour
这个配置会限制带有x-user-id: one头部的请求,每小时最多10次。
2. 全流量限流
这种模式适用于保护后端服务,限制特定路由的总请求量:
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: RateLimitFilter
metadata:
name: ratelimit-all-requests
spec:
type: Global
global:
rules:
- limit:
requests: 1000
unit: Second
这个配置会限制匹配路由的所有请求,每秒最多1000次。
3. 基于不同值的限流
这种模式允许对每个不同的值进行独立计数限流:
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: RateLimitFilter
metadata:
name: ratelimit-per-user
spec:
type: Global
global:
rules:
- clientSelectors:
- headers:
- type: Distinct
name: x-user-id
limit:
requests: 10
unit: Hour
这个配置会:
- 识别
x-user-id头部的不同值 - 对每个不同的用户ID独立计数
- 每个用户每小时最多10次请求
4. 基于源IP的限流
这种模式基于客户端IP地址进行限流:
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: RateLimitFilter
metadata:
name: ratelimit-per-ip
spec:
type: Global
global:
rules:
- clientSelectors:
- sourceIP: x.x.x.x/32
limit:
requests: 10
unit: Hour
这个配置会限制来自特定IP地址的请求,每小时最多10次。
多限流策略组合应用
Envoy Gateway支持同时应用多个限流策略,它们会独立评估和执行:
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: RateLimitFilter
metadata:
name: ratelimit-all-safeguard-app
spec:
type: Global
global:
rules:
- limit:
requests: 100
unit: Second
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: RateLimitFilter
metadata:
name: ratelimit-per-user
spec:
type: Global
global:
rules:
- clientSelectors:
- headers:
- type: Distinct
name: x-user-id
limit:
requests: 1000
unit: Hour
这个组合配置实现了:
- 全局保护:每秒最多100次请求(所有用户总和)
- 用户级限制:每个用户每小时最多1000次请求
技术实现原理
Envoy Gateway的限流功能基于Envoy Proxy的全局限流机制实现:
- 动作配置:将RateLimitFilter转换为Envoy的路由动作(Actions)
- 描述符生成:当请求匹配条件时,生成包含关键值的描述符(descriptors)
- 限流服务:描述符发送到远程限流服务进行决策
- 决策执行:Envoy根据限流服务的响应执行限流或放行
实现细节包括:
- 新增xDS IR字段承载用户限流配置
- 增强xDS Translator生成限流动作和过滤器
- 新增rate-limit runner处理限流服务配置
- 基础设施服务部署限流服务实例
最佳实践建议
- 分层防护:结合全局和应用级限流策略
- 合理设置:根据后端服务容量设置限流阈值
- 监控调整:持续监控限流效果并优化配置
- 用户区分:对认证用户和匿名用户设置不同策略
通过Envoy Gateway的灵活限流机制,开发者可以构建健壮的API防护体系,有效保障服务稳定性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



