ekbpy'2012 - Антон Патрушев - ZeroMQ

25
: Intro Антон Патрушев

Transcript of ekbpy'2012 - Антон Патрушев - ZeroMQ

Page 1: ekbpy'2012 - Антон Патрушев - ZeroMQ

: Intro

Антон Патрушев

Page 2: ekbpy'2012 - Антон Патрушев - ZeroMQ

ZeroMQ: WTF ?

● high-performance● asynchronous● messaging library

● provides a message queue● ... but can run without a dedicated message broker

● behaves like a sockets● ... like an awesome sockets

● programming language neutral (many bindings)● protocol agnostic

Page 3: ekbpy'2012 - Антон Патрушев - ZeroMQ

Категории в wikipedia

● Concurrent programming libraries● Inter-process communication● Message-oriented middleware

"The socket library that acts as a concurrency framework."(c) zeromq.org

Page 4: ekbpy'2012 - Антон Патрушев - ZeroMQ

История iMatix

2004 – AMQP standard for JPMorganChase

2005 – OpenAMQ message broker/client

2008 – ØMQ/0.x for the avant-garde

2009 – ØMQ/1.x for pioneers (finance)

2010 – ØMQ/2.x for early adopters (foss) (аргументированный) отказ iMatix от поддержки AMQP

2011 – ØMQ/3.x for mass market (cloud)

Page 5: ekbpy'2012 - Антон Патрушев - ZeroMQ

Давайте знакомиться

● простой socket-like API○ zmq_bind/zmq_connect/zmq_close○ zmq_poll○ zmq_recv/zmq_send

● передача __сообщений__○ атомарность○ multipart○ any payload (ProtoBuf / XDR / JSON ...)

Page 6: ekbpy'2012 - Антон Патрушев - ZeroMQ

Клиент

import zmq

context = zmq.Context()

socket = context.socket(zmq.REQ)

socket.connect ("tcp://localhost:5555")

for request in range (1,10):print "Sending request ", request, "…"

socket.send ("Hello")

message = socket.recv()print "Received reply ", request, "[", message, "]"

Page 7: ekbpy'2012 - Антон Патрушев - ZeroMQ

Сервер

import zmq

context = zmq.Context()

socket = context.socket(zmq.REP)

socket.bind ("tcp://localhost:5555")

while True:

message = socket.recv()

print "Received request, sending reply"

socket.send ("World")

Page 8: ekbpy'2012 - Антон Патрушев - ZeroMQ

Доставка сообщений

● протоколы○ inproc○ ipc○ tcp○ epgm (!!!)

● набор паттернов маршрутизации○ REQUEST/REPLY (task distribution)○ PUBLISH/SUBSCRIBE (data distribution)○ PUSH/PULL (task distribution/collection)

Page 9: ekbpy'2012 - Антон Патрушев - ZeroMQ

Request/Reply

f

Page 10: ekbpy'2012 - Антон Патрушев - ZeroMQ

Publisher/Subscriber

f

Page 11: ekbpy'2012 - Антон Патрушев - ZeroMQ

Pipeline

f

Page 12: ekbpy'2012 - Антон Патрушев - ZeroMQ

Mongrel2

● Request -> PUSH (LB)● Response -> PUB● Pipelining

Page 13: ekbpy'2012 - Антон Патрушев - ZeroMQ

State replication

а

Page 14: ekbpy'2012 - Антон Патрушев - ZeroMQ

Devices (1)

f

Page 15: ekbpy'2012 - Антон Патрушев - ZeroMQ

Devices (2)

f

Page 16: ekbpy'2012 - Антон Патрушев - ZeroMQ

Forwarder

f

Page 17: ekbpy'2012 - Антон Патрушев - ZeroMQ

Request-Reply Broker (1)

f

Page 18: ekbpy'2012 - Антон Патрушев - ZeroMQ

Request-Reply Broker (2)

f

Page 19: ekbpy'2012 - Антон Патрушев - ZeroMQ

Devices (последний, инфа 146%)

● встроенные○ QUEUE - request/reply broker○ FORWARDER - pub-sub proxy○ STREAMER - forwarder for pipelines

● ваши собственные○ соединяем backend и frontend сокеты○ реализуем собственную логику маршратизации○ выстраиваем топологию приложения

Page 20: ekbpy'2012 - Антон Патрушев - ZeroMQ

А был ли мальчик ? (про аналоги)

● Berkeley sockets (transport dependent)

● Sun RPC● DCOM● Corba● XML-RPC -> SOAP● JMS● ZeroC Ice● Java RMI● Thrift

Page 21: ekbpy'2012 - Антон Патрушев - ZeroMQ

License

"ØMQ is available under the LGPLv3 with a static linking exception including for iPhone apps. We do not offer a commercial license alternative."

(c) zeromq.org

ØMQ is 100% owned by the communityWhich iMatix is a happy part of

Page 22: ekbpy'2012 - Антон Патрушев - ZeroMQ

What's next ?

"0MQ is unbelievably cool - if you haven't got a project that needs it, make on up"

Jon Gifford - Loggly

Page 23: ekbpy'2012 - Антон Патрушев - ZeroMQ

What's next (again) ?

● www.imatix.com/articles:whats-wrong-with-amqp

● zguide.zeromq.org

● rfc.zeromq.org

● api.zeromq.org

● bhavin.directi.com/selecting-a-message-queue-amqp-or-zeromq/

Page 24: ekbpy'2012 - Антон Патрушев - ZeroMQ

Вопросы ?

@[email protected]

Page 25: ekbpy'2012 - Антон Патрушев - ZeroMQ

Этот доклад о самой технологиий, истории и предпосылках ее возникновения, текущем состоянии и вариантах применения, преимуществах, недостатках и альтернативах

в случае гетерогенной, многокомпонентной среды встает вопрос выноса некоторых компонент в отдельные процессы

в erlang есть хорошая парадигма Let it dieReliable multicast (best for pub/sub) !!!