leveraging zeromq for node.js

30
https://github.com/so ggie/naws

Upload: ruben-tan

Post on 18-Dec-2014

1.261 views

Category:

Technology


1 download

DESCRIPTION

ZeroMQ is a good tool to know, because it provides a huge variety of socket and messaging patterns that you can leverage in your infrastructure to solve specific problems without using heavyweight message queues to do the same job. This talk illustrates 4 basic sockets provided by zeromq and the many ways you can use them.

TRANSCRIPT

Page 2: Leveraging zeromq for node.js

Leveraging ZeroMQ for Node.js

Another tool in your toolbox

Page 3: Leveraging zeromq for node.js

About Me

•Ruben Tan

•@roguejs (twitter)

•Works in GrabTaxi (Malaysia)

github.com/soggie/naws

Page 4: Leveraging zeromq for node.js
Page 5: Leveraging zeromq for node.js

ZeroMQ

•“zero” as in none, nada, nil, 無

•MQ as in Message Queue

Page 6: Leveraging zeromq for node.js

Why call ZeroMQ as so when it is not a message queue?

Page 7: Leveraging zeromq for node.js

I know. Wrong meme. Shhh.

Page 8: Leveraging zeromq for node.js

•Originally conceived as a stock trading messaging solution

•Moved on to generalizing its purpose

•Adopted BSD Socket API and semantics

•Smart end-point, dump network

Page 9: Leveraging zeromq for node.js

•ZeroMQ is a networking library with message queue semantics

•Used primarily for connectivity between services

•Can be used to facilitate brokerless message passing topologies

Page 10: Leveraging zeromq for node.js

• Socket basics

• Buffering (high watermark)

• Load balancing (outgoing/incoming strategy)

• PUSH socket

• PULL socket

• PUB socket

• SUB socket

• We won’t cover: REQ-REP, XPUB-XSUB, ROUTER-DEALER, STREAM, PAIR, as well as DEVICES

Crash Course!

Page 11: Leveraging zeromq for node.js

0MQ Sockets

•Supports:

• inproc, IPC, TCP, pgm, epgm

•Maintains it’s own internal queue

•High watermark controls buffer size

•Has a MUTE strategy

•Has different INCOMING and OUTGOING strategies

Page 12: Leveraging zeromq for node.js

MUTE

•Connection states:

•connect() ==> READY

•bind() ==> MUTE

•accept() ==> READY

•2 kinds of MUTE state: block or drop

Page 13: Leveraging zeromq for node.js

BLOCK

Page 14: Leveraging zeromq for node.js

DROP

Page 15: Leveraging zeromq for node.js

Exhibit A - REQ-REP

https://github.com/soggie/naws/tree/master/test/talk/exhibit-a.js

Page 16: Leveraging zeromq for node.js

// Bind the REP socketreply.bind('inproc://exhibit-a');

// Make the REQ socket connect to the REP socketrequest.connect('inproc://exhibit-a');

request.on('message', function (msg) { console.log('---- recv: ' + msg.toString());});

reply.on('message', function (msg) { console.log('-- recv: ' + msg.toString());

work(); // Some heavy duty work

reply.send(msg); console.log('--- send: ' + msg.toString());});

setInterval(function () { var msg = color(ran(1000, 1000) + ''); console.log('- send: ' + msg); request.send(msg);}, 1000);

Page 17: Leveraging zeromq for node.js

PUSH• INCOMING: none• OUTGOING: round-robin• MUTE: blocks

PUSHPUSH

AA BB CC

1 2 34 5 6

Page 18: Leveraging zeromq for node.js

Exhibit Bhttps://github.com/soggie/naws/tree/master/test/talk/exhibit-b.js

Page 19: Leveraging zeromq for node.js

PULL• INCOMING fair-queue• OUTGOING none• MUTE block (??) PULLPULL

AA BB CC

1 2 3

4 5 6

Page 20: Leveraging zeromq for node.js

Exhibit Chttps://github.com/soggie/naws/tree/master/test/talk/exhibit-c.js

Page 21: Leveraging zeromq for node.js

PUB• INCOMING none• OUTGOING fan-out• MUTE drop

PUBPUB

AA BB CC

1 1 12 2 2

Page 22: Leveraging zeromq for node.js

Exhibit Dhttps://github.com/soggie/naws/tree/master/test/talk/exhibit-d.js

Page 23: Leveraging zeromq for node.js

SUB• INCOMING fair-queue• OUTGOING none• MUTE none SUBSUB

PP PP PP

1 2 3

4 5 6

Page 24: Leveraging zeromq for node.js

Exhibit Ehttps://github.com/soggie/naws/tree/master/test/talk/exhibit-e.js

Page 25: Leveraging zeromq for node.js

Let’s Build Something

Page 26: Leveraging zeromq for node.js

•A simple HTTP web server on top of express

•Uses worker processes to handle requests

•Can add or kill workers any time

•Rudimentary monitoring and reliability

Page 27: Leveraging zeromq for node.js

Architecture

RR ExpressExpress

PUSHPUSH

HandlerHandler

PULLPULL

SUBSUB PUBPUB

12

3

4

5

6

78

Server Process Worker Process

Page 28: Leveraging zeromq for node.js

Conclusion

•zeromq is a lightweight networking library

•build messaging topologies you want

•nice async features enabling you to do fun stuff (add/kill workers)

•use to connect apps written in different languages/tech stacks

•a very useful tool to have and understand

Page 29: Leveraging zeromq for node.js

Similar & References

• Nanomsg (http://nanomsg.org) - Martin Sustrik, fork/rewrite of 0mq

• Axon (https://github.com/visionmedia/axon) - Pure node.js 0mq sockets

• Theory of ZeroMQhttp://250bpm.com/concepts

• ZeroMQ Internal Architecturehttp://www.aosabook.org/en/zeromq.html

• Dissecting Message Queueshttp://www.bravenewgeek.com/dissecting-message-queues/

Page 30: Leveraging zeromq for node.js

THE ENDQuestions?