提示:AI 结果必须带引用;若证据不足会提示“未找到可靠证据”。
云数据库代理网关分布式复压评审报告(2026-02-15)
评审日期:2026-02-15
任务:T20 真实分布式复压与评审
目标服务器:101.126.85.14
1. 测试拓扑
- 网关实例 A:
127.0.0.1:18080(INSTANCE_ID=gateway-a) - 网关实例 B:
127.0.0.1:18081(INSTANCE_ID=gateway-b) - Nginx 粘性入口:
127.0.0.1:28080 - Redis(分布式限流计数):
127.0.0.1:6379(压测期间临时启用) - 压测入口:本地
ab通过 SSH 隧道访问38080/38081/38082
2. 关键验证结论
2.1 粘性路由生效
同一 token 多次请求命中同一实例,不同 token 可分散:
tokenA -> gateway-a(稳定)tokenC -> gateway-b- 真实应用 token 也出现
gateway-a/gateway-b分散
证据文件:
./data/cloud-db-access-gateway-dist-test-2026-02-15/sticky-check.txt
2.2 Redis 分布式限流一致性生效
实验:同一个 app token,同时打两台实例(18080 + 18081),应用限流设为 qps_query=50。
结果(10 秒):
- A 实例:总请求
4873,非 2xx4578,成功295 - B 实例:总请求
4848,非 2xx4639,成功209 - 聚合成功:
504,折算成功 QPS50.4
结论:多实例聚合吞吐被统一限制在约 50 QPS,符合“分布式限流一致性”预期。
3. 吞吐复压结果
3.1 单实例 vs 粘性入口(单 token)
| 场景 | 并发 | RPS | 非2xx | P95(ms) |
|---|---|---|---|---|
single_a (18080) |
100 | 1021.53 | 0 | 185 |
single_b (18081) |
100 | 1023.76 | 0 | 192 |
dual_sticky (28080, 单 token) |
100 | 938.18 | 0 | 188 |
说明:单 token 经粘性入口会固定命中单实例,吞吐不会因为“双实例存在”自动翻倍。
3.2 粘性入口(双 token 并发)
| 子任务 | 并发 | RPS | 非2xx |
|---|---|---|---|
| token-A(命中 gateway-a) | 100 | 466.51 | 0 |
| token-B(命中 gateway-b) | 100 | 469.36 | 0 |
| 聚合 | 200 | 935.87 | 0 |
说明:在“同一台 4C 服务器双实例”条件下,双 token 分散后总吞吐仍约 936 RPS,未显著高于单实例。主要瓶颈为同机 CPU/IO 共享而非路由层。
4. 阻塞项(影响 Go)
本次尝试切换到 CLUSTER_MODE=true + META_DRIVER=mysql 时,服务启动失败:
- 错误:
apply migration 001_init.sql: Error 1064 (42000) - 影响:当前无法在目标环境完成“官方多实例门禁模式”下的完整复压。
该问题属于生产化阻塞项,必须先修复 MySQL 元数据迁移兼容性。
5. Go/No-Go 结论
结论:No-Go(当前不满足“可生产分布式上线”门槛)。
原因:
CLUSTER_MODE=true + META_DRIVER=mysql启动阻塞(迁移错误)。- 复压拓扑是“单机双实例”,总吞吐未体现横向扩容收益。
- 尚未完成“多机多可用区”真实长稳压测(72h)与故障注入验证。
6. 下一步收敛方案
- 修复 MySQL 元数据迁移脚本执行兼容性(优先级 P0)。
- 在至少 2 台网关节点复压(同配置),重新评估吞吐线性扩展比。
- 保留 Redis 分布式限流,补充降级告警与熔断观测。
- 补做 72h 稳定性与故障注入(MySQL 抖动、节点重启、Redis 短暂不可用)。
7. 原始数据
目录:/Users/Zhuanz/work-space/hot-docs/content/docs/reference/data/cloud-db-access-gateway-dist-test-2026-02-15
关键文件:
ab-summary-full.csvsticky-check.txttopology-status.txtsingle_a-c*.log/single_b-c*.log/dual_sticky-c*.logdual_token_a_c100.log/dual_token_b_c100.logredis_limit_a.log/redis_limit_b.log