leave this to me. i'm british. i know how to queue

Download Leave this to me.  I'm British.  I know how to queue

If you can't read please download the document

Upload: chris-davenport

Post on 16-Apr-2017

1.948 views

Category:

Internet


0 download

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