仔细上上图,我们可以发现两个信息:
看上去很赞吧?如果有人能够提供配置,并且在单台部署HAProxy的服务器上完成这样规模的调优,是不是更赞?本文将详细描述这个过程;)
本文是一系列关于HAProxy压力测试文章的最后一篇。如果有时间,建议读者能够先阅读本系列的其余两部分。这样能够更好的帮助我们了解本文所提及的内核级别调优需要的一些背景知识
为了达到前面提到的效果,整个设置过程依赖许多小型组件。在贴出HAProxy的最终配置之前(如果读者实在没有耐心,可以滚动到底部直接查看),本文会按照笔者思路一步步实现最终目标
本文测试使用的组件软件是Haproxy 1.6版本。我们一直在生产环境的4核30GB内存服务器上使用该版本,不过目前所有的连接都不是基于SSL的。
本次实验我们将测试2个指标:
我们需要获取第一个指标是因为我们即将全面铺开的特性依赖基于SSL的通信。而第二个指标的目的是能够合理安排生产环境中的HAProxy专用机器的数量。
如果读者阅读过本系列的第一篇文章,应该知道我们整个基础设施支持两种协议:
在我们的技术栈中,没有使用HTTP 2.0,因此没有持久化HTTP连接的功能性需求。因此在生产环境中单台HAProxy机器的连接数(输入+输出)大约在2*150k。虽然并发连接数不高,但是每秒请求数还是相当高的。
和HTTP协议不同,MQTT协议是另一种通信协议。它提供了服务质量(QoS)相关参数,同时也支持连接持久化。因此在MQTT信道上可以进行双向的持续通信。由于HAProxy可以支持MQTT(基于TCP)连接,我们统计到单台服务器高峰期有大约600-700k个TCP连接。
我们希望压力测试能够给出HTTP和MQTT两种协议连接数的具体数据。
针对HTTP应用服务器,有很多现成工具可以帮助我们完成压力测试并且能够提供该诸如结果汇总、图表绘制等;但是对于MQTT协议,却鲜有类似的工具。我们自己开发了一个工具,但是在这种高压力场景下不够稳定。
因此我们决定使用HTTP压力测试客户端来模拟MQTT协议配置。很有意思吧?让我们继续。
后面将会详细描述整个调优过程,希望能够对类似场景压力测试和性能测试有所帮助。
ping
请求响应pong
。ab
是HTTP协议压力测试工具中较为有名且比较稳定的工具,同时它提供了不错的汇总报告,能够帮助分析结果。ab
提供了许多有用的参数,在后面的压力测试中也使用到了,例如:
- c,并发量
定义并发请求服务的数量;-n,请求数
定义当前压力测试的总请求数;-p 发送文件
通过POST请求发送文件;如果仔细观察这些参数,我们可以发现通过这三个参数可以组合出很多不同的用例。一个简单的ab
命令例如:
ab -S -p post_smaller.txt -T application/json -q -n 100000 -c 3000 http://test.haproxy.in:80/ping
该命令的输出结果类似: