avatar

Ryan's Blog

The first step is always the hardest.

  • 首页
  • 分类
  • 标签
  • 归档
  • 关于
  • 工具
Home APISIX proxy-mirror 流量镜像实践:灰度验证、监控分析与注意事项
文章

APISIX proxy-mirror 流量镜像实践:灰度验证、监控分析与注意事项

Posted 2022-07-13 Updated 15 days ago
By Ryan Chen
15~19 min read

APISIX 的 proxy-mirror 插件可以将真实请求复制一份发送到镜像服务,用于灰度验证、旁路分析、兼容性测试和流量观测。镜像请求不会影响原请求的正常响应,镜像服务返回的响应会被忽略。

这篇文章整理 proxy-mirror 的使用方式、配置参数、验证流程和生产注意事项。

相关系列文章:

  • APISIX 入门指南:核心概念、Docker 部署与基础路由配置
  • APISIX Dashboard 使用指南:路由、服务、上游与插件配置实践

适用场景

流量镜像适合:

  • 新版本服务上线前,用真实流量进行旁路验证。
  • 将部分请求复制到分析系统,做 API 监控和行为分析。
  • 验证重构服务与旧服务的兼容性。
  • 对接口请求进行离线审计或压测评估。
  • 灰度前观察新系统处理真实请求的能力。

不适合:

  • 需要把镜像服务响应返回给客户端的场景。
  • 会产生副作用的写接口直接镜像到真实环境。
  • 未做脱敏的数据流向不受控分析系统。

工作原理

请求流程可以理解为:

Client
  │
  ▼
APISIX Route
  │
  ├── 正常请求 -> 原上游服务 -> 响应客户端
  │
  └── 镜像请求 -> 镜像服务 -> 响应被忽略

关键点:

  • 原请求仍按正常路由转发。
  • 镜像请求是额外复制出来的请求。
  • 镜像服务响应不会返回给客户端。
  • 可以通过采样率控制镜像流量比例。

原验证目标示意图:

流量镜像目标

环境准备

示例:

  • 默认上游地址:10.249.0.121:31370
  • 镜像上游地址:10.249.0.121:31379

验证前建议:

  • 确认 APISIX 能访问镜像服务。
  • 镜像服务最好与生产写库隔离。
  • 对写请求做好幂等或禁写处理。
  • 镜像服务日志要能区分镜像流量。

Dashboard 配置方式

在 APISIX Dashboard 中进入目标 Route 的插件配置,找到 proxy-mirror 插件并启用。

选择 proxy-mirror 插件

常见参数:

参数 说明
host 镜像服务地址,需要包含 http 或 https scheme
path 镜像请求路径;不指定时通常使用当前请求路径
sample_ratio 镜像采样率,范围以官方文档为准

示例配置:

{
  "host": "http://10.249.0.121:31379",
  "sample_ratio": 1
}

sample_ratio=1 表示全部镜像。生产环境建议从较小比例开始,例如 0.01 或 0.05,观察镜像服务压力后再逐步调整。

提交后可以观察镜像服务日志:

镜像服务收到流量

Admin API 配置方式

通过 Admin API 为路由配置 proxy-mirror:

curl -i "http://127.0.0.1:9180/apisix/admin/routes/mirror-demo" \
  -H "X-API-KEY: your-admin-key" \
  -X PUT \
  -d '{
    "uri": "/store/v1/*",
    "plugins": {
      "proxy-mirror": {
        "host": "http://10.249.0.121:31379",
        "sample_ratio": 0.1
      }
    },
    "upstream": {
      "type": "roundrobin",
      "nodes": {
        "10.249.0.121:31370": 1
      }
    }
  }'

验证:

curl -i "http://127.0.0.1:9080/store/v1/orders"

然后分别观察:

  • 原上游是否正常返回。
  • 镜像上游是否收到请求。
  • 客户端响应是否仍来自原上游。

关闭流量镜像

Dashboard 中可以直接关闭插件启用状态。

关闭插件

Admin API 中可以删除或更新路由插件配置。

建议在生产环境中记录:

  • 启用时间。
  • 启用接口。
  • 镜像目标。
  • 采样比例。
  • 关闭时间。
  • 观察结论。

生产注意事项

1. 镜像请求可能产生副作用

如果镜像的是 POST、PUT、DELETE 请求,而镜像服务连接真实数据库,就可能造成重复写入、重复扣减、重复通知等严重问题。

建议:

  • 镜像服务使用隔离数据库。
  • 对写操作做禁写或 dry-run。
  • 对外部通知、支付、库存等副作用操作做屏蔽。

2. 控制采样率

不要一开始就全量镜像。建议:

1% -> 5% -> 10% -> 50% -> 100%

每一步观察:

  • 镜像服务 CPU / 内存。
  • 请求耗时。
  • 错误率。
  • 日志写入压力。
  • 下游依赖压力。

3. 注意数据安全

镜像流量可能包含:

  • Token。
  • Cookie。
  • 手机号。
  • 身份证。
  • 地址。
  • 订单和支付信息。

如果镜像到分析系统或测试环境,需要做脱敏、权限控制和数据留存治理。

4. 镜像响应被忽略

proxy-mirror 的核心特性是镜像响应不会影响客户端。这既是优点,也是限制:

  • 适合旁路验证。
  • 不适合动态选择响应。
  • 不适合直接做蓝绿切流。

如果需要按比例把真实响应返回给用户,应评估 traffic-split 等流量切分方案。

常见问题

1. 镜像服务没有收到请求

检查:

  • 插件是否启用。
  • 当前请求是否命中目标 Route。
  • host 是否包含 http:// 或 https://。
  • APISIX 到镜像服务网络是否连通。
  • sample_ratio 是否过低导致暂时未命中。

2. 客户端响应变慢

理论上镜像请求不应该显著影响主链路,但如果插件处理、网络或资源出现瓶颈,仍可能间接影响网关。

检查:

  • APISIX 节点资源。
  • 镜像服务是否响应很慢。
  • 是否全量镜像大流量接口。
  • 网关日志是否有异常。

3. 镜像服务数据异常

检查:

  • 是否镜像了写接口。
  • 是否连接了真实数据库。
  • 是否重复消费消息或调用第三方接口。
  • 是否缺少 dry-run 控制。

总结

APISIX proxy-mirror 插件非常适合做旁路验证和流量分析,但生产使用时要特别关注副作用、采样率、数据安全和隔离。简单来说:

  • 读接口更适合镜像。
  • 写接口必须谨慎处理副作用。
  • 从小流量采样开始。
  • 镜像服务响应不会返回客户端。
  • 如需真实切流,应考虑 traffic-split 等方案。

参考资料

  • Apache APISIX proxy-mirror 插件官方文档
  • Apache APISIX Plugins
  • APISIX kafka-logger 日志采集实践:写入 Kafka 并接入 Elasticsearch / Kibana
指南
APISIX proxy-mirror 流量镜像 灰度验证 API监控 流量分析
License:  CC BY 4.0
Share

Further Reading

Jun 27, 2026

Agent 架构设计原则:Router、Runtime 与 Business Script 的职责划分

本文整理一套适合 Router Agent + Skill + Runtime 架构的设计原则:Agent 只负责业务决策,Runtime 统一负责执行、恢复、Trace、Checkpoint 和 Evidence,Business Script 只做确定性业务执行。

Sep 9, 2024

Redis 核心概念、数据结构与高可用架构详解

系统梳理 Redis 的核心数据类型、底层结构、过期与淘汰、持久化、事务、主从复制、Sentinel、Cluster、缓存一致性和分布式锁等机制,适合作为 Redis 学习、面试复习和高可用架构设计参考。

Sep 5, 2024

B+树原理与 MySQL InnoDB 索引机制解析

本文从 B+ 树的多叉平衡结构、叶子节点链表、范围查询和磁盘 I/O 特性出发,解释数据库索引为什么常采用 B+ 树,并结合 MySQL InnoDB 的聚簇索引、二级索引、回表、覆盖索引和联合索引机制理解其实际应用。

OLDER

APISIX kafka-logger 日志采集实践:写入 Kafka 并接入 Elasticsearch / Kibana

NEWER

APISIX 入门指南:核心概念、Docker 部署与基础路由配置

Recently Updated

  • Agent 架构设计原则:Router、Runtime 与 Business Script 的职责划分
  • RocketMQ 架构设计与应用最佳实践:高可用消息队列核心解析
  • Redis 核心概念、数据结构与高可用架构详解
  • B+树原理与 MySQL InnoDB 索引机制解析
  • MySQL AUTO_INCREMENT 插入 0 变成自增值的原因与解决方案

Trending Tags

RocketMQ Windows Feign Docker Zipkin SonarQube OkHttp HttpClient API 性能优化

Contents

©2026 Ryan's Blog. Some rights reserved. · 粤ICP备2022031588号