Outline● Quick Definition● Creators● Why ØMQ?● What the hell is it?● Patterns● Demos● Should it be C?● Discussion
Quick Definition● ØMQ (aka ZeroMQ, 0MQ or ZMQ)● a high-performance asynchronous messaging library● aimed at use in scalable distributed or concurrentapplications.● It provides a message queue, but unlike message-orientedmiddleware, a ØMQ system can run without a dedicatedmessage broker.● The library is designed to have a familiar socket-style API.
Creators - Martin Sústrik● Martin Sústrik (@sustrik)● Expert in the field of messagingmiddle-ware● Participated in the creation &implementation reference of AMQPstandard.● Founder of the ØMQ project.● currently is working on integration ofmessaging technology with OS &Internet stack
Creators - Pieter Hintjens● Belgian software developer, writer.● Past president of the Foundation for a Free InformationInfrastructure● Author of Orielly ZeroMQ● CEO or iMatix
Why ØMQ?● Moores Law means more moving pieces● Cost of Connection is high● Needed cheaper, fast and reliable connections● Physics of Software Development
What the hell is it?● Intelligent socket library for messaging● Many kinds of connection patterns● Multiplatform, multi-language (30+: ruby, C, C++, java,python, …. )● Fast (8M msg/sec, 30usec latency)● Small (20K lines of C++ code)● Distributed● Open source LGPL (large community)
What the hell is it? (2)● Socket like API. But better than sockets● Based on reactor pattern“Event handling pattern for handling service requestsdelivered concurrently to a service handler by one or moreinputs. The service handler then demultiplexes theincoming requests and dispatches them synchronously tothe associated request handlers.”
ØMQ Benefits● Start with simple / fast language (Python)● Move to faster language where needed (C)● Run on arbitrary platforms (Windows, Android)● Scale to arbitrary sizes (2 cores, 16 cores...)● No per-core or per-seat licensing● Easy to experiment and learn
AMQP vs ØMQ● Centralized (like SVN)● Family of messagingprotocols used throughimplementations likeRabbitMQ, Apache Qpid..● Main use cases: transientpubsub distribution andreliable request-reply● Dozens of pieces doingperhaps a hundredthousand messages persecond● Distributed (like git)● Messaging library, andtools● Covers transient pubsub,unreliable request-reply,pipeline, and peer-to-peer.● Hundreds or thousands ofpieces perhaps doinghundreds of millions ofmessages per second
Why should it have been C?● C++ was chosen for STL,coding style, destructors,virtual functions● 5 years old admission:poor choice● Exception Handlingguarantee not failing, butnot undefined behavior● Meant to be infrastructure● Preventing undefinedbehavior more important● More efficient compiledcode● System program● Recent translation to C,nanomsg (not releasedyet)
References● http://zguide.zeromq.org/page:all● http://en.wikipedia.org/wiki/%C3%98MQ● http://www.imatix.com/● http://www.zeromq.org/docs:welcome-from-amqp● http://www.rabbitmq.com/blog/tag/zeromq/● http://www.250bpm.com/blog:4 (why it shouldve been C)● http://nanomsg.org/ (C endeavor)● http://www.zeromq.org/docs:labs● http://www.slideshare.net/pieterh/overview-of-zeromq
A particular slide catching your eye?
Clipping is a handy way to collect important slides you want to go back to later.