You are on page 1of 63

Scaling RabbitMQ to 11

Gavin M. Roy @crad - Surge 2011

INTERACTIVE POLLS

http://pollev.com/gmr SMS: 22333

Scaling RabbitMQ to 11

Gavin M. Roy @crad - Surge 2011

myYearbook.com

#1 Comscore Teen Destination, Top Trafficked Sites in US Use of RabbitMQ dates back to 2009 Multiple clusters for different purposes Browser <-> Backend Message Bus Messaging, Event Processing

Gavin M. Roy @crad - Surge 2011

DISASTER PORN
Gavin M. Roy @crad - Surge 2011

ABOUT AMPQ

Platform, Vendor Neutral Messaging format 0.9.1 finalized in November 2008 JP Morgan Chase, Red Hat, Rabbit Technologies, iMatrix, IONA Technologies, Cisco Systems, Envoy Technologies, Twist Process Innovations

Members now include Bank of America, Barclays Banks, Microsoft Corporation, Novell, VMWare 1.0 Final: October 2011
5

Gavin M. Roy @crad - Surge 2011

ABOUT RABBITMQ

Born in 2006, Released in 2007, Acquired in 2010 Written in Erlang/OTP Talks AMQP 0.8 and 0.9.1 Features include: Clustering, Active/Active HA Queues Management UI and API Plugin Architecture
6

Gavin M. Roy @crad - Surge 2011

ABOUT YOU & RABBITMQ


Gavin M. Roy @crad - Surge 2011

RABBITMQ & AMQP CONCEPTS


Gavin M. Roy @crad - Surge 2011

PUBLISHERS
Gavin M. Roy @crad - Surge 2011

CONSUMERS
Gavin M. Roy @crad - Surge 2011

QUEUES

Durability: Queue survives reboot Auto-Delete: Delete the queue when consumer goes away Exclusive: Only one consumer may consume x-expires: Auto-Delete after given duration x-message-ttl: Auto-discard a message after ttl

11

Gavin M. Roy @crad - Surge 2011

MESSAGES

Have client specified properties: Content type, Encoding, Timestamp, App-Id, User-Id, Headers Delivery Mode: 1: Non-Persistent 2: Persistent

12

Gavin M. Roy @crad - Surge 2011

MESSAGE ROUTING
Its not just about Queues.
Gavin M. Roy @crad - Surge 2011

ROUTING KEY
In addition to the exchange, determines what is done with a message.
Gavin M. Roy @crad - Surge 2011

CC & BCC
Gavin M. Roy @crad - Surge 2011

More routing options per message, but violates AMQP.

HEADERS EXCHANGE
More on this later.
Gavin M. Roy @crad - Surge 2011

EXCHANGES
Gavin M. Roy @crad - Surge 2011

FANOUT

1:N Message Delivery Pattern No Routing Keys Involved Queues bound to a fanout exchange get all messages sent to the exchange

18

Gavin M. Roy @crad - Surge 2011

DIRECT

1:1 Message Delivery Pattern Routing Keys are direct, no wildcarding All queues bound to a routing key get the message

19

Gavin M. Roy @crad - Surge 2011

TOPIC EXCHANGES

Pattern Matching in Routing Keys Publish one message type to Surge.Sessions, another to Surge.Mentions Period delimiter, * stays within the period scope, # does not Example patterns: *.Mentions, Surge.*, # Slower than Fanout and Direct

20

Gavin M. Roy @crad - Surge 2011

HEADERS EXCHANGES

Matches on Basic.Properties headers table values to the arguments table specified when binding a queue Use x-match when declaring exchange to specify any or all headers must match Slow implementation in Erlang

21

Gavin M. Roy @crad - Surge 2011

PLUGIN EXCHANGES

Consistent Hash Exchange: Round-robin distribution to queues External: RPC Exchange Plugin Script: Similar in intent to External Riak Last-Value Cache Recent History Exchange: Keeps last 20 messages routed Global Fanout: Sends to all queues, regardless of routing key
22

Gavin M. Roy @crad - Surge 2011

ONE MORE THING...


Exchange-to-Exchange Bindings
Gavin M. Roy @crad - Surge 2011

CLUSTERS
Gavin M. Roy @crad - Surge 2011

STATS, DISK AND RAM NODES


Gavin M. Roy @crad - Surge 2011

WHERE DOES THE QUEUE LIVE?


Gavin M. Roy @crad - Surge 2011

CROSS-NODE PUBLISHING & CONSUMING


Gavin M. Roy @crad - Surge 2011

MAX CLUSTER SIZE


~32 notes is a realistic maximum node count for a cluster
Gavin M. Roy @crad - Surge 2011

SCALING ISSUES?

Gavin M. Roy @crad - Surge 2011

Scaling RabbitMQ to 11

Gavin M. Roy @crad - Surge 2011

WHAT TO WATCH

Gavin M. Roy @crad - Surge 2011

Scaling RabbitMQ to 11

RABBITMQ

Y U NO TAKE MESSAGE?

Gavin M. Roy @crad - Surge 2011

TCP BACKPRESSURE MUCH?


Gavin M. Roy @crad - Surge 2011

MEMORY MANAGEMENT
Gavin M. Roy @crad - Surge 2011

[{RABBIT, [{VM_MEMORY_HIGH_WATERMARK, 0.4}] }].

40%

Gavin M. Roy @crad - Surge 2011

MESSAGE PERSISTENCE
50-70% performance penalty compared to non-persisted messages. *
http://www.rabbitmq.com/faq.html#performance-persistent

Gavin M. Roy @crad - Surge 2011

CONSUMING
Ack, Nack and Reject vs Basic.Consume(no_ack=True)
Gavin M. Roy @crad - Surge 2011

Scaling RabbitMQ to 11

Server Basic.Deliver

Client Basic.[Ack/Nack/Reject]

Basic.[Ack/Nack/Reject]Ok

Gavin M. Roy @crad - Surge 2011

Gavin M. Roy @crad - Surge 2011

BASIC.QOS

Prefetch Size and Count How many messages the client wants the RabbitMQ to pre-deliver to the client

Doesnt work in no_ack

Gavin M. Roy @crad - Surge 2011

TOO MANY SHORT LIVED CONNECTIONS


Gavin M. Roy @crad - Surge 2011

APACHE + MOD_PHP
Gavin M. Roy @crad - Surge 2011

CONNECTION PERSISTENCE
Gavin M. Roy @crad - Surge 2011

100 SERVERS 125 BACKENDS 1 REQUEST/S 12,500 CONN/S


Gavin M. Roy @crad - Surge 2011

AMQP CONNECTION SEQUENCE


Client Protocol Header Frame Connection.Start Connection.StartOk Connection.Tune Connection.TuneOk Connection.Open Connection.OpenOk Channel.Open Channel.OpenOk Server

Gavin M. Roy @crad - Surge 2011

685 BYTES PER 8.16 MB/S IN STARTUP @ 12,500 CONN/S


Gavin M. Roy @crad - Surge 2011

VORPAL BUNNY

Gavin M. Roy @crad - Surge 2011

VORPAL BUNNY

Light-weight PHP client for RabbitMQ Used the experimental JSON-RPC Channel plugin Handles the overhead of the HTTP, JSON-RPC to AMQP analog Fire and forget message publishing Can not be transparently load balanced

48

Gavin M. Roy @crad - Surge 2011

TOO MANY CONNECTIONS


Gavin M. Roy @crad - Surge 2011

VELOCITY TOO HIGH FOR ONE NODE?


Gavin M. Roy @crad - Surge 2011

MEMORY UTILIZATION DISPROPORTIONATE TO QUEUE DEPTHS


Gavin M. Roy @crad - Surge 2011

CLUSTER NODE FAILURES


Gavin M. Roy @crad - Surge 2011

UP TO 60 SECONDS TO DETECT
Gavin M. Roy @crad - Surge 2011

MESSAGES DROPPED ON THE FLOOR*


Gavin M. Roy @crad - Surge 2011

* 2.6.0 ADDED ACTIVE/ACTIVE QUEUES IN CLUSTERS


Gavin M. Roy @crad - Surge 2011

ACTIVE/ PASSIVE FAILOVER?


storage for Mnesia databases.
Gavin M. Roy @crad - Surge 2011

Recommendation is to use Pacemaker and DRBD or shared

RECOVERY?

Gavin M. Roy @crad - Surge 2011

CLUSTERING ALTERNATIVES
Gavin M. Roy @crad - Surge 2011

FEDERATION

Scaling RabbitMQ to 11

Exchange Plugin Provides ability to route all messages to a x-federation exchange to another broker

Gavin M. Roy @crad - Surge 2011

SHOVEL PLUGIN

From Queue on one broker to an exchange on another broker. Effective for cross-cluster data broadcasting

Gavin M. Roy @crad - Surge 2011

TRENDING & MONITORING



RabbitMQ Message Velocity Rates Gotcha Management API Plugin exposes RESTful API including monitoring data points 2.6.1 allows monitoring tag for users to allow data access without full admin access Queue.Declare(passive=True) gets queue depths as well Plug in to Graphite, Nagios,or your favorite tool

61

Gavin M. Roy @crad - Surge 2011

PHOTO CREDITS

skateboard kids 7 2007 Volker Neumann http://flickr.com/prawnpie

methodcn contest 2009 Erin OHara http://flickr.com/erinohara73/

USPS Truck Accident Valley City Fire Department http://www.valleycityfire.com

62

Gavin M. Roy @crad - Surge 2011

Scaling RabbitMQ to 11

QUESTIONS?
Gavin M. Roy @crad - Surge 2011

You might also like