测试场景
主要测试RabbitMQ不同产品规格在发送2KB大小的消息时的性能表现。当RabbitMQ实例是RabbitMQ引擎时,队列为非持久化、非镜像队列,实时生产实时消费,队列无积压。当RabbitMQ实例是云原生引擎时,队列为持久化双副本队列,实时生产实时消费,当消费速率跟不上生产时,队列存在积压。
测试环境
步骤一:购买实例
名称 | 节点数量 | 规格 | 引擎类型 | 磁盘类型 | 磁盘空间 |
---|---|---|---|---|---|
RabbitMQ-01 | 3 | 计算增强型4核8GB | RabbitMQ引擎 | 超高IO | 500GB |
RabbitMQ-02 | 3 | 计算增强型8核16GB | RabbitMQ引擎 | 超高IO | 500GB |
RabbitMQ-03 | 3 | 计算增强型16核32GB | RabbitMQ引擎 | 超高IO | 500GB |
RabbitMQ-04 | 3 | 计算增强型4核8GB | 云原生引擎 | 超高IO | 500GB |
RabbitMQ-05 | 3 | 计算增强型8核16GB | 云原生引擎 | 超高IO | 500GB |
RabbitMQ-06 | 3 | 计算增强型16核32GB | 云原生引擎 | 超高IO | 500GB |
步骤二:获取性能测试工具
性能测试采用RabbitMQ官方测试工具,点击链接下载。
步骤三:购买客户端服务器
购买3台ECS服务器(资源池、可用区、虚拟私有云、子网、安全组与RabbitMQ实例保持一致,带宽要大于等于RabbitMQ实例带宽,为了运行更多的测试程序,建议采用更大的内存)
购买完成后需要进行如下操作:
-
安装JDK
yum install -y java-1.8.0-openjdk-devel.x86_64
-
下载性能测试工具并解压
tar -zxvf rabbitmq-perf-test-2.8.1-bin.tar.gz
步骤四:测试命令
nohup ./runjava com.rabbitmq.perf.PerfTest -h amqp://user:123456@127.0.0.1:5672 -s2048 -r 2000 -x1 -X1 -y1 -Y1 -e $2_$i -u $2_$i -f persistent >out_$i.out 2>&1 &
- user:应用用户
- pwd:密码
- hostip:rabbitmq服务端ip
- vhost:虚拟机名
- -s2048:消息大小2kb
- -x1 -X1:1个生产者,每个生产者1个信道
- -y1 -Y1:1个消费者,每个消费者1个信道
- -u:队列名
- -e:交换器名
- -r:生产tps
- -f persistent:持久化
- -a:自动确认
步骤五:测试过程
注意队列无需提前创建,每个压测进程设置队列名必须不同,队列才会均衡创建到各个节点,达到性能最佳。
- 每个压测进程设置一个生产者、一个消费者、生产tps设置2000。以8C32G云主机为例,一个云主机最多可以运行60个压测进程
- 登录客户端机器,执行压测命令,观察消息生产消费tps;
- 持续增加压测进程,直到消费tps跟不上生产tps;
- 观察半小时后,记录生产消费TPS,以及机器和磁盘状态。
测试结果
引擎类型 规格 节点数量 TPS实测 RabbitMQ引擎 4C8G 计算增强型 3 80000 8C16G 计算增强型 3 140000 16C32G 计算增强型 3 200000 云原生引擎 4C8G 计算增强型 3 65000 8C16G 计算增强型 3 115000 16C32G 计算增强型 3 130000