首页 > 使用jtest工具压测Apache Traffic Server

使用jtest工具压测Apache Traffic Server

置顶声明:下面的内容来自于赵永明的ATS博客, 本文是在他的指导和自身实践基础上整理而成.这里对豪哥的无私热心帮助表示无限感激!

一、概述

1.压力测试的定义

很多情况下,大家都希望在服务器上线前、业务上线前,对业务的支撑能力做一个测试,希望知道自己的改动是不是在进步,是不是能够比较平稳的抗住预期的流量压力,等等,总结下来压力测试的主要用途有:

确定新版本的改进不会引起性能问题

找出业务的单机qps数据,并定义好安全的水位线

使用性能数据作为硬件采购以及预算的参数

更好的理解业务的波动对线上系统的压力

日常开发中,最最有意义的是,找出新代码是否在性能上有回退;找出新的性能改进到底提高了多少。

根据压力的来源,压力测试又会被分为:

实验室仿真压力测试

实验室仿真,在http proxy服务器测试场景下,客户端和服务器端的数据和请求,都是由工具生成的。

业务copy仿真压力测试

显然,如果希望服务器程序真正的能够在线上跑,简单的实验室测试与业务需求肯定是差异非常大,因此就有了为什么不把业务流量复制到系统中来的想法。这也就是所谓的流量复制的压测方式。





2.jtest与ATS压力测试

作为一个高性能的proxy代理服务器,Apache Traffic Server是很难用常用工具进行细致的性能压测的,本文尝试对性能压测进行定义并介绍如何在这种高性能、高并发、大规模的系统中,进行破坏级别的压力测试。

jtest是一个专门用于proxy/cache系统的实验室性能压力测试工具,具有极高的性能。能够同时担当后台服务器和客户端。

ATS系统专用的性能压测工具。

商业的压力测试工具,一般也是一个所谓的盒子,自带客户端、服务器端,能够自己生成模拟流量、copy客户提交流量等,很像目前jtest的模式

最早的jtest被设计为可以分布式的集群上运行,用上层脚本系统起停,来压测一个ATS集群系统,早先的系统并没有考虑像现在这样的多核CPU普遍性。





3.部署原理图

使用jtest进行测试时,不管是否和ATS在同一台物理主机上,jtest都是既充当源服务器,又充当客户端这两种角色,被压测的ATS充当proxy/cache角色,在同一台服务器上。对ATS来说,不管正向代理还是反向代理,都可以使用jtest测试。jtest充当的源站,可以是一个域名,比如“ts.cn”,也可以使用jtest所在主机的hostname。





了解jtest的使用选项





二、jtest和ATS同机压测

jtest作为专门针对ATS的测试,已经就ATS的最简单配置下,做了很多简化的默认参数,以便于用户快速的上手,我们以最简单的本机jtest压测本机的默认配置ATS为例子,介绍最基本的jtest用法:

为了避免测试中出现问题,我们首先确认编译安装后的ATS的records.config中的如下字段值,比如我的主机



当然,我们可以直接在命令行输入下面的命令

hostname

得到这个相同的值。注意,这个值是ATS编译时自动生成的,参见records.config.default中的值



根据这个值,也就是hostname,来设置remap规则。

在默认的空remap.config中添加如下规则

map http://taoyx-ThinkPad-T420:9080/  http://127.0.0.1:9080/

然后在ATS源码中的tools/jtest下面执行下面的命令

./jtest

下面是测试结果





三、jtest和ATS不同机压测

最通常的做法是jtest和ATS分别位于不同的主机上进行压测,这里假设只有一个jtest实例在不同的机器上面,部署环境参考上面的架构图:

被测试的ATS服务器 10.10.110.39上面,监听端口8080

jtest所在的服务器 192.168.90.73,作为源站服务器角色时,监听端口是9080,hostname是90-73.test.local

我们这里压测的并非域名,而仅是上面的hostname,为此在被测试的ATS服务器10.10.110.39的remap.config文件中添加一行

map http://90-73.test.local:9080/  http://192.168.90.73:9080/

然后在jtest所在的服务器上,进入ATS中jtest所在的目录,

cd /usr/local/src/trafficserver-4.1.2/tools/jtest

执行如下命令

./jtest -P  10.10.110.39





四、jtest多实例测试

同上思路,但是修改被测试的ATS配置如下:

在remap.config文件末尾添加如下规则

map http://90-73.test.local:9080/ http://192.168.90.73:9080/

map http:/90-73.test.local:9081/ http://192.168.90.73:9081/

map http://90-73.test.local:9082/ http://192.168.90.73:9082/

在jtest上运行如下命令

./jtest -s 9080 -P 10.10.110.39 & ./jtest -s 9081 -P 10.10.110.39 & ./jtest -s 9082 -P 10.10.110.39







参考文献

[1].永豪,https://blog.zymlinux.net/index.php/archives/906

更多相关:

  • 我的博客上已经有很多这样的ats安装实录了,这次的笔记有些不一样,因为它是ATS目前最新的LTS版本6.2.1的安装,写出来更多的是整理自己的思路,因为很多东西搞过不整理,过一段时间就完全忘记掉了。 安装环境: 在rMBP 15.4上上面安装了VMware Fushion 专业版8.5.1,操作系统是MacOS Sierra 10...

  • 2011年我曾有机会精心研究了ATS Cache Module部分的大部分源码,也绘制了一些蹩脚的图片,但是对比专家和大牛的作品还相去甚远,下面的图片摘自Fall Summit 2014中的ATS committer Alan M. Carroll的ppt,仅作研读ATS源码时作参考和对照,更是对高手极致境界的尊崇和反思。...

  • 转载自https://blog.zymlinux.net/index.php/archives/129 首先申明本人是个实实在在的菜鸟,现在也只是搭建起来ats玩玩简单的,写本文只是为了给完全的小白一个参考而已。 本人刚开始接触ats的时候,从ats安装到配置也遇到了很多基本的问题,在查阅资料解决不了的时候基本都是豪哥耐心...

  • 转载自 https://blog.zymlinux.net/index.php/archives/540 ATS插件开发需要提前了解ATS的插件的一些设计思想,以及系统提供的一些不同方向。我们将会介绍ATS的基础开发知识,以利于后续的插件开发课程讲解。 ATS的SDK文档,是了解ATS的核心设计、接口设计的很重要资料,甚至是老...

  • Intellij IDEA解析jacoco结果文件的方法JaCoCo经常用来分析代码覆盖率,最方便的当然是在Jenkins中集成,能很定时分析代码覆盖率并查看变化情况。如果需要单独查看某一模块中的覆盖率,则可以借助IntelliJ IDEA。一、设置修改用Idea打开对应的项目代码,右上角编辑设置。将代码覆盖的runner修改为jac...

  • 前两天写了一篇关于《阿里Java开发手册中的 1 个bug》的文章,评论区有点炸锅了,基本分为两派,支持老王的和质疑老王的。首先来说,无论是那一方,我都真诚的感谢你们。特别是「二师兄」,本来是打算周五晚上好好休息一下的(周五晚上发布的文章),结果因为和我讨论这个问题,一直搞到晚上 12 点左右,可以看出,他对技术的那份痴迷。这一点我们...

  • 现在的以太网测试仪多数应用于以太网专线及NGN网络,多业务城域网络等各种测试环境。以太网测试仪表提供了强大的分析、统计和处理功能、支持符合IEE802.3标准的10/100/1000Mbps RJ45电口和波长可选的1000Mbps等等,可以用于线缆测试、以太网误码(一、二、三层 )测试、环回时延测试、RFC2544性能测试,支持以监...

  • 在2008年刚刚进入这个行业时,我对于要学什么东西,是迷茫的。记得我在08年的时候,入职的公司给我们这批新人做了培训。培训中介绍了很多概念,告诉我们质量很重要,软件测试前景很好,还教了我们很多软件测试理论知识,在最后还给我们介绍了所谓高大上的自动化测试和性能测试。然而,在之后的三年里,这些当时培训时给我灌输的错误知识,不断地给我职业生...

  • 说明 quic-go是使用Go来重写chromium中的QUIC协议,将来计划过渡到IETF版本的QUIC协议。 目前该协议还处于不断更新和活跃之中,目前IETF版本的QUIC协议草案版本号已经到draft 9 下面是我对REAME的实操记录,以作备忘。 项目主页 https://github.com/lucas-clement...