什么是TCPCopy:
TCPCopy是一种针对TCP的基于底层的在线请求复制工具,可以用来帮助解决架构方面的大部分问题。
在不影响在线使用的情况下,把线上的流量复制并且引到测试环境中去,使其达到对server测试的目的。
常用架构测试工具的优缺点:
架构测试效果好坏的关键在于能不能构造与在线匹配的环境。
传统压力测试工具:
优点
简单
成本低
缺点
网络过于理想化
请求往往单一
同一客户端
基于web服务器的请求复制:
优点
请求多样化
成本低
缺点
不具备通用性
丢失网络延迟
占用在线资源较为严重
LoadRunner工具:
优点
效果比前面效果更为真实
缺点
成本高
操作较为复杂
请求与实际请求的多样性还存在一定差距
与真实在线的网络状况还存在一定差距
TCPCopy详细介绍:
基本原理
TCPCopy 是一种请求复制(复制基于 TCP 的 packets)工具 ,通过复制在线数据包,修改 TCP/IP 头部信息,发送给测试服务器,达到欺骗测试服务器的TCP 程序的目的,从而为欺骗上层应用打下坚实基础。
TCPCopy 不是基于应用层的复制,而是基于底层数据包的请求复制,这么做的好处是:可以做到无需穿透整个协议栈,路程最短的,可以从数据链路层抓请求包,从数据链路层发包,路程一般的,可以在IP层抓请求包,从IP层发出去,不管怎么走,只要不走TCP,对在线的影响就会小得多。
架构图如下:
特点
实时
效果真实
低负载,不影响在线
操作简单
分布式
功能
性能领域
分布式压力测试
增强传统压力测试工具的真实性
性能对比试验,比如apache vs nginx
可用性
热备份
崩溃试验
针对server的DDOS攻击
预热
可测试性
冒烟测试
应用领域
凡是能够轻松被破解的协议,TCPCopy就能有用武之地。
基于tcp的无状态的协议
Http
Memcached
Hmux
...
基于tcp的有状态的协议
Mysql
Pop3
...
注意事项:
1)Linux平台,内核2.6+,需要支持netlink机制。
2)TCPCopy中的tcpcopy和interception orintercept程序运行需要root权限。
3)interception(intercept 0.5+)在同一台机器只需要运行一个实例,多个实例不支持。
4)TCPCopyclient需要连接测试服务器的36524端口,所以要对外开放36524端口。
5)TCPCopy由于依赖于抓包函数,压力大的时候,抓包函数本身不可靠,所以会丢包,进而丢失请求。
6)由于interception(intercept 0.5+)程序密切跟ip queue内核模块相关,所以当压力很大的时候请求丢失率很高,需要优化sysctl系统参数才能达到好的效果。
7)测试环境最好和在线环境一致,比如连接都保持keepalive。
8)TCPCopy只与ip、tcp层的数据有关,如果请求验证与tcp层以上的协议有关,则系统不能正常运行。
9)多层架构环境下,测试系统一定要独立,与在线系统没有业务关联,否则会影响在线。
10)丢失请求率跟网络状况有关,最好在内网内复制请求。
11)TCPCopy不支持域名,只支持ip地址。
12)针对长请求(比如上传文件),0.5版本以下不是很支持,0.5版本及其以上没有此问题。
13)为了避免不必要的麻烦,关闭的时候先关闭tcpcopy,然后再关闭interception。
总结
如果你对上线没有信心,如果你的单元测试不够充分,如果你对新系统不够有把握,如果你对未来的请求压力无法预测,如果你想对比诸如apache和nginx的性能,如果你想放大在线流量,TCPCopy可以帮助你解决上述难题。
本文暂时没有评论,来添加一个吧(●'◡'●)