使用 WebPolygraph 给 Squid 做压力测试

初步搭建 Squid 代理服务并不是什么难事,但是要了解并掌握它的高级用法,那么就要深入学习才能搞定。

其中关于 Squid 的压力测试软件的选择问题,我查询了网上的资料,有很多人提到了比较专业的 WebPolygraph

当然,大神们也提醒我等小白,这个东东非常复杂,没有做好心理准备可不要轻易涉足。

可惜我没有能听进去大神的警告,想着简单地用用总应该没问题吧,结果深陷其中,拔不出来了。

经过接触学习,的确如大神所说,真是复杂,而且我数学不好,英文又烂,眼前的拦路虎一下子跳出好几只。

还好我有个优点,就是吃饱了撑的,慢慢熟悉了一部分初级的用法,现在就我的理解给小伙伴们分享一下,同时如有错误也希望大家及时给予斧正。


准备工作

两台虚拟机,均安装系统Rocky LInux 8.4

后面会先在一台上测试,而后再以服务与客户两端分别在两台上测试。


安装一些必要组件,有可能还有其他的,按实际需要安装即可。

dnf install unzip zlib-devel
 


另外,有个 ldns 要用到,好像不能直接安装,所以需要我们手动给它安装上。

下载链接:https://www.nlnetlabs.nl/downloads/ldns/

dnf install ldns unbound-devel
wget https://www.nlnetlabs.nl/downloads/ldns/ldns-1.7.0.tar.gz
tar zxvf ldns-1.7.0.tar.gz
cd ldns-1.7.0
./configure
make
make install
 


安装 Polygraph

说是 WebPolygraph ,怎么又成了 Polygraph 呢?

其实它就是用来测试 Web 服务器压力的软件,所以名字应该叫作 Polygraph ,不必太较真。


从官网下载最新安装源码包。

官网链接:http://www.web-polygraph.org/downloads/


按以下命令逐步安装,其实配置时加上了 --without-ssl ,是由于我怎么也无法编译通过 SSL ,所以干脆先不要它了,当然这并不影响我们后面的测试。

wget http://www.web-polygraph.org/downloads/srcs/polygraph-4.13.0-src.tgz
tar zxvf polygraph-4.13.0-src.tar.gz
cd polygraph-4.13.0
./configure --without-ssl
make
make install
 


概念介绍

对于初学者来说,概念十分重要,我在网上找的资料都是支离破碎的,需要花时间和精力去将这些碎片拼接起来。

可是很多时候由于碎片太过琐碎,内容又太过简单,最终无法达成将知识串联起来的目的,我学习 Polygraph 时就是这样。

还好经过努力,我大体拼凑出来了一个框架,不知道是不是对的,大家起来看看吧。


polygraph 分为服务端和客户端两部分,这两部分在生产环境下应该分别处于两个不同的主机上。

服务端这个概念很好理解,它是 polygraph 自己模拟的一个 http 服务,类似于 Apache 之类的 web 服务,只不过它默认工作于 9090 端口上,用来让客户端访问请求,进而计算得出测试结果。

另外 polygraph 中有个 robot 一度让我很迷惑,我将它理解为客户端,可以是一个,也可以是多个。

所以通常客户端应该位于被测试的对象机器中,比如应该将 polygraph-client 运行在 Squid 服务器上。

随后开启客户端命令的同时,通过指定这台 Squid 服务器为代理,再模拟请求 polygraph 服务端。


我按自己的理解画了个草图,也是我是自己摸索的,方便大家理解,不一定完全正确,仅供参考。


简单使用

作为演示我们只需要简单地了解以下一些文件。

  • 执行文件

    服务端: /usr/local/bin/polygraph-server

    客户端: /usr/local/bin/polygraph-client

  • 工作负载配置文件

    示例配置文件:/usr/local/share/polygraph/workloads/simple.pg


好了,知道这几样简单的文件我们就可以开始测试了,需要注意的是,目前仅仅是演示用,并不能真正用于生产环境的测试。

测试的方法很简单,在同一台机器上,按以下命令行形式,先执行服务端,再执行客户端。

需要补充的是,同一终端窗口无法同时跑两个程序,所以你应该开启两个终端窗口,一个执行服务端,另一个执行客户端。


服务端命令。

/usr/local/bin/polygraph-server --config /usr/local/share/polygraph/workloads/simple.pg --verb_lvl 10
 


客户端命令。

/usr/local/bin/polygraph-client --config /usr/local/share/polygraph/workloads/simple.pg --verb_lvl 10
 


服务端运行后,它就会处于一个等待客户端的状态,此时并不会有什么请求和响应的信息反映。

一旦客户端上线,我们就可以看到服务端和客户端两边会同时不断地翻滚信息,客户端发送请求,服务端做出响应。

如果要终止程序,那只能手动按下 Ctrl+C 强制停止。

至于反馈出来的信息都是啥意思呢,一会儿后面会说。


可能这时有的小伙伴会注意到,怎么服务端和客户端所引用的配置文件是同一个文件呢?

其实那是因为我们在同一系统中操作的缘故。

打开配置文件 simple.pg 就会看到下面这样的内容。

Server S = {
    kind = "S101"; 
    contents = [ SimpleContent ];
    direct_access = contents;

    addresses = ['127.0.0.1:9090' ]; // where to create these server agents
};
 


很明显,服务端是跑在了 127.0.0.1:9090 这个回送地址,所以客户端只能在本机上运行并在原地踏步了。

因此,如果服务端与客户端是分开的,那么就要将这个地址修改为明确的IP地址了。

比如服务端IP是 10.44.128.61 ,那么就应该像下面这样修改配置。

Server S = {
    kind = "S101"; 
    contents = [ SimpleContent ];
    direct_access = contents;

    addresses = ['10.44.128.61:9090' ]; // where to create these server agents
};
 


重点说明一下,要将 polygraph 客户端安装在 Squid 主机上,polygraph 服务端可以是 Squid 所在的同一台机器,也可以是另外单独的一台机器。

如果两者所处同一台机器中,那么地址就用 127.0.0.1

如果是分开的,那么配置文件中的地址就应该修改为服务端的IP地址加端口号。


添加代理服务器测试

只需要在客户端命令行后添加 --proxy 参数即可。

比如 Squid 服务器是 10.44.0.100:3128

/usr/local/bin/polygraph-client --config /usr/local/share/polygraph/workloads/simple.pg --verb_lvl 10 --proxy 10.44.0.100:3128
 


运行时的统计信息怎么看

**(1) (2) (3) (4) (5) (6) (7) (8) (9)**000.09| i-dflt 23 4.52 196 0.00 0 1000.17| i-dflt 48 5.00 199 0.00 0 1000.25| i-dflt 73 5.00 199 0.00 0 1000.34| i-dflt 98 5.00 198 0.00 0 1000.42| i-dflt 125 5.40 185 0.00 0 1 
 

以下是对运行时统计信息输出的每一列的简要说明。

  1. 开始后的分钟数
  2. “i-”和“p-”代表间隔和基于阶段的统计数据
  3. 当前阶段名称
  4. 迄今为止收到的答复数量(跨所有阶段)
  5. 回复率(每秒回复)
  6. 以毫秒为单位的平均响应时间。对于客户端,响应时间定时器在客户端开始建立连接(或在之前空闲的长连接上开始发送第一个请求字节)时开始;当收到最后一个响应字节时,定时器停止。对于服务器,响应时间计时器在连接被接受(或接收到先前空闲的持久连接上的第一个请求字节)时启动;当最后一个响应字节被写入时,定时器停止。因此,人工服务器xact_think延迟(如果已配置)包含在此测量中。
  7. 命中率百分比(客户端),服务端没有有用的数据
  8. 时间间隔或阶段内的事务错误数 (注意:并非所有错误都是事务错误)
  9. 打开套接字的数量,包括 UDP 和其他内务套接字(如果有); 这个数字通常接近待处理交易的数量; (仅间隔统计!)


以上是官网文档翻译过来的,看得我是云里雾里。

按照我实测结果,参照下面的图片,我来说说我的理解。

比如输出结果的第一行中,我们可以看到:

  1. 到目前为止收到的响应数量为 1624
  2. 每秒响应数为 324.76
  3. 平均每毫秒响应数为 3
  4. 命中率为 0.00(这个应该是没命中,我也无法理解)
000.09| i-dflt 1624 324.76 3 0.00 0 1
 


获取并解读二进制日志

在客户端命令行后添加 --log 参数,并指定日志路径即可。

/usr/local/bin/polygraph-client --config /usr/local/share/polygraph/workloads/simple.pg --verb_lvl 10 --log /tmp/clt.log
 


我们得到的日志文件不能直接打开看,因为它是二进制格式的。

如要查看日志,用 polygraph-lx 命令即可。

/usr/local/bin/polygraph-lx /tmp/clt.log
 


上面这个是查看所有日志内容,其实也可以细分,比如下面那样加个 --objects 参数指定输出对象即可。

/usr/local/bin/polygraph-lx --objects rep.rptm.hist /tmp/clt.logrep.rptm.hist:# bin   min   max   count     %   acc%     3     2     2      26  4.42   4.42    4     3     3     160 27.21  31.63    5     4     4      89 15.14  46.77    6     5     5      81 13.78  60.54    7     6     6      18  3.06  63.61    8     7     7      21  3.57  67.18    9     8     8      30  5.10  72.28   10     9     9      20  3.40  75.68   11    10    10      25  4.25  79.93   12    11    11      21  3.57  83.50   13    12    12      17  2.89  86.39   14    13    13      10  1.70  88.10   15    14    14      10  1.70  89.80   16    15    15       3  0.51  90.31   17    16    16       5  0.85  91.16   18    17    21       5  0.85  92.01   23    22    58       6  1.02  93.03   72    71   234       6  1.02  94.05  365   364  1267       7  1.19  95.24  830  1268  1351       6  1.02  96.26  854  1364  1475       5  0.85  97.11  882  1476  2807       6  1.02  98.13 1123  2832  2975       6  1.02  99.15 1142  2984  3431       5  0.85 100.00/usr/local/bin/polygraph-lx --objects rep.rptm.mean /tmp/clt.logrep.rptm.mean:           119.35
 

按官网文档的说法,解读一下日志内容的意思。

第三列 max 为最大响应时长,有 79.93% 的响应是小于11毫秒的,但是大约有 5% 交互事务花费超过了一秒钟,所以这样就会使得平均响应时间增加到了 119 毫秒。


写在最后

说句实话,以上虽然是我总结出来的内容,但也仅仅是摸到了 Polygraph 的皮毛而已。

还有很多很多更高级的内容需要我们去官网阅读文档才能解锁新的技能。

至少到目前为止,我也没搞清楚,这个压力测试到底如何看待,又如何调整配置来提高系统的抗压能力。

诸如此类问题,看样子只有到官网文档中去寻找答案了。

如果小伙伴们有更好更详细的教程,也希望你们能告诉我,谢谢大家!


扫码关注@网管小贾,阅读更多

网管小贾的博客 / www.sysadm.cc



提交评论

安全码
刷新

© 2020-present 网管小贾 | 微信公众号 @网管小贾
许可协议:CC-BY-NC 4.0 | 转载文章请注明作者出处及相关链接