8. Possible Solutions
• Server tweaks:TCP conns, ulimit, etc
• Multi-master model
• Localised queue
• ... and quite a few more
Tuesday, 10 September 13
9. Possible Solutions
• Server tweaks:TCP conns, ulimit, etc
• Multi-master model
•Localised queue
• ... and quite a few more
Tuesday, 10 September 13
10. Localised Queues
• Fast (no TCP latency)
• Network partition tolerant
• Modular & scalable
• Reliable & Durable
Tuesday, 10 September 13
37. QueuesExchange Binding
AMQP Service Model
‣ routes messages based on
criteria
‣ doesn’t store messages
‣ can inspect message
content
‣ can be created at runtime
consumers
Tuesday, 10 September 13
38. QueuesExchange Binding
AMQP Service Model
‣ store messages
‣ named
‣ bound-able to exchange
‣ criteria
‣ can be created at
runtime by consumers
‣ routes messages based on
criteria
‣ doesn’t store messages
‣ can inspect message
content
‣ can be created at runtime
consumers
Tuesday, 10 September 13
39. QueuesExchange Binding
AMQP Service Model
‣ creates a relationship between
queues and exchanges
‣ contains criteria and properties
‣ can be created at runtime by
consumers
‣ store messages
‣ named
‣ bound-able to exchange
‣ criteria
‣ can be created at
runtime by consumers
‣ routes messages based on
criteria
‣ doesn’t store messages
‣ can inspect message
content
‣ can be created at runtime
consumers
Tuesday, 10 September 13
40. QueuesExchange Binding
AMQP Service Model
‣ creates a relationship between
queues and exchanges
‣ contains criteria and properties
‣ can be created at runtime by
consumers
‣ store messages
‣ named
‣ bound-able to exchange
‣ criteria
‣ can be created at
runtime by consumers
‣ routes messages based on
criteria
‣ doesn’t store messages
‣ can inspect message
content
‣ can be created at runtime
consumers
Tuesday, 10 September 13
41. QueuesExchange Binding
AMQP Service Model
Publisher Consumer
‣ creates a relationship between
queues and exchanges
‣ contains criteria and properties
‣ can be created at runtime by
consumers
‣ store messages
‣ named
‣ bound-able to exchange
‣ criteria
‣ can be created at
runtime by consumers
‣ routes messages based on
criteria
‣ doesn’t store messages
‣ can inspect message
content
‣ can be created at runtime
consumers
Tuesday, 10 September 13
42. QueuesExchange Binding
AMQP Service Model
Publisher Consumer
‣ creates a relationship between
queues and exchanges
‣ contains criteria and properties
‣ can be created at runtime by
consumers
‣ store messages
‣ named
‣ bound-able to exchange
‣ criteria
‣ can be created at
runtime by consumers
‣ routes messages based on
criteria
‣ doesn’t store messages
‣ can inspect message
content
‣ can be created at runtime
consumers
‣ can create
exchanges and
queues
‣ can create
exchanges and
queues
Tuesday, 10 September 13
52. Exchange
‘events’
Binding
AMQP Service Model
➡Queue:
‣ user_click_queue
➡Exchange:
‣ events
Direct Type
Message
Message
Message
event.user.click
event.user.view
event.user.share
user_click_queue
Tuesday, 10 September 13
53. Exchange
‘events’
Binding
AMQP Service Model
➡Queue:
‣ user_click_queue
➡Exchange:
‣ events
➡Routing Key:
‣ event.user.click
Direct Type
Message
Message
Message
event.user.click
event.user.view
event.user.share
user_click_queue
Tuesday, 10 September 13
54. Exchange
‘events’
Binding
AMQP Service Model
➡Queue:
‣ user_click_queue
➡Exchange:
‣ events
➡Routing Key:
‣ event.user.click
Direct Type
Message
Message
Message
event.user.click
event.user.view
event.user.share
PHP Script
PHP Script
PHP Script
user_click_queue
Tuesday, 10 September 13
55. Exchange
‘events’
AMQP Service Model
Direct Type
Message
Message
Message
event.user.click
event.user.view
event.user.share
PHP Script
PHP Script
PHP Script
user_click_queue
ConsumerPublisher/
Producer
Tuesday, 10 September 13
56. Exchange
‘events’
AMQP Service Model
Direct Type
Message
Message
Message
event.user.click
event.user.view
event.user.share
user_click_queue
user_view_queue
user_share_queue
Tuesday, 10 September 13
57. Exchange
‘events’
AMQP Service Model
Direct Type
Message
Message
Message
event.user.click
event.user.view
event.user.share
user_click_queue
user_view_queue
user_share_queue
Message
Message
Message
Tuesday, 10 September 13
58. Exchange
‘events’
AMQP Service Model
What if...
Message
Message
Message
event.user.click
event.user.view
event.user.share
user_interaction_queue
user_shares_queue
Tuesday, 10 September 13
59. Exchange
‘events’
AMQP Service Model
What if...
user_interaction_queue
user_shares_queue
Message
Message
Message
event.user.click
event.user.view
event.user.share
Tuesday, 10 September 13
60. Exchange
‘events’
AMQP Service Model
What if...
Message
Message
Message
event.user.click
event.user.view
event.user.share
user_interaction_queue
user_shares_queue
Tuesday, 10 September 13
61. Exchange
‘events’
AMQP Service Model
Topic Exchange
user_interaction_queue
Binding
Message
Message
Message
event.user.click
event.user.view
event.user.share
Tuesday, 10 September 13
62. Exchange
‘events’
AMQP Service Model
Topic Exchange
user_interaction_queue
Binding
➡Queue:
‣ user_interaction_queue
➡Exchange:
‣ events
➡Routing Key:
‣ event.user.*
Message
Message
Message
event.user.click
event.user.view
event.user.share
Tuesday, 10 September 13
67. Message
Exchange
‘events’
AMQP Service Model
Topic Exchange
Message
Message
Message
event.user.click
event.user.view
event.user.share
user_interaction_queue
user_shares_queue
Message
Message
event.user.*
event.user.share
Tuesday, 10 September 13
68. Message
Exchange
‘events’
AMQP Service Model
Topic Exchange
Message
Message
Message
event.user.click
event.user.view
event.user.share
user_interaction_queue
user_shares_queue
Message
Message
Can be done at runtime
event.user.*
event.user.share
Tuesday, 10 September 13
69. Message
Exchange
‘events’
AMQP Service Model
Topic Exchange
Message
Message
Message
event.user.click
event.user.view
event.user.share
user_interaction_queue
user_shares_queue
Message
Message
Click vs Share Conversion?
event.user.*
event.user.share
Tuesday, 10 September 13
70. Message
Exchange
‘events’
AMQP Service Model
Topic Exchange
Message
Message
Message
event.user.click
event.user.view
event.user.share
user_interaction_queue
user_shares_queue
Message
Message
Click vs Share Conversion?
event.user.*
event.user.share
Message
click_share_queue
Message
event.user.share
event.user.click
Tuesday, 10 September 13
71. Message
Exchange
‘events’
AMQP Service Model
Topic Exchange
Message
Message
Message
event.user.click
event.user.view
event.user.share
user_interaction_queue
user_shares_queue
Message
live_view_queue
event.user.*
event.user.share
*.*.view
Message
Message
event.staff.view
Message
Message
Staff vs user views?
Tuesday, 10 September 13
72. AMQ Model Wire
AMQP Overview
AMQP
➡ Function layer
‣Transactions, Exchange, Queues, etc
➡Transport layer
‣ Protocol format
‣ Data rep/framing
‣ Multiplexing, heart-beating, etc
➡ Model/component spec
‣ Exchange
‣ Message Queue
‣ Binding
Tuesday, 10 September 13
73. ➡ Model/component spec
‣ Exchange
‣ Message Queue
‣ Binding
AMQ Model Wire
AMQP Overview
AMQP
➡ Function layer
‣Transactions, Exchange, Queues, etc
➡Transport layer
‣ Protocol format
‣ Data rep/framing
‣ Multiplexing, heart-beating, etc
Tuesday, 10 September 13
89. Why RabbitMQ?
• Mature (born 2006)
• Acquired by SpringSource (now part of
VMWare) in 2010
• Used by companies like Nokia, Google,
Mozilla, vFabric, SecondLife, OpenStack
Tuesday, 10 September 13
90. Overview
• Written in Erlang/OTP
• Supports other protocols too - STOMP,
MQTT
• Many library supports - Python, PHP,
Ruby, .NET
• RESTful API is available
Tuesday, 10 September 13