概述

对于一些有并发要求的业务,特别是对接外部流量时,产品上线前一定要做的就是压力测试,但是常规的压力测试并不能覆盖所有情况。以gemeter、ab,、webbench、http_load为例,这些通过模拟请求的压测工具,只能发送特定的参数,对于一些参数异常导致的程序处理异常是无法考虑到的,所以就需要一款能复制真实流量,并且不影响线上业务的工具。

流量复制工具有很多,例如Gor、tcpreplay、tcpcopy等,这些工具贴合真实场景,能模拟真实流量,并支持流量的放大或缩小,更容易测试出程序的瓶颈和潜在问题。

几款流量复制工具:

  • gor: https://github.com/buger/goreplay
  • tcpreplay: https://github.com/appneta/tcpreplay
  • tcpcopy: https://github.com/session-replay-tools/tcpcopy
  • Nginx模块ngx_http_mirror_module,在Nginx 1.13.4中开始引入

下面重点介绍nginx模块ngx_http_mirror_module和gor。


流量复制--Nginx模块ngx_http_mirror_module

参考配置

配置如下:

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; }}

流量放大,配置两个mirror即可

location / { mirror /mirror; mirror /mirror; proxy_pass http://backend; }

使用是很方便,但是线上nginx一般都承载了不止一个业务,修改nginx配置后需要nginx -s reload来使之生效,这种操作在线上还是尽量需要避免的。


流量复制--gor

Gor 是用 Golang 写的一个 HTTP 实时流量复制工具。功能更强大,支持流量的放大、缩小,频率限制,还支持把请求记录到文件,方便回放和分析,也支持和 ElasticSearch 集成,将流量存入 ES 进行实时分析。

1、下载安装

只需要下载安装,也可以下载编译好的二进制文件直接使用

#wget https://github.com/buger/goreplay/releases/download/v0.16.1/gor_0.16.1_x64.tar.gz#tar xzvf gor_0.16.1_x64.tar.gz

2、流量复制

gor也可以将流量复制到文件,然后再对他们进行回放。回放的时候,流量会维持原始的时间间隔。如果使用了百分比来进行速率限制,那么回放的速率会相应的增加或减少。有了这种速率限制,gor就可以用来进行压力测试。

#write to filegor --input-raw :80 --output-file requests_origin.gor#read from filegor --input-file requests_origin.gor --output-http "http://localhost:8081"

3、流量回放

目前,这种方式只支持"input-file

流量复制_详解Linux系统流量复制--gor、tcpcopy、nginx模块流量复制等相关推荐

  1. linux 查看网络流量来源_详解Linux查看实时网卡流量的几种方式

    在工作中,我们经常需要查看服务器的实时网卡流量.通常,我们会通过这几种方式查看Linux服务器的实时网卡流量. 1. sar -n DEV 1 2 sar命令包含在sysstat工具包中,提供系统的众 ...

  2. linux 删除分区_详解linux系统架构--文件系统体系

    概述 之前已经对Linux系统架构的内核部分单独做了深入介绍,今天就拿Linux系统架构中的文件系统做一下介绍吧~先介绍下概念: 文件系统是文件存放在磁盘等存储设备上的组织方法.Linux系统能支持多 ...

  3. rhel系统启动过程_详解linux系统的启动过程及系统初始化

    一.linux系统进程启动流程图: 二.简单概括描述linux系统从开机到登陆界面的启动过程 1.开机BIOS自检 2.MBR引导 3.grub引导菜单 4.加载内核 5.启动init进程 6.读取i ...

  4. linux中负载值为多少正常_什么是cpu负载_cpu负载多少正常_详解Linux系统的CPU负载均值...

    上一篇文章的最后,作者提到了文章的参考来源,我特意前往访问了下,发现写得非常不错,特转过来,可以结合阅读,以便更容易理解 CPU 负载这个概念. 你可能对于 Linux 的负载均值(load aver ...

  5. linux traceroute命令详解_详解Linux系统路由跟踪指令traceroute语法、工作原理和实例说明...

    概述 traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径.当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不 ...

  6. find linux 目录深度_浪里淘沙,详解Linux系统中Find命令的实用技巧

    知了小巷:浪里淘沙,详解Linux系统中Find命令的实用技巧. 啊哈,找到了! 当我们需要在Linux系统上定位某个文件或目录时,find命令通常是必备之选. 它使用起来非常简单,但有许多不同的可选 ...

  7. php ping icmp,Linux_详解Linux系统中ping和arping命令的用法,pingping 程序使用 ICMP 协议的强 - phpStudy...

    详解Linux系统中ping和arping命令的用法 pingping 程序使用 ICMP 协议的强制回显请求数据报以使主机或网关发送一份 ICMP 的回显应答.回显请求数据报(" ping ...

  8. 详解Linux系统Vi 和 Vim中正常模式、编辑模式、命令模式相互转化,以及vim命令使用

    详解Linux系统Vi 和 Vim中正常模式.编辑模式.命令模式相互转化 vi 和 vim 的基本介绍 vi 和 vim 的三种常见模式 正常模式 正常模式常用命令 插入模式/编辑模式 命令行模式 v ...

  9. php执行md5sum,Linux_详解Linux系统中md5sum命令的用法,MD5算法常常被用来验证网络文 - phpStudy...

    详解Linux系统中md5sum命令的用法 MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改.MD5全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任 ...

最新文章

  1. 机器学习公开课~~~~mooc
  2. MongoDB整理笔记の管理Replica Sets
  3. SpringCloud系列七:Hystrix 熔断机制(Hystrix基本配置、服务降级、HystrixDashboard服务监控、Turbine聚合监控)...
  4. 设置 JAVA_HOME
  5. Link-Cut Tree
  6. 不同page页面选择不同页面模板的方法
  7. Linux中VMware虚拟机硬盘空间扩大方法
  8. java的二叉树及三种遍历
  9. r语言 线性回归 相关系数_R语言系列第四期:R语言简单相关与回归
  10. Axure教程:淘宝商品图片放大效果
  11. 我的Android进阶之旅------经典的大牛博客推荐(排名不分先后)!!
  12. 考计算机证书指南,计算机二级证书:备考和实战指南--教育频道[温州网]
  13. Outlook 365 添加企业Exchange邮箱(亲测)
  14. 团队管理8--管理工作框架及技能图谱
  15. Could not enlist in transaction on entering meta-aware object
  16. 方差分析——单因素方差分析
  17. stm32控制半导体制冷器实现饮水机保温制冷功能
  18. 毕业四年后一次同学聚会-性格决定命运
  19. 【图】2345看图王
  20. 100、基于51单片机数码管温控 温度控制风扇系统设计

热门文章

  1. 向Java最佳专家的全球专家学习Java
  2. java嵌入式db_Java DB嵌入式模式
  3. GitHub Research:超过50%的Java记录语句写错了
  4. 地图事件触发_使用地图触发功能处理相干事件
  5. JSR-308和Checker框架为jOOQ 3.9添加了更多类型安全性
  6. 在Kotlin中使用libGDX
  7. java序列化深克隆_克隆可序列化和不可序列化的Java对象
  8. 如何在没有Springockito的情况下模拟Spring bean
  9. EE Servlet 3:使用会话和过滤器开发用户登录
  10. 在JBoss Fuse / Fabric8 / Karaf中使用Byteman