极简的流量复制和放大方式

简介: 极简的流量复制和放大方式

nginx除了做一些负载均衡以外,可以比较方便的处理流量,进行一些流量的复制和放大的功能。


1. 流量复制的好处

1. 可以验证功能是否正常,以及服务的性能;

2. 用真实有效的流量请求去验证,又不用造数据,不影响线上正常访问;

3. 相比于灰度发布,镜像流量不会影响真实流量;

4. 可以用来排查线上问题;

5. 重构,假如服务做了重构,这也是一种测试方式;


2. nginx流量复制模块-ngx_http_mirror_module

  • 源站请求,直接原路返回;正常配置下,mirror请求不影响源站请求及响应,源站nginx-server将流量复制到mirror站后,两者不再有任何交集。


  • 示例
upstream kevin-order {
  server 127.0.0.1:8088;
}
upstream kevin-mirror1 {
    server 172.16.60.230:8088;
}
server {
    listen 80;
    server_name  kevin.com;
    access_log  /usr/local/nginx/logs/kevin.com-access.log main;
    error_log   /usr/local/nginx/logs/kevin.com-error.log;
  # 源站点1
    location /order {
        proxy_pass http://kevin-order;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 复制请求体
        mirror_request_body on;
        # 流量复制
        mirror /mirror1;
    }
    # 镜像站点1
    location /mirror1 {
        proxy_pass http://kevin-mirror1$request_uri;
        proxy_pass_request_body on;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

配置说明:上面配置中,将访问http://kevin.com/order的流量复制到172.16.60.230服务器的8088端口。


3. 流量放大

server {
        listen       80;
        server_name  kevin.com;
        # 源站配置
        location / {
                access_log  /usr/local/nginx/logs/access.log  accesslog;
                mirror /mirror;
                # 多加一份mirror,流量放大一倍
                mirror /mirror;
                mirror_request_body on;
                proxy_pass http://kevin.upstream.name;
        }
        # 镜像站点配置
        location /mirror {
                internal; # 内部配置
                proxy_pass http://mirror.kevin.upstream.name$request_uri;
                proxy_pass_request_body on;
                proxy_set_header X-Original-URI $request_uri;  #使用真实的url重置url
        }
}


参考链接:https://www.cnblogs.com/kevingrace/p/14001080.htmlhttp://nginx.org/en/docs/http/ngx_http_mirror_module.html

nginx1

相关文章
|
存储 前端开发 定位技术
前端加载超大图片实现秒开解决方案
前端加载超大图片实现秒开解决方案
|
3月前
|
消息中间件 存储 Java
三类代码协同模式问题之压缩异常输出以提高性能和节省存储空间的问题如何解决
三类代码协同模式问题之压缩异常输出以提高性能和节省存储空间的问题如何解决
在图片上停留时逐渐增强或减弱的透明效果demo效果示例(整理)
在图片上停留时逐渐增强或减弱的透明效果demo效果示例(整理)
|
前端开发 开发者
|
分布式数据库 数据库
复制延迟案例(1)-最终一致性
该案例违反因果律。 想象先生和夫人之间的对话: Mr Mrs,你能看到多远未来? Mrs 通常约10s,Mr.
89 0
|
JSON 数据格式 计算机视觉
案例分享:Qt的80路显示超大屏幕拼接(十台服务器,每台八路摄像头)方案和Demo
案例分享:Qt的80路显示超大屏幕拼接(十台服务器,每台八路摄像头)方案和Demo
|
编解码 算法 前端开发
Cartographer参数调整来降低延迟的策略
Cartographer参数调整来降低延迟的策略
|
定位技术
HMI-23-[增加模式]增加地图模式
基于Qt的汽车仪表模拟
111 0
HMI-23-[增加模式]增加地图模式
|
存储 缓存
云存储网关复制模式新玩法 - 部分复制
说到云存储网关的复制模式,相信不少人都有既爱又恨的感觉。复制模式确实是一个非常实用的功能,它将数据在云端和网关侧同时保留了两份,不但降低了数据丢失的风险,同时也极大地提高了从网关访问数据的性能。如果预算允许,我相信所有用户都会选择复制模式,这样所有的数据都会缓存在网关,使用起来性能绝对是杠杠的。
623 0
云存储网关复制模式新玩法 - 部分复制
|
Java
Java实现图片内容无损任意角度旋转
转自:http://blog.csdn.net/heliang7/article/details/7309394 主要问题是如何在图片做旋转后计算出新图片的长宽。 在java 2d和基本math库的帮助下,其实利用简单的计算就可以知道。
1292 1