leave this to me. i'm british. i know how to queue
TRANSCRIPT
Title Text
Leave it to me,
I'm British,
I know how to queue
Chris DavenportJoomla Production Leadership Team
J and Beyond 2014
to form a line while waiting for something
Queues are bad?
We hate queues
Especially when it's raining
Why make me wait!?
The aim of this presentation
The aim of this presentation
Some queues are a good thing
Sometimes it's good to wait
Synchronisation is good
Good queues
Bad queues
Queue messages, not people
Why queue at all?
1: Image processing
2: Sending documents
Queue messages, not people
Asynchronous message queues
What is a message queue?
What is a message queue?
Client(Producer)Queue
What is a message queue?
Server(Consumer)Queue
1: Image processing
1: Image processing
Takes time.
Queue: But not the user's time.
Requires a lot of memory.
Queue: But not the user's memory.
Demand spikes can threaten the server.
Queue: Naturally throttled.
2: Sending documents
It's about decoupling
Decoupling in space
Decoupling in time
Decoupling synchronisation
Space decoupling
Different processes
Different machines
Different locations
Time decoupling
Heavy tasks may be deferred
Task streams may be throttled
Can cope with unreliable systems
Can cope with unreliable networks
Synchronisation decoupling
Clients should never block.
Redundancy
Scalability
Queue patterns
Request - Reply
ProducerQ1
2
3
4
5
Consumer
Request - Reply
ProducerConsumerQ
1
2
3
4
5
Request - Reply
ProducerQQR1
Consumer
2
3
4
5
Request - Reply
ProducerQQR1
Consumer2
3
4
5
Request - Reply
ProducerQQ?R1
Consumer2
3
4
5
Request - Reply
ProducerQQ?ConsumerConsumerConsumer1
2
3
4
5
Consumer
Request - Reply
ProducerQQ?2
3
4
5
ConsumerConsumerConsumerConsumer1
Request - Reply
ProducerQQ?3
4
5
ConsumerConsumerConsumerConsumer1
2
Request - Reply
ProducerQQ?4
5
ConsumerConsumerConsumerConsumer1
2
3
Request - Reply
ProducerQQ?5
ConsumerConsumerConsumerConsumer1
2
3
4
Request - Reply
ProducerQQ?R1
ConsumerConsumerConsumerConsumer2
3
4
5
Request - Reply
ProducerQQ?R1
ConsumerConsumerConsumerConsumer5
2
3
4
Pipeline
ProducerQ
Consumer1
2
3
4
5
ConsumerQConsumerQ
Pipeline
ProducerQ
Consumer1
2
3
4
5
ConsumerQConsumerQ
Pipeline
ProducerQ
ConsumerConsumerQ1'
2
3
4
5
ConsumerQ
Pipeline
ProducerQ
ConsumerConsumerQ1'
2'
3
4
5
ConsumerQ
Pipeline
ProducerQ
ConsumerConsumerQ2'
3'
4
5
ConsumerQ1''
Pipeline
ProducerQ
ConsumerConsumerQ3'
4'
5
ConsumerQ2''
1''
Publish - Subscribe
ProducerQ
ConsumerConsumerConsumerConsumer1
2
3
4
5
Publish - Subscribe
ProducerQ2
3
4
5
ConsumerConsumerConsumerConsumer1
1
1
1
Queue packages
Queue packages
AMQP Apache Qpid, OpenAMQ, RabbitMQ
ZeroMQ
IBM WebsphereMQ
Amazon SQS
MSMQ
MQTT
Queue characteristics
Locality
Persistent or non-persistent
Messages have an in-flight period or not
Preserve message order or not
Eliminate duplicates or not
Queue full behaviour
Message delivery guarantees
Using queues in Joomla
Using queues in Joomla
Most require special server software
Not available on most shared hosts
Using queues in Joomla
Need a native PHP implementation
Optional adapters formainstream message queues
Queuing in Joomla
GitHub: chrisdavenport/joomla-mq
Queuing in Joomla
Provide a very basic standard interface to a choice of message queues.
Currently supports: Array, filesystem, database, Unix System V, Amazon SQS.
Documented and unit tested.
Pull requests welcome.
JMq sending a message
$config = new JRegistry($configData);
$q = new JMqQueue($config);
$q->send('myqueue', 'Hello World');
JMq receiving a message
$config = new JRegistry($configData);
$q = new JMqQueue($config);
$msg = $q->receive('myqueue');
// Process the message here.
$q->delete('myqueue', $msg->messageid);
Problem...
Generally needs some kind of cron.
Low-cost hosts will need to implement some kind of pseudo-cron system.
Might be possible to use a plugin event to transparently process a queue on hosts that do not allow cron.
Joomla use-cases
Image resizing and watermarking.
Smart Search indexing.
Hit counters.
Ecommerce.
Throttling.
Monitoring, logging, clickstream analysis.
Statistics and report generation.
Convinced?
Queue Tips
Queues are cheap
So feel free to use lots of them
Avoid fat messages
Message systems can rarely handlelarge messages efficiently
Guaranteed delivery
There's no such thing
Murphy's Law will always win in the end
Duplicate messages
Assume that some messagesmay be duplicated
Message ordering
Don't assume messages will arrivein the same order they were sent
Avoid transactions
Atomic transactions across message queuesare fraught with difficulty, so avoid them
If you absolutely must have transactionsthen lookup Raft and Paxos algorithms
Error handling
Invalid or undeliverable messagesshould be forwarded to a dead-letter queue
Process failures should bereported to an error queue
Questions?
Image credits 1
http://commons.wikimedia.org/wiki/File:Queuing_z01.jpg?uselang=en-gbhttp://commons.wikimedia.org/wiki/File:Form_an_orderly_queue_to_the_left_%286180460759%29.jpghttp://commons.wikimedia.org/wiki/File:Angry_woman.jpghttp://commons.wikimedia.org/wiki/File:20110529_London_38.JPGhttp://commons.wikimedia.org/wiki/File:Take_off_queue,_Heathrow,_10_Sept._2010_-_Flickr_-_PhillipC.jpghttp://commons.wikimedia.org/wiki/File:DigitalPicture.jpghttp://commons.wikimedia.org/wiki/File:Contrast_improvement.jpghttp://commons.wikimedia.org/wiki/File:Base-isolation.gif
Image credits 2
http://commons.wikimedia.org/wiki/File:Traffic_queues_likely.JPG
http://commons.wikimedia.org/wiki/File:Motorway_queue_near_Lisburn_%282%29_-_geograph.org.uk_-_1380275.jpg
http://commons.wikimedia.org/wiki/File:Queue_for_the_Banksy_Exhibition_-_geograph.org.uk_-_1429992.jpg
http://commons.wikimedia.org/wiki/File:1925_ES%26ARobinson_Invoice_with_illustrations.jpg?uselang=en-gb
http://commons.wikimedia.org/wiki/File:Cirencester_..._snazzy_trolley..jpg
http://commons.wikimedia.org/wiki/File:Copertina_facebook.jpg
http://commons.wikimedia.org/wiki/File:Q_Tips_plain_BG.jpg?uselang=en-gb
http://commons.wikimedia.org/wiki/File:Bus_queue_in_Redhill_Road,_Cobham_-_geograph.org.uk_-_1800438.jpg
Image credits 3
http://commons.wikimedia.org/wiki/File:Queue_at_Pashupatinath01.JPG
http://commons.wikimedia.org/wiki/File:Cracow_queue_1986.jpg (short queue)
http://commons.wikimedia.org/wiki/File:Newport_Staplers_Road_traffic_queue_4.JPG
http://commons.wikimedia.org/wiki/File:Queue_outside_a_soup_kitchenat_Klostertorv_in_%C3%85lborg_1943.jpg
http://commons.wikimedia.org/wiki/File:Bathroom_Scale.jpg?uselang=en-gb
http://commons.wikimedia.org/wiki/File:Super_Cheap_Auto.jpg
http://commons.wikimedia.org/wiki/File:Clones_id.jpg
http://commons.wikimedia.org/wiki/File:Blue_Angels_all_in_a_line_%282501423714%29.jpg
Image credits 4
http://commons.wikimedia.org/wiki/File:Three_in_a_line_-_geograph.org.uk_-_652726.jpg
http://commons.wikimedia.org/wiki/File:Viruses.jpg
Leave it to me, I'm British, I know how to queue.
Smart Search and Beyond
Smart Search and Beyond