搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 运维帮 > 流量搬运工,Nginx模块ngx_http_mirror_module

流量搬运工,Nginx模块ngx_http_mirror_module

运维帮 2018-06-30

转自订阅号:小米运维


本篇文章介绍了七层流量复制的一种方法,通过引入ngx_http_mirror_module模块实现流量复制的效果。


压力测试重要性与压测工具


在业务系统开发的流程里,压力测试是很重要的一个环节,通过压测可以掌握服务程序的响应时间、并发数、吞吐量等,从而可预估系统的服务质量、可承载用户和需要的硬件资源,以及定位系统瓶颈等。


在 WEB 应用测试中,常用的流量产生工具大体可以分为两种:


  1. 模拟请求工具,以 ab, webbench、http_load 等为例 ,这些工具小巧简单,上手学习较快;但不足以还原真实场景,同时它们的请求模式也过于单一和理想化;

  2. 流量复制,以 Gor、tcpreplay、tcpcopy 等,这些工具复制的流量贴近真实场景,支持流量的放大和缩小,但是实现也就相对复杂一些。


而我们经常使用的 Nginx, 它其实也是一个很棒的流量复制工具,那就是模块 ngx_http_mirror_module,是在 Nginx 1.13.4 中引入,它是一种应用层的流量复制工具, 与其他工具相比它有以下几点优点:


  1. 可以将线上流量拷贝到测试环境,实时的模拟线上环境;

  2. 该模块内置于 nginx 中,不需要经过复杂的配置就能实现 ,目前只实现了两个配置指令,用法相当简单;

  3. 支持流量放大,对线上影响较小。

指令说明

Directives


Syntax: mirror uri | off;
Default:

mirror off;

Context:

http, server, location


设置将镜像原始请求的 URI。 几个镜子可以在同一层上指定。


Syntax: mirror_request_body on | off;
Default:

mirror_request_body on;

Context: http, server, location

指定是否镜像请求 body 部分,此选项与 proxy_request_buffering、fastcgi_request_buffering、scgi_request_buffering 和 uwsgi_request_buffering 冲突,一旦开启 mirror_request_body 为 on,则请求自动缓存。

使用演示

配置如下
server {
listen 8080;
access_log /home/work/log/nginx/org.log;
root html/org; 
}

server {
listen 8081;
access_log /home/work/log/nginx/mir.log ;
root html/mir; 
}
upstream backend {
server 127.0.0.1:8080;
}
upstream test_backend {
server 127.0.0.1:8081;
}
server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
    mirror /mirror;
    proxy_pass http://backend;
    }
    location /mirror {
        internal;
    proxy_pass http://test_backend$request_uri;
    }
}
配置说明


如上配置

端口 8080 服务可代表 生产环境, 端口号 8081 代表测试环境。

端口 80 代表生产中的 L7 层。


为了方便看到效果, 我们在两个目录中创建一个 index.html 文件,内容分别为 org 和 mir

echo org > org/index.html

echo mir > mir/index.html


验证


curl http://127.0.0.1/index.html
org

可以看到在客户端看来,它得到了 org 的响应内容,说明是我们图中生产环境中响应


再来看下服务器上的日志:

流量搬运工,Nginx模块ngx_http_mirror_module


可见 生产环境和 测试环境分别 收到一个 请求。

流量放大


添加配置如下:

流量搬运工,Nginx模块ngx_http_mirror_module


curl http://127.0.0.1/index.html
org

客户端来看,仍然是正常接收到一个响应;但是对于压测环境中 却已经变成了两个请求,实现了流量放大效果。




运维帮提供购买云主机大优惠

主流云厂商都已和运维帮达成战略合作,不管是1台还是100台,都可以享受到价格优惠,请联系群秘书。


欢迎加入「运维帮地方群」,现在有北京地方群、上海地方群、深圳地方群、成都地方群、广州地方群、杭州地方群。入群请先加群秘书(长按识别下方二维码),加群秘书时请告知所在城市及公司


群秘书微信,扫描下方二维码

版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《流量搬运工,Nginx模块ngx_http_mirror_module》的版权归原作者「运维帮」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注运维帮微信公众号

运维帮微信公众号:yunweibang

运维帮

手机扫描上方二维码即可关注运维帮微信公众号

运维帮最新文章

精品公众号随机推荐