Scaling websites with RabbitMQ A(rlvaro Videla)
-
Upload
ontico -
Category
Technology
-
view
1.527 -
download
1
Transcript of Scaling websites with RabbitMQ A(rlvaro Videla)
![Page 1: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/1.jpg)
Scaling Web AppsWith RabbitMQ
Álvaro Videla | Liip AG
HighLoad ++ 2011
Thursday, September 29, 2011
![Page 2: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/2.jpg)
Who?
Thursday, September 29, 2011
![Page 3: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/3.jpg)
About Me
• Software Development at Liip AG
• Writing “RabbitMQ in Action” for Manning
• Blog: http://videlalvaro.github.com/
• Twitter: @old_sound
Thursday, September 29, 2011
![Page 4: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/4.jpg)
Why Do I need RabbitMQ?
Thursday, September 29, 2011
![Page 5: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/5.jpg)
The User
Thursday, September 29, 2011
![Page 6: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/6.jpg)
I don’t want to waittill your app resizes
my image!
Thursday, September 29, 2011
![Page 7: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/7.jpg)
The Product Owner
Thursday, September 29, 2011
![Page 8: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/8.jpg)
Can we also notify the user friends when she uploads a new image?
Thursday, September 29, 2011
![Page 9: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/9.jpg)
Can we also notify the user friends when she uploads a new image?
I forgot to mention we need it for tomorrow…
Thursday, September 29, 2011
![Page 10: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/10.jpg)
The Sysadmin
Thursday, September 29, 2011
![Page 11: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/11.jpg)
Dumb! You’re delivering full size images!
The bandwidth bill has tripled!
Thursday, September 29, 2011
![Page 12: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/12.jpg)
Dumb! You’re delivering full size images!
The bandwidth bill has tripled!
We need this fixed for yesterday!
Thursday, September 29, 2011
![Page 13: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/13.jpg)
The Developer in the other team
Thursday, September 29, 2011
![Page 14: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/14.jpg)
I need to call your PHP stuff but from Python
Thursday, September 29, 2011
![Page 15: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/15.jpg)
I need to call your PHP stuff but from Python
And also Java starting next week
Thursday, September 29, 2011
![Page 16: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/16.jpg)
You
Thursday, September 29, 2011
![Page 17: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/17.jpg)
FML!
Thursday, September 29, 2011
![Page 18: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/18.jpg)
Is there a solution?
Thursday, September 29, 2011
![Page 19: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/19.jpg)
RabbitMQ & AMQP
Thursday, September 29, 2011
![Page 20: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/20.jpg)
AMQP
Thursday, September 29, 2011
![Page 21: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/21.jpg)
AMQP
• Advanced Message Queuing Protocol
• Suits Interoperability
• Completely Open Protocol
• Binary Protocol
• AMQP Model
• AMQP Wire Format
Thursday, September 29, 2011
![Page 22: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/22.jpg)
AMQP Model
• Exchanges
• Message Queues
• Bindings
• Rules for binding them
Thursday, September 29, 2011
![Page 23: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/23.jpg)
AMQP Wire Protocol
• Functional Layer
• Transport Layer
Thursday, September 29, 2011
![Page 24: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/24.jpg)
Message Flow
http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_MRG/1.0/html/Messaging_Tutorial/chap-Messaging_Tutorial-Initial_Concepts.html
Thursday, September 29, 2011
![Page 25: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/25.jpg)
Exchange Types
• Fanout
• Direct
• Topic
Thursday, September 29, 2011
![Page 26: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/26.jpg)
http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_MRG/1.0/html/Messaging_Tutorial/sect-Messaging_Tutorial-Initial_Concepts-Fanout_Exchange.html
Thursday, September 29, 2011
![Page 27: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/27.jpg)
http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_MRG/1.0/html/Messaging_Tutorial/sect-Messaging_Tutorial-Initial_Concepts-Direct_Exchange.html
Thursday, September 29, 2011
![Page 28: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/28.jpg)
http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_MRG/1.0/html/Messaging_Tutorial/sect-Messaging_Tutorial-Initial_Concepts-Topic_Exchange.html
Thursday, September 29, 2011
![Page 29: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/29.jpg)
Usage Scenarios
Thursday, September 29, 2011
![Page 30: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/30.jpg)
Usage Scenarios
• Batch Processing
Thursday, September 29, 2011
![Page 31: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/31.jpg)
Usage Scenarios
• Batch Processing
• Image Uploading
Thursday, September 29, 2011
![Page 32: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/32.jpg)
Usage Scenarios
• Batch Processing
• Image Uploading
• Distributed Logging
Thursday, September 29, 2011
![Page 33: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/33.jpg)
Scenario
Batch Processing
Thursday, September 29, 2011
![Page 34: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/34.jpg)
Requirements
Thursday, September 29, 2011
![Page 35: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/35.jpg)
Requirements
• Generate XML
Thursday, September 29, 2011
![Page 36: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/36.jpg)
Requirements
• Generate XML
• Distribution Over a Cluster
Thursday, September 29, 2011
![Page 37: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/37.jpg)
Requirements
• Generate XML
• Distribution Over a Cluster
• Elasticity - Add/Remove new workers
Thursday, September 29, 2011
![Page 38: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/38.jpg)
Requirements
• Generate XML
• Distribution Over a Cluster
• Elasticity - Add/Remove new workers
• No Code Changes
Thursday, September 29, 2011
![Page 39: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/39.jpg)
Design
Thursday, September 29, 2011
![Page 40: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/40.jpg)
Publisher Code
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);$channel = $conn->channel();
$channel->exchange_declare('video-desc-ex', 'direct', false, true, false);
$msg = new AMQPMessage($video_info, array('content_type' => 'text/plain',
'delivery_mode' => 2));
$channel->basic_publish($msg, 'video-desc-ex');
$channel->close();$conn->close();
Thursday, September 29, 2011
![Page 41: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/41.jpg)
Publisher Code
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);$channel = $conn->channel();
$channel->exchange_declare('video-desc-ex', 'direct', false, true, false);
$msg = new AMQPMessage($video_info, array('content_type' => 'text/plain',
'delivery_mode' => 2));
$channel->basic_publish($msg, 'video-desc-ex');
$channel->close();$conn->close();
Thursday, September 29, 2011
![Page 42: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/42.jpg)
Publisher Code
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);$channel = $conn->channel();
$channel->exchange_declare('video-desc-ex', 'direct', false, true, false);
$msg = new AMQPMessage($video_info, array('content_type' => 'text/plain',
'delivery_mode' => 2));
$channel->basic_publish($msg, 'video-desc-ex');
$channel->close();$conn->close();
Thursday, September 29, 2011
![Page 43: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/43.jpg)
Publisher Code
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);$channel = $conn->channel();
$channel->exchange_declare('video-desc-ex', 'direct', false, true, false);
$msg = new AMQPMessage($video_info, array('content_type' => 'text/plain',
'delivery_mode' => 2));
$channel->basic_publish($msg, 'video-desc-ex');
$channel->close();$conn->close();
Thursday, September 29, 2011
![Page 44: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/44.jpg)
Publisher Code
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);$channel = $conn->channel();
$channel->exchange_declare('video-desc-ex', 'direct', false, true, false);
$msg = new AMQPMessage($video_info, array('content_type' => 'text/plain',
'delivery_mode' => 2));
$channel->basic_publish($msg, 'video-desc-ex');
$channel->close();$conn->close();
Thursday, September 29, 2011
![Page 45: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/45.jpg)
Publisher Code
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);$channel = $conn->channel();
$channel->exchange_declare('video-desc-ex', 'direct', false, true, false);
$msg = new AMQPMessage($video_info, array('content_type' => 'text/plain',
'delivery_mode' => 2));
$channel->basic_publish($msg, 'video-desc-ex');
$channel->close();$conn->close();
Thursday, September 29, 2011
![Page 46: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/46.jpg)
Consumer Code
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);$channel = $conn->channel();
$channel->exchange_declare('video-desc-ex', 'direct', false, true, false);
$channel->queue_declare('video-desc-queue', false, true, false, false);
$channel->queue_bind('video-desc-queue', 'video-desc-ex');
$channel->basic_consume('video-desc-queue', $consumer_tag, false, false, false, false, $consumer);
while(count($channel->callbacks)) { $channel->wait();}
Thursday, September 29, 2011
![Page 47: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/47.jpg)
Consumer Code
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);$channel = $conn->channel();
$channel->exchange_declare('video-desc-ex', 'direct', false, true, false);
$channel->queue_declare('video-desc-queue', false, true, false, false);
$channel->queue_bind('video-desc-queue', 'video-desc-ex');
$channel->basic_consume('video-desc-queue', $consumer_tag, false, false, false, false, $consumer);
while(count($channel->callbacks)) { $channel->wait();}
Thursday, September 29, 2011
![Page 48: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/48.jpg)
Consumer Code
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);$channel = $conn->channel();
$channel->exchange_declare('video-desc-ex', 'direct', false, true, false);
$channel->queue_declare('video-desc-queue', false, true, false, false);
$channel->queue_bind('video-desc-queue', 'video-desc-ex');
$channel->basic_consume('video-desc-queue', $consumer_tag, false, false, false, false, $consumer);
while(count($channel->callbacks)) { $channel->wait();}
Thursday, September 29, 2011
![Page 49: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/49.jpg)
Consumer Code
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);$channel = $conn->channel();
$channel->exchange_declare('video-desc-ex', 'direct', false, true, false);
$channel->queue_declare('video-desc-queue', false, true, false, false);
$channel->queue_bind('video-desc-queue', 'video-desc-ex');
$channel->basic_consume('video-desc-queue', $consumer_tag, false, false, false, false, $consumer);
while(count($channel->callbacks)) { $channel->wait();}
Thursday, September 29, 2011
![Page 50: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/50.jpg)
Consumer Code
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);$channel = $conn->channel();
$channel->exchange_declare('video-desc-ex', 'direct', false, true, false);
$channel->queue_declare('video-desc-queue', false, true, false, false);
$channel->queue_bind('video-desc-queue', 'video-desc-ex');
$channel->basic_consume('video-desc-queue', $consumer_tag, false, false, false, false, $consumer);
while(count($channel->callbacks)) { $channel->wait();}
Thursday, September 29, 2011
![Page 51: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/51.jpg)
Consumer Code
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);$channel = $conn->channel();
$channel->exchange_declare('video-desc-ex', 'direct', false, true, false);
$channel->queue_declare('video-desc-queue', false, true, false, false);
$channel->queue_bind('video-desc-queue', 'video-desc-ex');
$channel->basic_consume('video-desc-queue', $consumer_tag, false, false, false, false, $consumer);
while(count($channel->callbacks)) { $channel->wait();}
Thursday, September 29, 2011
![Page 52: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/52.jpg)
Consumer Code
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);$channel = $conn->channel();
$channel->exchange_declare('video-desc-ex', 'direct', false, true, false);
$channel->queue_declare('video-desc-queue', false, true, false, false);
$channel->queue_bind('video-desc-queue', 'video-desc-ex');
$channel->basic_consume('video-desc-queue', $consumer_tag, false, false, false, false, $consumer);
while(count($channel->callbacks)) { $channel->wait();}
Thursday, September 29, 2011
![Page 53: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/53.jpg)
Scenario
Upload Pictures
Thursday, September 29, 2011
![Page 54: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/54.jpg)
Requirements
Thursday, September 29, 2011
![Page 55: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/55.jpg)
Requirements
• Upload Picture
Thursday, September 29, 2011
![Page 56: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/56.jpg)
Requirements
• Upload Picture
• Reward User
Thursday, September 29, 2011
![Page 57: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/57.jpg)
Requirements
• Upload Picture
• Reward User
• Notify User Friends
Thursday, September 29, 2011
![Page 58: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/58.jpg)
Requirements
• Upload Picture
• Reward User
• Notify User Friends
• Resize Picture
Thursday, September 29, 2011
![Page 59: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/59.jpg)
Requirements
• Upload Picture
• Reward User
• Notify User Friends
• Resize Picture
• No Code Changes
Thursday, September 29, 2011
![Page 60: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/60.jpg)
Design
Thursday, September 29, 2011
![Page 61: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/61.jpg)
Design
Thursday, September 29, 2011
![Page 62: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/62.jpg)
Design
Thursday, September 29, 2011
![Page 63: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/63.jpg)
Publisher Code$channel->exchange_declare('upload-pictures', 'fanout', false, true, false);
$metadata = json_encode(array('image_id' => $image_id,'user_id' => $user_id,‘image_path' => $image_path));
$msg = new AMQPMessage($metadata, array('content_type' => 'application/json', 'delivery_mode' => 2));
$channel->basic_publish($msg, 'upload-pictures');
Thursday, September 29, 2011
![Page 64: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/64.jpg)
Publisher Code$channel->exchange_declare('upload-pictures', 'fanout', false, true, false);
$metadata = json_encode(array('image_id' => $image_id,'user_id' => $user_id,‘image_path' => $image_path));
$msg = new AMQPMessage($metadata, array('content_type' => 'application/json', 'delivery_mode' => 2));
$channel->basic_publish($msg, 'upload-pictures');
Thursday, September 29, 2011
![Page 65: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/65.jpg)
Publisher Code$channel->exchange_declare('upload-pictures', 'fanout', false, true, false);
$metadata = json_encode(array('image_id' => $image_id,'user_id' => $user_id,‘image_path' => $image_path));
$msg = new AMQPMessage($metadata, array('content_type' => 'application/json', 'delivery_mode' => 2));
$channel->basic_publish($msg, 'upload-pictures');
Thursday, September 29, 2011
![Page 66: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/66.jpg)
Publisher Code$channel->exchange_declare('upload-pictures', 'fanout', false, true, false);
$metadata = json_encode(array('image_id' => $image_id,'user_id' => $user_id,‘image_path' => $image_path));
$msg = new AMQPMessage($metadata, array('content_type' => 'application/json', 'delivery_mode' => 2));
$channel->basic_publish($msg, 'upload-pictures');
Thursday, September 29, 2011
![Page 67: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/67.jpg)
Publisher Code$channel->exchange_declare('upload-pictures', 'fanout', false, true, false);
$metadata = json_encode(array('image_id' => $image_id,'user_id' => $user_id,‘image_path' => $image_path));
$msg = new AMQPMessage($metadata, array('content_type' => 'application/json', 'delivery_mode' => 2));
$channel->basic_publish($msg, 'upload-pictures');
Thursday, September 29, 2011
![Page 68: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/68.jpg)
Consumer Code$channel->exchange_declare('upload-pictures', 'fanout',
false, true, false);
$channel->queue_declare('resize-picture', false, true, false, false);
$channel->queue_bind('resize-picture', 'upload-pictures');
$channel->basic_consume('resize-picture', $consumer_tag, false, false, false, false, $consumer);
while(count($channel->callbacks)) {$channel->wait();
}
Thursday, September 29, 2011
![Page 69: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/69.jpg)
Consumer Code$channel->exchange_declare('upload-pictures', 'fanout',
false, true, false);
$channel->queue_declare('resize-picture', false, true, false, false);
$channel->queue_bind('resize-picture', 'upload-pictures');
$channel->basic_consume('resize-picture', $consumer_tag, false, false, false, false, $consumer);
while(count($channel->callbacks)) {$channel->wait();
}
Thursday, September 29, 2011
![Page 70: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/70.jpg)
Consumer Code$channel->exchange_declare('upload-pictures', 'fanout',
false, true, false);
$channel->queue_declare('resize-picture', false, true, false, false);
$channel->queue_bind('resize-picture', 'upload-pictures');
$channel->basic_consume('resize-picture', $consumer_tag, false, false, false, false, $consumer);
while(count($channel->callbacks)) {$channel->wait();
}
Thursday, September 29, 2011
![Page 71: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/71.jpg)
Consumer Code$channel->exchange_declare('upload-pictures', 'fanout',
false, true, false);
$channel->queue_declare('resize-picture', false, true, false, false);
$channel->queue_bind('resize-picture', 'upload-pictures');
$channel->basic_consume('resize-picture', $consumer_tag, false, false, false, false, $consumer);
while(count($channel->callbacks)) {$channel->wait();
}
Thursday, September 29, 2011
![Page 72: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/72.jpg)
Consumer Code$channel->exchange_declare('upload-pictures', 'fanout',
false, true, false);
$channel->queue_declare('resize-picture', false, true, false, false);
$channel->queue_bind('resize-picture', 'upload-pictures');
$channel->basic_consume('resize-picture', $consumer_tag, false, false, false, false, $consumer);
while(count($channel->callbacks)) {$channel->wait();
}
Thursday, September 29, 2011
![Page 73: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/73.jpg)
Consumer Code$channel->exchange_declare('upload-pictures', 'fanout',
false, true, false);
$channel->queue_declare('resize-picture', false, true, false, false);
$channel->queue_bind('resize-picture', 'upload-pictures');
$channel->basic_consume('resize-picture', $consumer_tag, false, false, false, false, $consumer);
while(count($channel->callbacks)) {$channel->wait();
}
Thursday, September 29, 2011
![Page 74: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/74.jpg)
Consumer Code
$consumer = function($msg){
$meta = json_decode($msg->body, true);
resize_picture($meta['image_id'], $meta['image_path']);
$msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
};
Thursday, September 29, 2011
![Page 75: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/75.jpg)
Consumer Code
$consumer = function($msg){
$meta = json_decode($msg->body, true);
resize_picture($meta['image_id'], $meta['image_path']);
$msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
};
Thursday, September 29, 2011
![Page 76: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/76.jpg)
Consumer Code
$consumer = function($msg){
$meta = json_decode($msg->body, true);
resize_picture($meta['image_id'], $meta['image_path']);
$msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
};
Thursday, September 29, 2011
![Page 77: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/77.jpg)
Consumer Code
$consumer = function($msg){
$meta = json_decode($msg->body, true);
resize_picture($meta['image_id'], $meta['image_path']);
$msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
};
Thursday, September 29, 2011
![Page 78: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/78.jpg)
Consumer Code
$consumer = function($msg){
$meta = json_decode($msg->body, true);
resize_picture($meta['image_id'], $meta['image_path']);
$msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
};
Thursday, September 29, 2011
![Page 79: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/79.jpg)
Scenario
Distributed Logging
Thursday, September 29, 2011
![Page 80: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/80.jpg)
Requirements
Thursday, September 29, 2011
![Page 81: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/81.jpg)
Requirements
• Several Web Servers
Thursday, September 29, 2011
![Page 82: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/82.jpg)
Requirements
• Several Web Servers
• Logic Separated by Module/Action
Thursday, September 29, 2011
![Page 83: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/83.jpg)
Requirements
• Several Web Servers
• Logic Separated by Module/Action
• Several Log Levels:
Thursday, September 29, 2011
![Page 84: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/84.jpg)
Requirements
• Several Web Servers
• Logic Separated by Module/Action
• Several Log Levels:
• Info, Warning, Error
Thursday, September 29, 2011
![Page 85: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/85.jpg)
Requirements
• Several Web Servers
• Logic Separated by Module/Action
• Several Log Levels:
• Info, Warning, Error
• Add/Remove log listeners at will
Thursday, September 29, 2011
![Page 86: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/86.jpg)
Design
Thursday, September 29, 2011
![Page 87: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/87.jpg)
Design
Thursday, September 29, 2011
![Page 88: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/88.jpg)
Design
Thursday, September 29, 2011
![Page 89: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/89.jpg)
Design
Thursday, September 29, 2011
![Page 90: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/90.jpg)
Design
Thursday, September 29, 2011
![Page 91: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/91.jpg)
Publisher Code
$channel->exchange_declare('logs', 'topic', false, true, false);
$msg = new AMQPMessage('some log message',array('content_type' => 'text/plain'));
$channel->basic_publish($msg, 'logs', 'server1.user.profile.info');
Thursday, September 29, 2011
![Page 92: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/92.jpg)
Publisher Code
$channel->exchange_declare('logs', 'topic', false, true, false);
$msg = new AMQPMessage('some log message',array('content_type' => 'text/plain'));
$channel->basic_publish($msg, 'logs', server1.user.profile.info');
Thursday, September 29, 2011
![Page 93: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/93.jpg)
Publisher Code
$channel->exchange_declare('logs', 'topic', false, true, false);
$msg = new AMQPMessage('some log message',array('content_type' => 'text/plain'));
$channel->basic_publish($msg, 'logs', server1.user.profile.info');
Thursday, September 29, 2011
![Page 94: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/94.jpg)
Publisher Code
$channel->exchange_declare('logs', 'topic', false, true, false);
$msg = new AMQPMessage('some log message',array('content_type' => 'text/plain'));
$channel->basic_publish($msg, 'logs', server1.user.profile.info');
Thursday, September 29, 2011
![Page 95: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/95.jpg)
Consumer Code
Get messages sent by host:
server1
Thursday, September 29, 2011
![Page 96: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/96.jpg)
Consumer Code
$channel->exchange_declare('logs', 'topic', false, true, false);
$channel->queue_declare('server1-logs', false, true, false, false);
$channel->queue_bind('server1-logs', 'logs', 'server1.#');
Thursday, September 29, 2011
![Page 97: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/97.jpg)
Consumer Code
$channel->exchange_declare('logs', 'topic', false, true, false);
$channel->queue_declare('server1-logs', false, true, false, false);
$channel->queue_bind('server1-logs', 'logs', 'server1.#');
Thursday, September 29, 2011
![Page 98: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/98.jpg)
Consumer Code
$channel->exchange_declare('logs', 'topic', false, true, false);
$channel->queue_declare('server1-logs', false, true, false, false);
$channel->queue_bind('server1-logs', 'logs', 'server1.#');
Thursday, September 29, 2011
![Page 99: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/99.jpg)
Consumer Code
$channel->exchange_declare('logs', 'topic', false, true, false);
$channel->queue_declare('server1-logs', false, true, false, false);
$channel->queue_bind('server1-logs', 'logs', 'server1.#');
Thursday, September 29, 2011
![Page 100: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/100.jpg)
Consumer Code
Get all error messages
Thursday, September 29, 2011
![Page 101: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/101.jpg)
Consumer Code
$channel->exchange_declare('logs', 'topic', false, true, false);
$channel->queue_declare('error-logs', false, true, false, false);
$channel->queue_bind('error-logs', 'logs', '#.error');
Thursday, September 29, 2011
![Page 102: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/102.jpg)
Consumer Code
$channel->exchange_declare('logs', 'topic', false, true, false);
$channel->queue_declare('error-logs', false, true, false, false);
$channel->queue_bind('error-logs', 'logs', '#.error');
Thursday, September 29, 2011
![Page 103: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/103.jpg)
Consumer Code
$channel->exchange_declare('logs', 'topic', false, true, false);
$channel->queue_declare('error-logs', false, true, false, false);
$channel->queue_bind('error-logs', 'logs', '#.error');
Thursday, September 29, 2011
![Page 104: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/104.jpg)
Consumer Code
$channel->exchange_declare('logs', 'topic', false, true, false);
$channel->queue_declare('error-logs', false, true, false, false);
$channel->queue_bind('error-logs', 'logs', '#.error');
Thursday, September 29, 2011
![Page 105: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/105.jpg)
Why RabbitMQ?
Thursday, September 29, 2011
![Page 106: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/106.jpg)
RabbitMQ
• Enterprise Messaging System
• Open Source MPL
• Written in Erlang/OTP
• Commercial Support
Thursday, September 29, 2011
![Page 107: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/107.jpg)
Features
• Reliable and High Scalable
• Easy To install
• Easy To Cluster
• Runs on: Windows, Solaris, Linux, OSX
• AMQP 0.8 - 0.9.1
Thursday, September 29, 2011
![Page 108: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/108.jpg)
Client Libraries
• Java
• .NET/C#
• Erlang
• Ruby, Python, PHP, Perl, AS3, Lisp, Scala, Clojure, Haskell
Thursday, September 29, 2011
![Page 109: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/109.jpg)
Docs/Support
• http://www.rabbitmq.com/documentation.html
• http://dev.rabbitmq.com/wiki/
• #rabbitmq at irc.freenode.net
• http://www.rabbitmq.com/email-archive.html
Thursday, September 29, 2011
![Page 110: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/110.jpg)
One Setup for HA
Thursday, September 29, 2011
![Page 111: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/111.jpg)
Conclusion
Thursday, September 29, 2011
![Page 112: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/112.jpg)
Conclusion
• Flexibility
Thursday, September 29, 2011
![Page 113: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/113.jpg)
Conclusion
• Flexibility
• Scalability
Thursday, September 29, 2011
![Page 114: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/114.jpg)
Conclusion
• Flexibility
• Scalability
• Interoperability
Thursday, September 29, 2011
![Page 115: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/115.jpg)
Conclusion
• Flexibility
• Scalability
• Interoperability
• Reduce Ops
Thursday, September 29, 2011
![Page 116: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/116.jpg)
Questions?
Thursday, September 29, 2011
![Page 117: Scaling websites with RabbitMQ A(rlvaro Videla)](https://reader034.fdocuments.us/reader034/viewer/2022052618/554faf40b4c9057b298b4fd0/html5/thumbnails/117.jpg)
Thanks!
Thursday, September 29, 2011