[zeromq-dev] Migrating IPC-based Pub/Sub System To ZMQ
Matt Weinstein
matt_weinstein at yahoo.com
Fri Aug 13 18:55:59 CEST 2010
I converted this to PDF YMMV:
On Aug 13, 2010, at 11:57 AM, Santy, Michael wrote:
> All,
>
> I'm currently working to refactor an existing pub/sub distributed
> system built around CMU IPC[1] and raw sockets to solely use ZMQ.
> I've not been able to fit it into any one of the common patterns, so
> I'd like to get some feedback from the list on how to improve my
> proposed design.
>
> For those of you not familiar with CMU IPC: It is a brokered pub/sub
> framework in which every process can pub and sub through the CMU IPC
> API. CMU IPC connects to a "central" server process via TCP/IP to
> register for subscriptions and publish messages. Typically this
> central server also routes the messages as well. While CMU IPC
> works relatively well for its intended use, we've found its
> performance and fault tolerance a bit lacking. We've done some
> benchmarking and on large messages the performance is unacceptable.
> In addition to the multi-hop latency forced by a brokered system,
> the network utilization was less than 30% on 1GbE and much worse on
> 20Gb IB. In addition, the IPC central server is a central point of
> failure. If it goes down, it takes all of the clients with it and
> we've found no way to recover.
>
> The top half of the attached diagram illustrates our existing
> system. It collects high-speed data from a number of sources,
> combines the data centrally into processing packets, and farms out
> these processing packets (mostly) round-robin to one of many data
> processors. Because of the performance issues we only use CMU IPC
> for administrative messages (shown in dashed red). We've
> implemented a mechanism based on raw sockets for distributing the
> high-speed data (shown in blue), and use CMU IPC to coordinate these
> socket connections.
>
> I believe that by adopting ZMQ, we can improve / simplify our system
> by moving both our high-speed data and administrative messages into
> a single ZMQ-based messaging framework. As a benefit, it appears
> that we can gain some fault tolerance, as ZMQ abstracts the socket
> bind/connect ordering and handles reconnection. The lower half of
> the diagram shows my best guess of how to adopt ZMQ. In this
> diagram, all connections between processes are ZMQ, and the
> endpoints are labeled as to whether the ZMQ socket binds or
> connects, and whether it is a pub or a sub ZMQ socket.
>
> The zmq_forwarder device seems very analogous to the CMU IPC central
> server, so it appears easiest to have it bind for subscribers and
> for publishers. Each process that needs to publish or subscribe
> would connect to one or both of the endpoints provided by
> zmq_forwarder. All administrative messaging will go through this
> zmq_forwarder process. For high-speed data, I don't think it would
> be best to go through the forwarder, as the data will only be sent
> to one process, and I'd like to avoid the overhead of two network
> hops. In this case I think it makes sense to use pub/sub ZMQ
> sockets directly from the publisher of the high-speed data to the
> subscriber.
>
> In this design, there are still two central points of failure: the
> zmq_forwarder and the data_combiner. If either of these processes
> go down, the operation of the system will stop. In the previous
> system, it would stop catastrophically. In the ZMQ-based refactored
> system, I believe that we can gracefully handle unavailability of
> either of these processes and restart when they come back only due
> to ZMQ's connection abstraction.
>
> I've played around with the examples and have a superficial
> understanding of ZMQ, but have yet to apply it to a non-academic
> problem. I'd really appreciate any feedback on this design from
> those of you using ZMQ in production systems.
>
> Thanks!
>
> Mike Santy
>
> [1] http://www.cs.cmu.edu/~IPC/
>
>
>
> <zmq_topology.svgz>_______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20100813/535381f2/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: zmq_topology.pdf
Type: application/pdf
Size: 21636 bytes
Desc: not available
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20100813/535381f2/attachment.pdf>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20100813/535381f2/attachment-0001.htm>
More information about the zeromq-dev
mailing list