2. Housekeeping…
• Talk
– Slides will be posted after the talk.
• Me
– Sr. Web Architect Manager at NOOK
Developer
– Prior MNPHP Organizer
– Open Source Contributor
– Where you can find me:
• Twitter: mwillbanks G+: Mike Willbanks
• IRC (freenode): mwillbanks Blog:
http://blog.digitalstruct.com
• GitHub: https://github.com/mwillbanks
3. Agenda
• Message Queues?
• Protocols and Software
• Picking a Message Queue
• Best Practices
4. A Definition
“Message queues and mailboxes are software-engineering
components used for interprocess communication, or for inter-
thread communication within the same process. They use a queue
for messaging – the passing of control or of content.”
5. What is messaging?
“Messaging describes the sending and receiving of data (in the
form of messages) between systems. Messages are exchanged
between programs or applications, similar to the way people
communicate by email but with guarantees on delivery, speed,
security and the absence of spam.”
6. Producer Messages Consumer
Messages
Task
Messages
General Anatomy
Producer creates a message and pushes it to the queue; the
consumer reads from the queue and processes the message.
7. Describing Message Queues
l Pub/Sub
l FIFO buffer
l Push / Pull
l A way to communicate between
applications / systems.
l A way to decouple components.
l A way to offload work.
8. Why to use a Message Queue
l Offload Heavy Work
l Integration with Legacy Systems
l Asynchronous Processing
l Parallel Processing
l Process consistency
l Scalability
9. Unix Foundations
l “Write programs that work together.”
l “Do it in the background.”
10. Why it matters
l Web systems need to be geared to run things
asynchronously.
l Distribution of load
l System integrity
11. You’ve seen them before; they are used in most applications to
help them scale.
MESSAGE QUEUE EXAMPLES
12.
13.
14.
15. When to make use of message queues in case you’re wondering.
GENERIC USE CASES
23. Overview of AMQP
l AMQP Working Group (Community and
Vendor)
l Platform agnostic protocol.
l Completely open, interoperable and broadly
applicable.
l Many severs available and many client
libraries.
25. How it Works
l AMQP utilizes exchanges, queues and
bindings.
l An exchange are routers with routing tables.
l A binding defines the routing rules.
l A queue is where the messages wait for a
consumer.
27. Understanding Exchanges
l Fanout Exchange
l No routing keys involved. Any message that is
sent to the exchange is sent to all queues bound
to that exchange.
l Direct Exchange
l Routing keys involved. A queue binds to the
exchange to request messages that match a
routing key exactly.
l Topic Exchange
l Routing keys involved. A queue binds to the
exchange to request messages that match a
routing key pattern.
28. Implementations
www.rabbitmq.com
Very popular and common message queue owned by
VMware.
qpid.apache.org
Long standing project; apache foundation.
www.openamq.org
Long standing project; ZeroMQ partner, no news since
2009.
29. Building a Queue
l An exchange, queue and bindings must be defined
first. Publishing can then commence after.
l Create the queue
l Create the exchange
l Bind to the queue.
30. Persistence?
l Default behavior is no persistence.
l How important are the messages?
l Just about all items have a level of persistence if you
would like them to survive on reboot.
l Mark exchanges, queues and messages as DURABLE.
35. Overview
l Simple protocol
l Behaviors follow very simple commands.
l Most message queues can communicate over
STOMP.
36. /queue/
msg
Connect Send Disconnect
/queue/ S
msg T
O
Connect Subscribe Disconnect
M
P
P
H
S
P
E
R
V
Read E
R
Ack
How It Works
l When you send in a message, you tell it which
queue to go to.
l When you subscribe you request a queue.
37. Sever Implementations
activemq.apache.org
One of the oldest message queues existing;
a apache foundation project
activemq.apache.org/apollo
Next generation ActiveMQ
www.rabbitmq.com
Very popular and common message queue owned by
VMware.
www.jboss.org/hornetq
Supported by Red Hat Middle Ware division, picking
up steam.
38. PECL Stomp
l pecl install stomp
l That was easy J
42. Overview
l Best for real-time data.
l Leveraging pub/sub can turn it into more of a generic message
system.
l Multiple libraries
l JAXL - https://github.com/abhinavsingh/JAXL
l Xmpp - https://github.com/alexmace/Xmpp
43. Publish
to, id,
message
Subscribe
id,
from, to,
message
Sub1 Sub2 Sub3
XEP-0060: Publish-Subscribe
l Specification for implementing Publish Subscribe
models.
l Extension to the original XMPP specification.
56. Beanstalkd
l Asynchronous Job Queue
l Good scheduling system (aka delays).
l User land PHP clients.
57. Application Code
Beanstalkd Client API
(Pheanstalk)
Beanstalkd Server
Beanstalkd Worker API
(Pheanstalk)
Worker Application Code
Beanstalkd
l Pass a job to the job server
l Worker receives the job and processes
l Ability to persist to binlog; default is in-memory
61. The Trifecta
l?
Horizonta
Vertical?
Scale
Messages
Messages Messages
Messages Messages
Messages
Messages Messages
Messages
ry?
ed? In-Memo
R a w Sp e ce?
es?
Performance Durability
Persisten
# Messag n?
Replicatio
62. Standards
• A recognized standard?
– AMQP? STOMP? XMPP?
• How many developers?
– Will an unfortunate event kill off the
product?
• Undocumented protocol?
– Forget about it!
68. Messages
• Formatting
– JSON or XML are great options.
• Please no serialized PHP objects.
• Message Size
– Only as large as necessary.
• Don’t send a binary object through the queue.
69. Workers
• Dumb as possible!
– Single message type
• Easier to scale.
– Single operation
• Easy to debug and far more flexible.
70. PHP Daemons
• Prevent Memory Leaks
– Detection
– Cycle Workers
• Handle Signals
– Properly shutdown!
– Watch out for OS service kills
• Sleeping is good J
71.
72. Database
Worker Server Web Server
Message Queue
Environment Integration
Web Server -> Message Queue
Worker Server -> Message Queue
73. Database
Web Server
Worker Server
Worker Server
Message Queue
Send to 1
Message Queue
High Availability
Insert multiple message queue servers + multiple worker nodes.
Each worker node can connect to as many message queue servers
as necessary.