很长时间不更新博客了。最近做一些压力测试(流量实时导入与离线回放)、内网源(含全部centos、EPEL)、自制RPM包等事情了。个人有点浅显的理解,如各位看官对以上感兴趣,留言告诉我,后面会选择性更新出来,相信对各位都是比较有用的。
本文用较短篇幅介绍Tcpcopy的流量导入,后续会再更新一篇离线模式使用。
一个完善的网站、系统,上线前必须经过完备的压力测试,这是基本的质量保证。在测试过程中,我们使用过 AB、Loadrunner效果都不理想,无法精确还原用户请求。后来我们使用了网易开源的Tcpcopy,还原了真实流量,以及离线流量按需回放等功能,对新业务的上线起了至关重要的作用。
简介:
Tcpcopy是一种请求复制(所有基于tcp的packets)工具,可以把在线流量导入到测试系统中去。
曾经应用于网易的广告投放系统,urs系统,nginx hmux协议等系统,避免了上线带来的很多问题。
现在此工具已经广泛应用于各大互联网公司。tcpcopy鼻祖王波同学(@wbo65),是他在这方面进行了最初探索。(2009年设计并代码实现,仅仅300多行代码就支撑了网易广告投放系统的最初开发,上线零失误,解决上线前数百个问题),当然这个最简单的版本应用范围非常有限,王斌(@wangbin579)在2010年末在这个架构上面进行了深度改造,扩展到1000多行代码)。最新版本1.0.0。
功能:
1)分布式压力测试工具,利用在线数据,可以测试系统能够承受的压力大小(远比ab压力测
试工具真实地多),也可以提前发现一些bug
2)普通上线测试,可以发现新系统是否稳定,提前发现上线过程中会出现的诸多问题,让开
发者有信心上线
3)流量放大功能,可以利用多种手段构造无限在线压力,满足中小网站压力测试要求
架构:
1.0.0版本架构如下图,
上述架构,也即最新架构,是为了极限测试的目的而设计的,把intercept的工作从测试服务器(test server)中offload出来,放到另外一台独立的辅助服务器(assistant server,原则上一定要用同网段的一台闲置的服务器来充当辅助服务器)上面进行截获响应包,而且把原先从IP层捕获响应数据包的工作转移到从数据链路层抓响应包,这些改变大大降低了对测试机器的各种干扰(除了路由设置,其它已经没有影响了),而且大大扩大了捕获响应包的能力。当然这种测试也更加真实。
部署:
此环境准备三台机器,假设我们需要导入Apache的80口流量,Apache安装过程省略。如对上图理解有困难,我画了一张简明草图方便你理解
一、正式节点 1.1.1.1 安装httpd tcpcopy
二、测试节点 1.1.1.2 安装httpd
三、辅助节点 1.1.1.3 安装intercept
安装tcpcopy cd /tmp wget https://github.com/session-replay-tools/tcpcopy/archive/1.0.0.tar.gz tar -zxvf 1.0.0.tar.gz ./configure --prefix=/usr/local/tcpcopy make make install vi /etc/profile.d/tcpcopy.sh #加入下面一行 export PATH=$PATH:/usr/local/tcpcopy/sbin source /etc/profile.d/tcpcopy.sh 安装intercept yum install libpcap-devel cd /tmp wget https://github.com/session-replay-tools/intercept/archive/1.0.0.tar.gz tar -zxvf 1.0.0.tar.gz ./configure --prefix=/usr/local/intercept make make install vi /etc/profile.d/intercept.sh #加入下面一行 export PATH=$PATH:/usr/local/intercept/sbin source /etc/profile.d/intercept.sh #正式环境中运行,将外部访客的IP转换为192.168.10.0/24,方便测试机设置路由 tcpcopy -x 80-1.1.1.2:80 -s 1.1.1.3 -c 192.168.10.x & #测试环境中添加路由 route add -net 192.168.10.0 netmask 255.255.255.0 gw 1.1.1.3 #辅助环境中运行,拦截80请求并丢弃 intercept -i eth0 -F 'tcp and src port 80' -d
效果:
用浏览器访问真实节点时,查看测试节点access_log是否滚动。
总结:
再次感谢Tcpcopy的开源作者(@wangbin579)的无私奉献。如有问题可留言回复,希望能帮到你。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/opensource/191301.html