ZeroC ICE vs 0MQ / ZeroMQ vs Crossroads IO vs Open Source DDS

How does ZeroC ICE compare to 0MQ? I know that 0MQ / Crossroads and DDS are very similar, but don't seem to figure out where the ICE is located.

I need to quickly implement a system that downloads real-time market data from C ++ to C # as the first phase of my project. The next step is to implement an event-based architecture with a basic Pub / Sub design.

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

I am currently leaning towards using Protobuf with ICE or Crossroads IO. Disconnected from the OpenSplice DDS website. I did a lot of research on various parameters, initially considered OpenMPI + boost: mpi, but MPI for .NET does not seem to exist.

My question is:

How does ICE compare to 0MQ? I tilt my head around this. Could not find anything on the Internet comparing the two.

Thank you in advance.

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

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

+4
source share
4 answers

Jaybny

ZMQ: If you need good good performance and the only job for the first phase of your work is to move data from C ++ to C #, then Zmq is the best option. Having a pub / helper for event-driven architecture is also something that Zmq can help you with a built-in messaging template. Zmq also supports your IPC requirements in this case. For example: you may have one instance of your application that consumes 24 cores for multithreading and IPC transfer.

ZeroC Ice: Ice is an RPC system very similar to CORBA.

Eg. Socket / ZMQ - you send a message over the wire. Read it on the other end, analyze the message, follow some steps, etc. ZeroC Ice - create a contract between the client and server. A contract is nothing more than a class template. Now the client calls the proxy method of this class, and the server implements / executes it and returns a value. So int result = mathClass.Add (10,20) is what the client calls. Method, parameters, etc. Sorted and sent to the server, the server implements the "Add" method, returns the result, and the client receives 30 as the result. Thus, on the client side, api is nothing more than a proxy server for a serving server running on a remote host.

Conclusion: ZeroC ICE has great features that are really good. However, for your project requirements, ZMQ is the right tool.

Hope this helps.

+6
source

Some thoughts on ZeroC: Very fast; The ability to have multiple endpoints; Ability to load balance at end points; The ability to reconnect to another endpoint if one of the nodes is omitted. It is transparent to the end user; Has a good toolchain (IceGrid, IceStorm, IceBox, etc.); Distributed, high availability, multiple switching to another resource, etc.

In addition, I used it for hot-swappable modules (something similar to Erlang), creating a client proxy with multiple endpoints, and then reset each endpoint each time for a quick update. With a transparent retry to another endpoint, I could start and start the system all the time when I did the update. Not sure if this is an advertising feature or an unconfirmed side effect :)

In general, it’s very easy to scale your servers if you need to use ZeroC Ice.

I know that ZeroMQ provides a fantastic set of tools and messaging templates, and I will continue to use it for my pet projects. However, the problem I see is that it is very easy to go overboard and lose all your distributed components. This should be in a distributed environment. How do you know where your clients / server is when you need to upgrade? If one of the components in the chain does not receive a message, how to determine where the problem is? publisher? customer? or any of the bridges (REP / REQ, XREP / XREQ, etc.) between?

Overall, ZeroC provides a much better set of tools and an ecosystem for enterprise solutions.

And this is open source :)

+7
source

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

Note: in windows 0mq does not have IPC.

So, overall, the 0mq intersection beam is the best. but you will have to minimize your own windows / ipc (or use tcp :: 127 ..) and publisher theme filtering functions for pub / sub.

+1
source

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

http://nanomsg.org/

+1
source

All Articles