Post on 01-Sep-2014
description
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