使用tcpcopy导入线上流量进行功能和压力测试
使用tcpcopy导入线上流量进行功能和压力测试
JAN 8TH, 2014
假设我们要上线一个两年内不会宕机的先进架构。在上线前,免不了单元测试,功能测试,还有使用ab,webbench等等进行压力测试。
但这些步骤非生产环境下正式用户的行为。或许你会想到灰度上线,但毕竟可能会影响到部分用户,这怎么对得起我们两年内不宕机的承诺呢?
好在网易的 王斌 开发了tcpcopy, 可以导入线上流量进行功能和压力测试。
tcpcopy介绍
tcpcopy
是一种请求复制工具。可以将线上流量拷贝到测试机器,实时的模拟线上环境。在不影响线上用户的情况下,使用线上流量进行测试,以尽早发现bug。也可以通过放大流量,进行压力测试,评估系统承载能力。
tcpcopy
可以从线上服务器的IP
层抓取在线请求的数据包,修改相关属性,利用raw socket output
技术(packet injection
技术之一)将其发送给测试服务器进行测试。
发送到测试服务器的数据包会在TCP/IP
协议栈被识别,其中带有payload
(tcp data)的数据包最终进入到测试服务器的上层应用(如nginx),上层应用在处理完请求之后,将响应传递给测试服务器的TCP/IP
协议栈。
在测试服务器上启用ip_queue
模块,并使用iptables
在IP
层将响应结果数据包发往QUEUE(ip_queue
)。
测试服务器上运行在用户空间
的拦截程序(intercept进程),通过打开netlink
的socket接受内核通过ip_queue
所传递来的网络数据包(即上层应用的响应内容)进行裁定,将结果返回内核,进行出队列的操作。intercept进程默认会丢弃上层应用的响应内容,返回ip header,以释放tcp连接。
intercept进程也可以通过-x
(passlist)参数,不drop指定ip lists发出请求的响应内容。默认drop是为了:
1 减少出口带宽占用,节约成本
2 不影响客户端(线上服务)的`TCP/IP`协议栈
3 不会在互联网上产生ghost数据包
tcpcopy工作流程
如上图,tcpcopy拷贝一次流量访问的步骤如下:
① 一个访问到达线上前端机;
② socket数据包在ip层被拷贝了一份传给tcpcopy进程;
③ tcpcopy修改包的目的及源地址,发给目标测试机;
④ 拷贝的包到达目标测试机;
⑤ 目标测试机的nginx处理访问,并返回结果;
⑥ 返回结果在ip层被截获、丢弃,由intercpet进程拷贝返回结果的ip header并返回;
⑦ ip header被发送给线上前端机的tcpcopy进程。
安装和配置
tcpcopy有两种工作模式:
1 实时拷贝数据包
2 通过使用tcpdump等抓包生成的文件进行离线(offline)请求重放
如果采用实时拷贝线上流程进行导入的方式,需要分别在线上服务器和测试服务器安装tcpcopy
,对于离线模式,只需要在测试服务器上安装tcpcopy
,编译时指定 --enable-offline
。
安装步骤如下:
wget https://github.com/wangbin579/tcpcopy/archive/0.9.0.tar.gz -O tcpcopy-0.9.0.tar.gz --no-check-certificate
tar zxvf tcpcopy-0.9.0.tar.gz
cd tcpcopy-0.9.0
./autogen.sh
./configure --prefix=/usr/local/tcpcopy
make
sudo make install
目标测试机配置
线上服务器拷贝的数据包发送至测试服务器进行处理之后,测试服务器需要通过iptables
将响应结果发送至QUEUE(ip_queue
),这样测试服务器上运行的intercept
拦截进程才能通过打开的netlink
socket获取传递过来的数据包并进行裁定。所以测试服务器上需要开启iptables
防火墙,并启用内核模块ip_queue
modprobe ip_queue
/etc/init.d/iptables start
因为线上服务器需要和目标测试服务器通信,传递请求数据包和控制信息(封装的ip packet header),所以需要在测试服务器上添加相关iptables
防火墙规则。编辑/etc/sysconfig/iptables
,添加:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 36524 -j ACCEPT
然后重启iptables
/etc/init.d/iptables restart
接着执行:
iptables -I OUTPUT -p tcp --sport 80 -j QUEUE
将响应结果发送至QUEUE(ip_queue
),从而实现运行在用户态的进程对相关数据包进行裁定。
相关使用
本文以线上和测试机的web服务都使用80端口,传递控制信息使用默认的36524端口为例。如果使用别的端口,记得修改相关iptables
防火墙规则。
离线 offline
1) 在线上服务器抓包
tcpdump -i eth0 tcp and port 80 -s 0 -w online.pcap
2) 将抓包生成的文件拷贝到测试服务器
3) 在测试服务器上进行执行如下命令进行重放
cd /usr/local/tcpcopy/bin
sudo ./intercept
sudo ./tcpcopy -i /path/online.pcap -x 80-10.16.12.11:80tcpcopy -i <抓包文件地址> -x <port>-<本地ip>:<port>
在线实时复制 online
1) 在测试服务器上启动intercept
拦截进程
cd /usr/local/tcpcopy/bin
sudo ./intercept
2) 在线上服务器复制流量到测试服务器
cd /usr/local/tcpcopy/bin
sudo ./tcpcopy -x 80-10.16.12.11:80 -c 10.16.12.12tcpcopy -x 服务器应用端口号-测试服务器ip地址:测试服务器应用端口 -c 本地服务器ip
reference:
[^1] https://github.com/wangbin579/tcpcopy
[^2] http://www.searchtb.com/2012/05/using-tcpcopy-to-simulate-traffic.html
[^3] http://hi.baidu.com/yacker/item/e6bd5b287fe5a3f150fd8731
[^4] http://blog.yam.com/hn12303158/article/35207136
Posted by jqlblue Jan 8th, 2014 devops
使用tcpcopy导入线上流量进行功能和压力测试相关推荐
- TCPCopy 线上流量复制工具
TCPCopy是一种重放TCP流的工具,使用真实环境来测试互联网服务器上的应用程序. 一.描述: 虽然真实的实时流量对于Internet服务器应用程序的测试很重要,但是由于生产环境中的情况很负责,测试 ...
- 线上流量对比应用实践
一.流量比对提出背景 我们在进行代码重构以及需求迭代时,在上线之前需要进行一轮.二轮以及回归测试,如果业务场景比较复杂,那么就会存在以下几个方面的问题: (1)测试的周期就会相应的拉的比较长: (2) ...
- 微服务引擎的线上流量治理最佳实践
简介:本实践将重点介绍如何快速集成主流开源微服务框架,实现业务零改造,解决开源框架在生产落地过程中的痛点,例如无损上下线.标签路由等,并通过托管微服务开源组件(API网关.注册中心.配置中心等)的服务 ...
- 对登录功能进行压力测试:
对登录功能进行压力测试: 测试要求: 1)测试系统能否支持"100 个"用户同时并发登录:即看100个左右用户并发登录时,系统的响应情况是什么样,能否达到我们的要求. 2)登录功能 ...
- java线上流量复制工具_tcpcopy复制线上流量
TCPCopy七大功能 1)分布式压力测试工具,利用在线数据,可以测试系统能够承受的压力大小(远比ab压力测试工具真实地多),也可以提前发现一些bug 2)普通上线测试,可以发现新系统是否稳定,提前发 ...
- 线上流量突增百万高可用保障方案
一:事前预防 1.预估系统瓶颈 1.1 梳理核心接口 按调用量梳理Top100 PM按业务重要等级梳理下端可能起量的接口 输出终版的接口文档 1.2 评估核心接口最高的TPS 测试环境模拟生产环境数据 ...
- 线上bug检测工具 android,Android 测试中对于偶现且难以重现的 bug 的处理
吐槽 请先允许我对此类 bug 进行吐槽,相信做测试的同学都碰见过这种 bug! 我们在测试过程中经常会碰见一类很头疼的 bug,就是偶现性的 bug,所谓偶现性,是相对于必现而言,这类 bug 有些 ...
- 史上最全《JMeter压力测试教程》——通俗易懂,3天即可学会
性能测试 为什么要进行性能测试? 满足真实场景的业务需求 招聘需要 性能测试概念: 性能:软件质量属性中的"效率"特性 性能测试:使用自动化工具,模拟不同的场景,对软件各项性能指标 ...
- 楼盘vr实景线上虚拟展示功能及特点
VR展示将一些不具备有利地理位置的厂商,可以利用VR展示设计,虚拟还原数字化工厂.智能化商品.打造智能系统,让商品活起来,让店火起来. 深圳华锐视点通过VR技术,把实体店360度无死角,搬到网上个性化 ...
最新文章
- 【python】解压文件
- 添加日志文件组与日志文件成员
- 二十五、爬取毛豆新车的数据
- 是否应该频繁升级小米的系统?
- 给SAP Spartacus B2B list增加用户提示信息
- R语言数据转换(split-apply-combin…
- node.js 初体验
- SQL笔记-通过构建索引表方便数据库管理
- Go的http库详解
- 2017.10.3 国庆清北 D3T2 公交车
- Linux 命令汇总!【珍藏版】
- Winpcap笔记4之不用回调函数捕获数据包
- c语言 删除程序注释,C/C++ 源文件删除注释代码
- Markdown 数学公式语法
- 被低估的电池管理系统BMS
- SII9136添加HDCP功能
- Cesium资料大全
- 基于FPGA的数字时钟设计
- vue中新增弹出对话框操作
- 十强队伍来了!网易云信 Innovation 2022 开发者大赛决赛名单公布
热门文章
- 用半周积分算法求电压,电流有效值的c语言程序,半波整流电压有效值与功率的直观推导...
- 超级计算机图像处理云桌面,并行超算云桌面3.0正式发布,欢迎使用!
- GLUE基准数据下载
- 全球最大光伏电池缺陷异常检测数据集PVELAD【发布】
- Linux网络编程之网络基础
- 机器学习调参——网格搜索调参,随机搜索调参,贝叶斯调参
- Sed命令替换指定文件中某一行所有内容
- vue 在线预览、下载word、pdf文件
- Leetcode2086. 从房屋收集雨水需要的最少水桶数(medium)
- 医疗平台在线咨询文本分析——爬取数据(一)