1

I'm doing some load testing of ironmq sending 500 messages and afterwards consuming them.

So far I'm able to send 16 msg's pr. sec and consume (read/delete) about 5 msg's pr. sec. using ironAWSEUWest on my local machine. I use the v. 0.0.18 java client sdk.

output :

[l-1) thread #0 - dataset://foo] dataset://foo?produceDelay=5   INFO  Sent: 100 messages so far. Last group took: 6066 millis which is: 16,485 messages per second. average: 16,485
[l-1) thread #0 - dataset://foo] dataset://foo?produceDelay=5   INFO  Sent: 200 messages so far. Last group took: 6504 millis which is: 15,375 messages per second. average: 15,911
[l-1) thread #0 - dataset://foo] dataset://foo?produceDelay=5   INFO  Sent: 300 messages so far. Last group took: 6560 millis which is: 15,244 messages per second. average: 15,682
[thread #1 - ironmq://testqueue] dataset://foo?produceDelay=5   INFO  Received: 100 messages so far. Last group took: 17128 millis which is: 5,838 messages per second. average: 5,838
[l-1) thread #0 - dataset://foo] dataset://foo?produceDelay=5   INFO  Sent: 400 messages so far. Last group took: 6415 millis which is: 15,588 messages per second. average: 15,659
[l-1) thread #0 - dataset://foo] dataset://foo?produceDelay=5   INFO  Sent: 500 messages so far. Last group took: 7089 millis which is: 14,106 messages per second. average: 15,321
[thread #1 - ironmq://testqueue] dataset://foo?produceDelay=5   INFO  Received: 200 messages so far. Last group took: 17957 millis which is: 5,569 messages per second. average: 5,7
[thread #1 - ironmq://testqueue] dataset://foo?produceDelay=5   INFO  Received: 300 messages so far. Last group took: 18281 millis which is: 5,47 messages per second. average: 5,622
[thread #1 - ironmq://testqueue] dataset://foo?produceDelay=5   INFO  Received: 400 messages so far. Last group took: 18206 millis which is: 5,493 messages per second. average: 5,589
[thread #1 - ironmq://testqueue] dataset://foo?produceDelay=5   INFO  Received: 500 messages so far. Last group took: 18136 millis which is: 5,514 messages per second. average: 5,574 

Is this the expected throughput ?

When I turn up the load to 1000 messages I receive sporadic errors when reading a batch of 100 messages at the time, and afterwards deleting them one at the time.

[thread #1 - ironmq://testqueue] IronMQConsumer                 WARN  Error occurred during delete of object with messageid : 6033017857819101120. This exception is ignored.. Exchange[Message: <hello>229]. Caused by: [io.iron.ironmq.HTTPException - Message not found]
io.iron.ironmq.HTTPException: Message not found
at io.iron.ironmq.Client.singleRequest(Client.java:194)[ironmq-0.0.18.jar:]
at io.iron.ironmq.Client.request(Client.java:132)[ironmq-0.0.18.jar:]
at io.iron.ironmq.Client.delete(Client.java:105)[ironmq-0.0.18.jar:]
at io.iron.ironmq.Queue.deleteMessage(Queue.java:141)[ironmq-0.0.18.jar:]

It seems that the delete method can fail under load.

The test is part of a Camel component for Ironmq that can be found here https://github.com/pax95/camel-ironmq

The loadtest is here https://github.com/pax95/camel-ironmq/blob/master/src/test/java/org/apache/camel/component/ironmq/integrationtest/LoadTest.java

Preben
  • 63
  • 2
  • 9
  • 1
    This can happen if a message times out and goes back on the queue. For instance, if one request gets message with id 123, then 60 seconds pass before it's deleted, that message will go back on the queue and another request would get message 123. Then whoever deletes first will work and whoever deletes next will fail. Could you log all the message ids to ensure a message isn't received twice? You could also try increasing the message timeout to prevent this. – Travis Reeder Jul 08 '14 at 03:15
  • 1
    Seems right. When increasing the timeout to eg. 2 min. the delete method works as expected. – Preben Jul 08 '14 at 12:13

1 Answers1

1

The network latency will have a lot to do with the message rates you can achieve. From outside an AWS DC, you'll generally see an additional 50-75ms for each operation. If you use concurrent threads, you'll get greater throughput. Also, our public clusters sometimes slows down due to load which is why our "Production" plan customers move to Pro clusters that are much faster.

That said, we've got a very big update coming to all our clusters that will increase performance and throughput significantly. You can actually download an installable version here: http://www.iron.io/mq-enterprise.

Chad

Chad
  • 1,818
  • 2
  • 15
  • 23