[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