[rabbitmq-discuss] Architecture Question

Matthias Radestock matthias at rabbitmq.com
Thu May 30 17:49:37 BST 2013


On 28/05/13 18:11, Crash Course wrote:
> What I'm seeing as I go from
> 4 producers -> direct exchange -> single queue -> 6 consumers
> then repeating that layout two more times (in parallel) against a
> single broker is:
> 38000 -> 54000 -> 63000 messages per second
> and
> 14 -> 26 -> 34% CPU
>
> Would your recommendation then be to achieve scaling of RabbitMQ by
> having the application layer be able to send to multiple exchanges and
> brokers, and consumers likewise be able to listen to multiple queues
> and multiple brokers

The architecture will be determined by the application's requirements on 
the routing topology.

Inside the broker, messages are passed through a pipeline of processes, 
which roughly looks like this:

producer connection handler (one per connection) ->
protocol and routing logic (one per channel) ->
queue ->
protocol logic (one per channel) ->
consumer connection handler (one per connection)

This pipeline is never perfectly smooth - there's always some bottleneck 
somewhere.

Generally, the more you separate message flows - by making them go 
through separate connections, channels and queues - the smaller the 
impact of individual bottlenecks becomes and the better performance 
you'll get.

The "layout repetition" you did above is a good example of that.

Regards,

Matthias.


More information about the rabbitmq-discuss mailing list