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

概述

对于一些有并发要求的业务,特别是对接外部流量时,产品上线前一定要做的就是压力测试,但是常规的压力测试并不能覆盖所有情况。以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
1cef10770ad172f2dc30e5eee5a669f3.png
  • Nginx模块ngx_http_mirror_module,在Nginx 1.13.4中开始引入

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


流量复制--Nginx模块ngx_http_mirror_module

a44c39fb64def911df91129b3d559304.png

参考配置

配置如下:

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 进行实时分析。

9ed2777819de83102910176d84215904.png

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mongodb+java_Java EE + MongoDb与Apache TomEE和Jongo Starter项目

mongodbjava知道MongoDB和Java EE ,但是您不确切地知道如何将它们集成在一起? 您是否阅读了很多有关该主题的内容,但没有找到适合该目的的解决方案? 这个入门项目适合您: 您将学习如何以一种时尚的方式使用MongoDB和J…

C语言天才!想法奇异?还是逼格满满?一份国外C语言写的传奇简历

C语言天才!想法奇异?还是逼格满满?一份国外C语言写的传奇简历作者用代码更新了自己的简历,是不是很接地气,特符合程序员的逼格。这是一份可读可执行的语言源文件,也是作者编码风格的体现。C语言源码&#x…

hash值 更改git_Git切换版本

Git切换版本有三种方式:1.基于哈希值切换》基于哈希值切换(推荐),命令:git reset --hard 哈希值,哈希值从哪来,git reflog查看下就知道了,切换版本后,git reflog会发现有两个HEAD,别…

devc++ 文件未编译问题

点击 文件 然后点击关闭全部文件, 重新打开一下软件件就好了

候选JEP:记录和密封类型

马克赖因霍尔德(Mark Reinhold )本周在OpenJDK琥珀色开发者邮件列表上宣布了两个新的紧密相关的候选 JDK增强提案( JEP) ,其帖子分别为“ 新候选JEP:359:记录(预览) ”和…

fedora mysql_Fedora server 安装Mysql8

导读MySQL是一种关系数据库管理系统(RDBMS),作为服务器运行,提供对多个数据库的多用户访问。 这是指导,如何在Fedora 28/27/26,CentOS 7.5 / 6.10和Red Hat(RHEL)7.5 / 6.10上安装或升级MySQL社区服务器最新版本8.0(8.0.12)/5.7(5…

lombok 生成代码_使用Project Lombok减少Java应用程序中的样板代码

lombok 生成代码对Java编程语言最常提出的批评之一是它需要大量的样板代码 。 对于简单的类尤其如此,该类只需要存储一些值就可以。 您需要这些值的getter和setter方法,也许您还需要一个构造函数,覆盖equals()和 hash…

让C/C++程序员告诉你什么叫浪漫,表白黑科技,炫酷多彩求爱利器

前言缘是美丽的邂逅,爱是心跳的感觉,情是心灵的交会,恋是甜蜜的思念,走在爱与被爱的边缘,你见或者不见,爱你的心始终不改变!C语言诠释爱——为TA写下心中情,生成程序传给TA&#xff…

mysql 支持json_MySQL 5.7 对 JSON 的支持

最近有个业务需要能够存储Json并做一些简单的业务逻辑处理。业务找到我说json的数据分析很难用mysql 5.6,这样的纯粹行存来处理难度很大,问我有没啥办法。我第一想到的是mongodb,第二想到的就是mysql 5.7 。 然后一查,哎呀,已经GA…

Java十六进制浮点文字

我如何遇到十六进制浮点数 我正在Java :: Geci中开发一种新功能,以减少代码重新格式化的可能性。 如果重新格式化,当前版本的代码将覆盖原本相同的代码。 这很烦人,因为按下重新格式化键的快捷键相当容易,而且许多项目甚至要求开发…

mysql内部损坏_mysql表损坏故障案例

开发人员反映猎豹有个功能报500错误,让我查一下服务器上有没有做过什么调整,额,不会吧,今天元旦啊,谁会闲的蛋疼去调试服务器啊,最后他们查到了和一个表有关的sql都执行不了,那肯定是这个表损坏…

C语言对电脑做的事儿啊,总有那么一丝恐怖,C语言操盘电脑两例

C语言对自己电脑做的事儿啊,总有那么一丝恐怖,C语言与电脑两例开场先抱歉,偷懒好多天了。今天分享给大家的l两例比较短小精悍,都是针对于计算机屏幕处理的两例,有兴趣的可以放到自己电脑上运行哦。绝对无害&#xff0c…

servlets_jQuery Ajax – Servlets集成:构建完整的应用程序

servlets网上有很多教程,它们解释了有关使用servlet和JSP页面进行Java Web开发的一些知识,但是,我从未找到对于初学者来说足够简洁的教程。 这样的教程应该解释创建一个简单的Web应用程序的整个过程,包括前端,后端&…

mysql分库分表的缺点_MySQL分库分表会带来哪些问题?

分库分表能有效的环节单机和单库带来的性能瓶颈和压力,突破网络IO、硬件资源、连接数的瓶颈,同时也带来了一些问题。下面将描述这些技术挑战以及对应的解决思路。1、事务一致性问题分布式事务当更新内容同时分布在不同库中,不可避免会带来跨库…

JEP 358:有用的NullPointerExceptions

在文章“ 更好的默认NullPointerException消息是否会传入Java? ”,我总结了当时与JEP 草案有关的背景细节,有关使某些类型的NullPointerException (NPE)消息更有用。 上周很高兴看到该JEP现在是候选 JEP ( …

C语言的恶趣味,胆小者莫入,以免入门到放弃,C语言夺命题十例!

前言这些问题测试了C语言的高级知识,包括一些很少使用的特性。有效的C编程需要对诸如未定义的行为,递归和指针算术等概念有深入的理解,但是这些故意复杂的例子并不代表现实世界的代码,当然也不会为了清晰和可维护性而获得任何奖励…

java学习里程碑_记录您的里程和社区运行情况:Java EE 7真实体验

java学习里程碑miles2run.org是跟踪跑步活动并与亲朋好友共享的简便方法。 可以创建然后跟踪基于天或基于距离的目标。 它还允许创建社区运行目标,并使多个跑步者参与并跟踪他们朝着该目标的活动。 您还可以找出本地跑步者并与他们联系。 该项目已开始,…

elementui ts vant冲突_如何解决vue多个ui框架css冲突?

解决方法有很多,如果可以对html改动的话,就给你需要细化的页面元素加多一个class或者ID就行了,当然这种方法应该不是你想要的。那么接下来是不改变HTML的情况下,直接用css的方法来实现你想要的效果——方法一 细化选择符假如全局是…

在Spring中使用@ResponseStatus获取Http状态

介绍: 在Spring MVC中,我们可以通过几种方式设置HttpResponse的状态。 在本教程中,我们将使用ResponseStatus批注实现它。 我们可以使用ResponseStatus标记带有状态码和应返回原因的方法或异常类。 在调用标记的处理程序方法时或引发指定的异…

遇C语言条件编译就犯怵,不知什么意思,c语言头文件中的宏定义

前言看见头文件中的条件编译就犯怵,不知什么意思,但是,你老师说:”就得那么写“,你照做,但是知其然而不知其所以然。今天分享下是自己的理解~~~纯属个人献丑,新手可阅,老鸟绕道。代码…