Ømq and CakePHP
Socket programming brought to your web app
What is Ømq?

Intelligent socket library for messaging
Incredibly flexible, you can build your own patterns
Fast as hell
Fault tolerant
Language agnostic
What is not Ømq?

A message queue, it literally has zero message queues
A server you can connect to
Persistent
Out of the box solution (sorry to let you down)
Why use Ømq instead of X?
It’s a paradigm change, you can hardly compare it to “other
solutions”
When your system require more advanced network
interactions (or patterns)
You need cheap and easy parallel processing
You don’t want a single point of failure
You need exceptional speed
Transports
Supported transports

INPROC (in-process communication)
IPC (inter-process communication)
Multicast (using a pgm multicast)
TCP
Let’s talk about
    patterns
Patterns is all what Ømq is about
You can choose to use any of the patterns or combine them
all in a single application
Combining patterns help you build more advanced
distributed systems
ICANHAZ?

Client              Server




Request - Reply
Request - Reply
                  client.php
Request - Reply
                  server.php
Wait a minute...

This looks way too slow, a single php process won’t cope the
load of multiple clients.
We need a solution
The solution

Start more servers on different ports
Bind your clients to multiple servers using the same socket
Ømq will automatically load balance them for you
Drawback: You need to hardcode server addresses on each
client
Load Balanced Requests




               More on balancing later...
Client


               Client
  Server
               Client

               Client


Publisher - Subscriber
Publisher
            publisher.php
Subscriber
             client.php
Pub - Sub

Like a radio broadcast, if you tune in late you’ll miss part of
the show
If client crashes the it will also lose messages
It is possible to attach multiple filters to a connection
You can listen on multiple addresses at once
Pub -Sub

Ømq will buffer the messages in the subscriber if it is a “slow
listener”
It will drop messages if buffer gets too big
That is extremely cool
Client   Worker      Worker           Worker
                  more steps
         Worker
Fan      Worker                Sink

         Worker



  Push - Pull (Pipeline)
Push - Pull
              ventilator.php
Push - Pull
              task.php
Push - Pull
              sink.php
Push - Pull
One way only
PUSH is used for “fanning out” tasks
PULL is used for fan-in or sink processes
Workers can hop-in at any time
Only one worker gets the task at a time and they are load
balanced
Push - Pull

Ømq will buffer the messages if there are no peers to get
them
It will block at some point if buffering too much
That is also extremely cool
Devices
Devices or Brokers

Devices are programs that will route messages between two
nodes
Devices are usually small but they can also be trusted with
larger tasks, such as persisting messages
Used to solve hard problems but also introduce single points
of failure
We needed a solution
Devices as balancers
  Client   Client   Client



           Dealer



  Server   Server   Server
A simple broker
                  broker.php
Devices

Clients will connect to localhost:5559
Servers will connect to localhost:5560
Load balancing is done by Ømq
If dealer fails everything breaks :(
You can install failover dealers! :)
Devices

Allow you to create more complex topologies
Help you route requests to anonymous workers
Good place for handling/persisting/retrying messages extra
logic
Can be written in any language supported by Ømq!
Let’s see some
  examples

ZeroMQ in PHP

  • 1.
    Ømq and CakePHP Socketprogramming brought to your web app
  • 2.
    What is Ømq? Intelligentsocket library for messaging Incredibly flexible, you can build your own patterns Fast as hell Fault tolerant Language agnostic
  • 3.
    What is notØmq? A message queue, it literally has zero message queues A server you can connect to Persistent Out of the box solution (sorry to let you down)
  • 4.
    Why use Ømqinstead of X? It’s a paradigm change, you can hardly compare it to “other solutions” When your system require more advanced network interactions (or patterns) You need cheap and easy parallel processing You don’t want a single point of failure You need exceptional speed
  • 5.
  • 6.
    Supported transports INPROC (in-processcommunication) IPC (inter-process communication) Multicast (using a pgm multicast) TCP
  • 7.
  • 8.
    Patterns is allwhat Ømq is about You can choose to use any of the patterns or combine them all in a single application Combining patterns help you build more advanced distributed systems
  • 9.
    ICANHAZ? Client Server Request - Reply
  • 10.
    Request - Reply client.php
  • 11.
    Request - Reply server.php
  • 12.
    Wait a minute... Thislooks way too slow, a single php process won’t cope the load of multiple clients.
  • 13.
    We need asolution
  • 14.
    The solution Start moreservers on different ports Bind your clients to multiple servers using the same socket Ømq will automatically load balance them for you Drawback: You need to hardcode server addresses on each client
  • 15.
    Load Balanced Requests More on balancing later...
  • 16.
    Client Client Server Client Client Publisher - Subscriber
  • 17.
    Publisher publisher.php
  • 18.
    Subscriber client.php
  • 19.
    Pub - Sub Likea radio broadcast, if you tune in late you’ll miss part of the show If client crashes the it will also lose messages It is possible to attach multiple filters to a connection You can listen on multiple addresses at once
  • 20.
    Pub -Sub Ømq willbuffer the messages in the subscriber if it is a “slow listener” It will drop messages if buffer gets too big That is extremely cool
  • 21.
    Client Worker Worker Worker more steps Worker Fan Worker Sink Worker Push - Pull (Pipeline)
  • 22.
    Push - Pull ventilator.php
  • 23.
    Push - Pull task.php
  • 24.
    Push - Pull sink.php
  • 25.
    Push - Pull Oneway only PUSH is used for “fanning out” tasks PULL is used for fan-in or sink processes Workers can hop-in at any time Only one worker gets the task at a time and they are load balanced
  • 26.
    Push - Pull Ømqwill buffer the messages if there are no peers to get them It will block at some point if buffering too much That is also extremely cool
  • 27.
  • 28.
    Devices or Brokers Devicesare programs that will route messages between two nodes Devices are usually small but they can also be trusted with larger tasks, such as persisting messages Used to solve hard problems but also introduce single points of failure
  • 29.
    We needed asolution
  • 30.
    Devices as balancers Client Client Client Dealer Server Server Server
  • 31.
    A simple broker broker.php
  • 32.
    Devices Clients will connectto localhost:5559 Servers will connect to localhost:5560 Load balancing is done by Ømq If dealer fails everything breaks :( You can install failover dealers! :)
  • 33.
    Devices Allow you tocreate more complex topologies Help you route requests to anonymous workers Good place for handling/persisting/retrying messages extra logic Can be written in any language supported by Ømq!
  • 34.