请求镜像
使用路由级别的请求镜像策略(request_mirroring_policies
),可以配置 Envoy 将流量从一个集群镜像到另一个集群。
请求镜像概念
流量镜像或请求镜像是指将发往一个集群的入站请求复制并发送到第二个集群。镜像的请求是"发送即忘"的,意味着 Envoy 不会等待镜像集群响应就发送主集群的响应。
请求镜像模式不会影响发送到主集群的流量,并且由于 Envoy 会收集镜像集群的所有统计信息,这是一种有用的测试技术。
重要注意事项
除了"发送即忘"特性外,确保镜像的请求是幂等的。否则,镜像请求可能会扰乱服务与之通信的后端。
镜像请求的 authority/host 头部会附加 -shadow
字符串。
配置示例
route_config:
name: my_route
virtual_hosts:
- name: httpbin
domains: ["*"]
routes:
- match:
prefix: /
route:
cluster: httpbin
request_mirror_policies:
cluster: mirror_httpbin
runtime_fraction:
default_value:
numerator: 100
denominator: HUNDRED
上述配置将发送到 httpbin
集群的 100% 入站请求镜像到 mirror_httpbin
。
镜像策略配置
基本配置
request_mirror_policies:
cluster: mirror_cluster # 镜像目标集群
runtime_fraction:
default_value:
numerator: 50 # 镜像 50% 的流量
denominator: HUNDRED
运行时配置
request_mirror_policies:
cluster: mirror_cluster
runtime_fraction:
default_value:
numerator: 0
denominator: HUNDRED
runtime_key: mirror.percentage # 运行时键
配合运行时配置:
layered_runtime:
layers:
- name: static_layer
static_layer:
mirror.percentage: 25 # 镜像 25% 的流量
多镜像策略
可以配置多个镜像策略:
route_config:
virtual_hosts:
- name: example_vhost
domains: ["*"]
routes:
- match:
prefix: /
route:
cluster: main_cluster
request_mirror_policies:
- cluster: mirror_cluster_1
runtime_fraction:
default_value:
numerator: 50
denominator: HUNDRED
- cluster: mirror_cluster_2
runtime_fraction:
default_value:
numerator: 25
denominator: HUNDRED
使用场景
1. 测试新版本
将生产流量镜像到新版本服务,验证功能而不影响用户体验。
2. 性能测试
镜像真实流量到测试环境,进行性能基准测试。
3. 调试和监控
镜像流量到专门的调试集群,分析请求模式。
4. 数据收集
镜像流量到分析服务,收集业务数据。
最佳实践
- 确保镜像集群能够处理镜像流量
- 监控镜像集群的性能和资源使用
- 使用运行时配置动态控制镜像比例
- 定期清理镜像配置,避免资源浪费
- 确保镜像请求的幂等性
注意事项
- 镜像请求会增加网络和计算开销
- 镜像集群故障不会影响主流量
- 镜像请求的响应会被忽略
- 建议在生产环境中谨慎使用
请求镜像是 Envoy 中强大的流量管理功能,合理使用可以显著提升系统的可观测性和测试能力。