[rabbitmq-discuss] questions about RabbitMQ linear scalability

Junius Wang wangjunbo924 at gmail.com
Thu Aug 8 11:49:45 BST 2013


Hi guys,

Our team are performing some performance tests and we try to prove that we
can get linear scalability of our services, it means when we add more
RabbitMQ nodes, the throughputs should increase as well.  We use RabbitMQ as
our backend message system. However, when we add more RabbitMQ servers to
cluster, the throughput decreases which is not expected and I would like to
ask for your help. Following are the details, any comments are appreciated.

 

We setup the our testing environment on AWS. All instances, including app
servers, RabbitMQ servers and Jmeter servers(host test tool Jmeter 2.7), are
of  type m1.xlarge(8ECUs, 4 Cores and 15Gib memory). For RabbitMQ servers,
"EBS optimized" are enabled, and the PIOPs are set to 2000 to improve the
disc read/write speed. There are two ELBs. One for App servers and the
another for RabbitMQ servers.  Here are some more environment
configurations:


Instances Type

m1.xlarge


connect pool size for App servers

40000


JVM args for App servers

-Xmx12G -Xms6G -XX:MaxPermSize=2G


App servers count

2


Jmeter servers

10


total concurrent users

4000


PIOPs for RabbitMQ Servers

2000


Consumer Prefetch Count

1000


message size

1KB


hipe_compile

FALSE

 

The designed topologic of broker:



1)      We create only one global topic exchange "events" to route all
incoming messages. It's durable.

2)      There will be an event log queue which receive all messages with
binding key "#". It's durable as well.

3)      There will be several queues for our external services and each
service queue may have several bindings to the global exchange which we
called eventypes.

Actually In our test scenarios,  we create only one service queue and only
one binding on this queue. Message publishers publish messages using the
only binding routing key.  So in fact, every message resides on two queues:
the event log queue and a test service queue. And all messages are
persistent.

 

We start with 1 single RabbitMQ node. And then run different configurations
with 2-RabbitMQ node cluster. For example ,1) change the node type 2)
enable/disable mirrored queues(also called high available queue, showed as
"ha" in the following tables). The test results shown as following:


configurations

Avg response time(ms)

throughput


1 rabbitmq node

1125

2702.904


2disc,ha

2957

1192.645


1disc+1ram,ha

3654

998.126


1disc+1ram,non-ha

1110

2799.826


 

1015

2720.422


2disc,non-ha

1289

2570.826


 

1080

2845.821


 

1118

2802.278

We can see that, while two rabbitmq servers are used, we see no throughput
improvement. This doesn't make sense to me. To my understanding,  Here comes
my questions:

1.       What does RabbitMQ cluster scalability means exactly? Does it refer
to the capacity of handing messages? The queue capacity? Or the message
number?

2.       The  mirrored queues seems to affect performance in a large scale.
What's the possible cause of this? 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/attachments/20130808/054538b9/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/jpeg
Size: 14245 bytes
Desc: not available
URL: <http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/attachments/20130808/054538b9/attachment.jpeg>


More information about the rabbitmq-discuss mailing list