Slide 1

Slide 1 text

ZeroMQ: Scale Up ! whoami

Slide 2

Slide 2 text

Why ZeroMQ ? we live in a connected world ! we have to develop faster

Slide 3

Slide 3 text

Simple server (Python) import zmq context = zmq.Context(1) socket = context.socket(zmq.REP) socket.bind("tcp://*:5555") while True: # wait for request from client message = socket.recv() print ">: {}".format(message) answer = message[::-1] socket.send(answer) print "<: {}".format(answer) Client (Ruby) require 'zmq' context = ZMQ::Context.new(1) socket = context.socket(ZMQ::REQ) socket.connect("tcp://localhost:5555") message = "Have you met Ted ?" puts "<: #{message}" socket.send(message) answer = socket.recv() puts ">: #{answer}"

Slide 4

Slide 4 text

Basics BSD socket API message oriented various connection patterns small (20k SLOC of C++) fast LGPLv2+

Slide 5

Slide 5 text

various transports: tcp, ipc, inproc, pgm multithreaded friendly zero-copy for messages auto-reconnect Native Patterns

Slide 6

Slide 6 text

Request-Reply Publish-Subscribe

Slide 7

Slide 7 text

Pipeline various high-level patterns Lazy/Simple/Paranoid pirate majordomo all described in the zguide !

Slide 8

Slide 8 text

Various routing patterns round-robin (REQ, PUSH, DEALER) multicast (PUB) fair queueing (REP, SUB, PULL, DEALER) explicit routing (ROUTER) point to point (PAIR) Concurrency ?

Slide 9

Slide 9 text

Today ? data-centric model one datum, many executors you must control data accesses Consequences complexity race conditions heisenbugs

Slide 10

Slide 10 text

How ? adopt message-driven design ! design independant tasks (threads, processes) use inproc:// (threads), ipc:// (processes), tcp:// (network) In practice ... use actor model formalized by Carl Hewitt in 1973 Popularized by Erlang

Slide 11

Slide 11 text

Benefits lock-free no active wait ! rapid prototyping e = mc²

Slide 12

Slide 12 text

Conclusion