7

How does ZeroC ICE compare to 0MQ? I know that 0MQ/Crossroads and DDS are very similar, but cant seem to figure out where ICE comes in.

I need to quickly implement a system that offloads real-time market-data from C++ to C#, as a first phase of my project. The next phase will be to implement an Event Based architecture with an underlying Pub/Sub design.

I am willing to use TCP.. but the the system is currently running on a single 24 core server.. so an IPC option would be nice. From what I understand ICE is only TCP, while DDS and 0mq have an IPC option.

Currently ,I am leaning towards using Protobuf with either ICE or Crossroads IO. Got turned off from the OpenSplice DDS website. Ive done lots research on the various options, was originally considering OpenMPI + boost:mpi, but there does not seem to be MPI for .NET.

My question is:

How does ICE compare to 0MQ? I cant wrap my head around this. Was unable to find anything online that compares the two.

thanks in advance.

........ More about my project:

Currently using CMAKE C++ on Windows, but the plan is to move to CentOS at some point. An additional desired feature is to store the tic data and all the messages in a "NoSql" database such as Hbase/Hadoop or HDF5. Do any of these middleware/messaging/pub-sub libraries have any database integration?

jaybny
  • 1,026
  • 2
  • 13
  • 29
  • While persistence in a MQ library isn't unheard of, database integration in your messaging layer sounds awkward. Don't worry about that, embrace distribution instead. Subscribing to your tick data publisher and storing the input to a db makes for a nice, self-contained app. – eevar Aug 24 '12 at 08:13
  • It could be thought of like this: ALL messages from a session need to be resent in the event of any downstream app crash and restart.. so it can be thought of a long "message transaction", that if not fully completed.. would need to be resent.. so there is some logical way to say that the messages layer should resent all messages "missed" when an app starts up. but i agree w you. – jaybny Aug 24 '12 at 13:28

4 Answers4

8

Some thoughts about ZeroC: Very fast; Able to have multiple endpoints; Able to load balance on the endpoints; Able to reconnect to a different endpoint in case one of the node goes down. This is transparent to the end user; Has good tool chain (IceGrid, IceStorm, IceBox, etc); Distributed, high availability, multiple failover, etc

Apart from that, I have used it for hot swapping code modules (something similar to Erlang) by having the client create the proxy with multiple endpoints, and later on bring down each endpoint for a quick upgrade one by one. With the transparent retry to a different endpoint, I could have the system up and running the whole time i did an upgrade. Not sure if this is an advertised feature or an unadvertised side-effect :)

Overall, it is very easy to scale out your servers if need be using ZeroC Ice.

I know ZeroMQ provides a fantastic set of tools and messaging patterns and I would keep using it for my pet projects. However, The problem that i see is that it is very easy to go overboard and lose track of all your distributed components. This is a must have in a distributed environment. How will you know where your clients/server are when you need to upgrade? If one of components down the chain does not receive a message, how to identify where the issue is? the publisher? the client? or any one of the bridges (REP/REQ, XREP/XREQ, etc) in between?

Overall, ZeroC provides a much better toolset and ecosystem for enterprise solutions.

And it is open source :)

7

Jaybny,

ZMQ: If you want real good performance and the only job for Phase 1 of your job is to move data from C++ to C#, then Zmq is the best option. Having a pub/sub model for event driven architecture is also something that Zmq can help you with, with its in-built messaging pattern. Zmq also supports your IPC requirements in this case. Eg: you can have one instance of your application that consumes 24 cores by multithreading and communicating via IPC.

ZeroC Ice: Ice is a RPC framework very much like CORBA.

Eg. Socket/ZMQ - You send message over the wire. Read it at the other end, parse the message, do some action, etc. ZeroC Ice - Create a contract between client and server. Contract is nothing but a template of a class. Now the client calls a proxy method of that class, and the server implements/actions it and returns the value. Thus, int result = mathClass.Add(10,20) is what the client calls. The method, parameters, etc is marshalled and sent to the server, server implements the Add method, returns the result, and the client gets 30 as the result. Thus on the client side, the api is nothing but a proxy for a servant running on a remote host.

Conclusion: ZeroC ICE has some nice enterprisy features which are really good. However, for your project requirements, ZMQ is the right tool.

Hope this helps.

  • In terms of raw performance, ZeroC ICE is very fast. For most cases this should be enough. If however, your needs are sub millisecond, low latency, etc then ZMQ is a better choice. – Ravindra Josyula Aug 30 '12 at 06:58
  • I wouldn't say that ZeroC Ice is "much like CORBA", see http://www.zeroc.com/iceVsCorba.html – Contango Jul 22 '13 at 20:38
1

For me.. the correct answer was Crossroads I/O . It does everything I need.. but still unable to pub/sub when using protobufs... im sure ZeroC ICE is great for distributed IPC, but 0MQ/Crossroads, gives you the added flexibility to use Inter-Thread-Communication.

Note: on windows, 0mq does not have IPC.

So, all in all, the crossroads fork of 0mq is the best. but you will have to roll your own windows/ipc (or use tcp::127..) , and publisher side topic filtering features for pub/sub.

jaybny
  • 1,026
  • 2
  • 13
  • 29
  • Thanks for sharing! You say Crossroads (vs ZMQ) is the best fork, have you seen any specific differences (stability/features etc.) or is that conclusion more based on available community/support? I am currently looking into a similar solution myself. – Jakob Möllås Nov 21 '12 at 10:37
  • 1
    It seems like Crossroads I/O ceased development back around July, based on a comment that the creator has abandoned it for a new project, and the cessation of commits to the main repository. – Kitsune Nov 24 '12 at 00:05
  • Crossroads I/O is clean and bug free. It provides the basic messaging functionality w/o all the fluff. I'm using it in production and plan on contributing in the future. Think of Crossroads as a minimalist 0MQ. – jaybny Nov 28 '12 at 17:51
  • 1
    nanomsg is the new crossroads – jaybny Apr 27 '14 at 10:14
1

nanomsg, from the guy who wrote crossroads and 0mq (i think).

http://nanomsg.org/

jaybny
  • 1,026
  • 2
  • 13
  • 29