回答
收藏
分享
举报
nginx ngx_http_mirror_module 流量复制阻塞问题
提问于2020-09-17 13:09

浏览 1.3k

 使用 ngx_http_mirror_module 进行流量复制的时候遇到一个问题,请教各位大佬

问题背景

准备在不影响生产环境的情况下将生产入口流量复制一份到测试环境,做测试验证工作;

问题描述

当测试环境的服务器响应缓慢或者停掉的时候,会阻塞生产的请求响应,这个是绝对不能接受的。

nginx 配置

如下图所示,安装nginx后只添加了 mirror 复制配置,其他均未作调整

  • 192.168.132.8 部署nginx,master(模拟生产服务器)服务节点
  • 192.168.132.1 部署mirror(模拟测试服务器)服务节点
        listen       80;
server_name 192.168.132.8;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {
mirror /mirror;
proxy_pass http://192.168.132.8:8080;
}



location = /mirror {
internal;
proxy_pass http://192.168.132.1:8090/$request_uri;
proxy_set_header X-Original-URI $request_uri;
}

测试结果

 场景TPS 
  直连 master  4532
  通过 nginx 访问 master  2567
  通过 nginx 访问 master 并复制流量到 mirror
  675
  通过 nginx 访问 master 并复制流量到 mirror (mirror throw exception)  883
  通过 nginx 访问 master 并复制流量到 mirror (mirror sleep 10s 后返回)  9.7
  通过 nginx 访问 master 并复制流量到 mirror (mirror 停机)  阻塞


期望效果

  • 复制流量到测试环境完全不影响生产环境的使用,(无论测试环境是否停机,抛出异常,或是阻塞,都不影响生产环境的使用)
  • 添加nginx代理进行流量复制后,性能下降控制在可接收范围内(TPS 从 2567 直接降到 675 确实降低太多)

已修改于2023-03-04 02:11



写下您的回答
发表回答
全部回答(1)

按点赞数排序

按时间排序

没办法完全不受影响的,因为mirror是子请求,当子请求未结束时,主请求消耗的内存至少是无法释放的。你可以尝试在/mirror里,把超时时间大幅度调低,包括connect/read/send,再压下看看。

赞同

2

回复举报

回答于2020-09-17 14:15



回复陶辉
回复
提问者
犹达斯
这家伙很懒还未留下介绍~
0
文章
1
问答
0
粉丝
相关问答

options请求?需要跨域访问? 

点赞 0
浏览 990

感觉需要写模块来支持。或者看看现有的grpc模块支不支持这个功能。

点赞 0
浏览 522

开源版本身不支持 ftp,因为有alg的问题。

可以参考这个插件。

 https://github.com/pei-jikui/nginx-alg。


点赞 0
浏览 619