Slide 1

Slide 1 text

ZEROMQ TOOLKIT FOR HIGH-PERFORMANCE DISTRIBUTED APPLICATIONS zdeslav vojković @zdeslav_v [email protected] / www.plural.hr

Slide 2

Slide 2 text

DISTRIBUTED APPLICATIONS

Slide 3

Slide 3 text

DISTRIBUTED APPLICATIONS

Slide 4

Slide 4 text

WHAT IS ZEROMQ? not an MQ! networking and concurrency library asynchronous messaging routing/topology aware brokerless high performance multiple transports cross-platform numerous bindings (client libs) LGPL licensed

Slide 5

Slide 5 text

DESIGN AND IMPLEMENTATION

Slide 6

Slide 6 text

NO BROKER

Slide 7

Slide 7 text

CONVENTIONAL SOCKETS (TCP/UDP)

Slide 8

Slide 8 text

ZEROMQ SOCKETS

Slide 9

Slide 9 text

MESSAGES Asynchronous Atomic Multipart

Slide 10

Slide 10 text

PERFORMANCE Low latency, high throughput Zero-copy, reference counted Batching Configurable through socket options RabbitMQ: 4500 msg/s -> ZeroMQ: 250,000 msg/s apples to oranges (but similar use case with transient messages)

Slide 11

Slide 11 text

ZEROMQ API Objects: context, socket, message Flow: create context > bind/connect > send/receive # s e r v e r p r o c e s s c o n t e x t = z m q . C o n t e x t ( 1 ) s o c k e t = c o n t e x t . s o c k e t ( z m q . P U B ) s o c k e t . b i n d ( " t c p : / / * : 5 5 5 6 " ) s o c k e t . s e n d ( " s o m e e v e n t " ) # c l i e n t p r o c e s s c o n t e x t = z m q . C o n t e x t ( ) s o c k e t = c o n t e x t . s o c k e t ( z m q . S U B ) s o c k e t . c o n n e c t ( " t c p : / / s e r v e r : 5 5 5 6 " ) e v e n t _ d a t a = s o c k e t . r e c v ( )

Slide 12

Slide 12 text

NOT IN THE BOX Serialization Compression Security ...

Slide 13

Slide 13 text

TRANSPORTS

Slide 14

Slide 14 text

TRANSPORTS # s e r v e r p r o c e s s c o n t e x t = z m q . C o n t e x t ( 1 ) s o c k e t = c o n t e x t . s o c k e t ( z m q . P U B ) # s o c k e t . b i n d ( " t c p : / / * : 5 5 5 6 " ) s o c k e t . b i n d ( " i p c : / / / t m p / f e e d s / 0 " ) s o c k e t . s e n d ( " s o m e e v e n t " ) # c l i e n t p r o c e s s c o n t e x t = z m q . C o n t e x t ( ) s o c k e t = c o n t e x t . s o c k e t ( z m q . S U B ) # s o c k e t . c o n n e c t ( " t c p : / / l o c a l h o s t : 5 5 5 6 " ) s o c k e t . c o n n e c t ( " i p c : / / / t m p / f e e d s / 0 " ) e v e n t _ d a t a = s o c k e t . r e c v ( )

Slide 15

Slide 15 text

COMMUNICATION PATTERNS

Slide 16

Slide 16 text

PATTERN: PUBLISH-SUBSCRIBE

Slide 17

Slide 17 text

PATTERN: PUBLISH-SUBSCRIBE Sockets: PUB/SUB SUB can subscribe to specific topic or all messages

Slide 18

Slide 18 text

PATTERN: PUBLISH-SUBSCRIBE Sockets: PUB/SUB, XPUB/XSUB

Slide 19

Slide 19 text

PATTERN: CLIENT-SERVER

Slide 20

Slide 20 text

PATTERN: CLIENT-SERVER Sockets: REQ/REP c o n t e x t = z m q . C o n t e x t ( 1 ) s o c k e t = c o n t e x t . s o c k e t ( z m q . R E Q ) s o c k e t . c o n n e c t ( " t c p : / / l o c a l h o s t : 5 5 5 6 " ) s o c k e t . s e n d ( " s o m e e v e n t " ) r e p l y = s o c k e t . r e c v ( ) # b l o c k s

Slide 21

Slide 21 text

PATTERN: CLIENT-SERVER Sockets: REQ/REP, ROUTER/DEALER

Slide 22

Slide 22 text

PATTERN: PIPELINE

Slide 23

Slide 23 text

PATTERN: PIPELINE Sockets: PUSH/PULL

Slide 24

Slide 24 text

PATTERN: THREAD SIGNALING

Slide 25

Slide 25 text

PATTERN: THREAD SIGNALING Socket: PAIR

Slide 26

Slide 26 text

TOPOLOGIES AND DESIGNS

Slide 27

Slide 27 text

DISTRIBUTED LOGGING: PUB-SUB

Slide 28

Slide 28 text

MONGREL2: WEB SERVER

Slide 29

Slide 29 text

CHAT SERVER: OPPOSITE OF MONGREL

Slide 30

Slide 30 text

CONSUMER CONTROLLED PIPELINE

Slide 31

Slide 31 text

THANK YOU! http://zguide.zeromq.org