ZeroMQ as scriptable sockets

Post on 01-Sep-2014

3,138 views 3 download

Tags:

description

ZeroMQ is a socket abstraction and concurrency framework that's changing the way we think and reason about distributed systems. In this talk we'll discuss : The importance of lightweight messaging for applications Composable messaging patterns Swappable transports Refactoring at the transport layer Resiliency and reliability Small case study

transcript

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

ZeroMQ as scriptable sockets

Realtimeconf EU 2013Lyon - http://realtimeconf.eu/

Lourens Naudé

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Why this talk ?

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Operations / Platform

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Credentials

ZeroMQ monitoring supportczmq co-maintainerRuby bindingExperimental TLS support

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

99% of deployments don’t need enterprise

reliability

Of reliability

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Then ...

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

... now

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Zero broker, admin, cost, waste, price tag and (almost) zero latency

What is ZeroMQ ?

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

What it isn’t

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

IM for apps

Not a server or message queueA libraryCommunication / concurrencyMessaging semantics for sockets

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

BSD API

sock.bind(“inproc://workers”)sock.connect (“tcp://0.0.0.0:30”)sock.send (“message”)msg = sock.recv ()sock.close ()

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Community

30+ language bindings ...

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Super (scriptable) sockets

What is a ZeroMQ socket ?

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

bind () or connect () to multiple endpoints,

simultaneously

Multiple endpoints

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

bind () or connect () in any order

Async connect

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Socket types

PUB SUB

REQ REP

PUSH PULL

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Request / reply

REQ

REP

REQ

REP REP

REP

REQ REQ

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Request / Reply usage

Lock stepBi-directionalRoutableFlow control, orchestration etc.

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Publish / subscribe

PUB

SUB SUB SUB

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Inversion - logging

SUB

PUB PUB PUB

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Publish / subscribe usage

Market data, game state etc.PUB socket distributesSUB socket filtersSubscription forwarding (3.x)

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Pipeline

PUSH

PULL PULL PULL

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Pipeline usage

Extendable - UNIX pipesRound-robin distributionTasks with variable processing

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Transport agnostic

inproc:// - threads in a processipc:// - processes on a boxtcp:// - nodes in a networkUniform API

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Lightweight switchesDevices

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

pub/sub persistence

PERSISTENCEDEVICE

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Device main loop

loop do m = sub_socket.recv () persist (m) pub_socket.send (m)end

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Use cases

ProxyRouting (LRU)Filtering / de-dupTranslation

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Work distribution

PUSH

PULL

PUSH

PULL

PULL

PUSH

PULL

PUSH

VENTILATOR

SINK

Monday, April 22, 13

PUSH

PULL

PUSH

PULL

PULL

PUSH

PULL

PUSH

VENTILATOR

SINK

PUSH

PULLBear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Scalable work distribution

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Interjection Principle

Scalable topologies

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Saving bandwidth

SUBPUB

PUB

SUB SUB

SUB SUB

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Asynchronous external dependencies.

Resiliency

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Atomicity

Atomic message deliveryUnbound message sizeSend 5GB, recv all or nothing

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Availability

Delayed retry on failureMulti bind() and connect()Unordered bind() or connect()

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Reliability as patterns

Lazy Pirate (REQ / REP)Majordomo (queue)Titanic (persistence)Binary Star (High Availability)See http://zguide.zeromq.org

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

ZeroMQ concurrency

PUSH

PULL PULL PULL

MAIN THREAD

THREAD 1 THREAD 2 THREAD 3

I/OTHREAD

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

s = ctx.bind(:PUSH, "inproc://w")3.times{ spawn_worker(ctx) }loop do msg = work.shift break if msg == “exit” s.send(msg)end

Master (work distributor)

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Thread.new do s = ctx.connect(:PULL, “inproc://w”) loop do msg = s.recv break if msg == "quit" process(msg) endend

Workers (consumer threads)

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Mongrel2Case study

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

How it works

Multi-protocolZeroMQ for backendsAsync backend requestsLanguage agnostic (bindings)

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Mongrel2 topology

PULL

PUB

PULL

PUB

PUSH

SUB

BACKEND A BACKEND B

MONGREL2

CLIENT

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Mongrel2 protocol

UUID ID PATH SIZE:HEADERS,SIZE:BODY

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Mongrel2 HTTP request

PUSH PULL

AB23 4 /uri SIZE:HEADERS,SIZE:BODY

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Mongrel2 HTTP response

SUB PUB

AB23 4 /uri SIZE:HEADERS,SIZE:BODY

Monday, April 22, 13

Bear Metal OÜ| Õismäe tee 78-25, 13513 Tallinn, Harjumaa, Estonia | info@bearmetal.eu

Questions ?(... or sync up after)

O fim

fork @methodmissingfollow @methodmissing

Monday, April 22, 13