简体   繁体   English

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

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

How does ZeroC ICE compare to 0MQ? ZeroC ICE与0MQ相比如何? I know that 0MQ/Crossroads and DDS are very similar, but cant seem to figure out where ICE comes in. 我知道0MQ / Crossroads和DDS非常相似,但似乎无法弄清楚ICE的位置。

I need to quickly implement a system that offloads real-time market-data from C++ to C#, as a first phase of my project. 我需要快速实现一个系统,将实时市场数据从C ++卸载到C#,作为我项目的第一阶段。 The next phase will be to implement an Event Based architecture with an underlying Pub/Sub design. 下一阶段将实现具有基础Pub / Sub设计的基于事件的架构。

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. 我愿意使用TCP ..但系统当前正在一台24核服务器上运行..因此IPC选项会很好。 From what I understand ICE is only TCP, while DDS and 0mq have an IPC option. 根据我的理解,ICE只是TCP,而DDS和0mq有IPC选项。

Currently ,I am leaning towards using Protobuf with either ICE or Crossroads IO. 目前,我倾向于使用Protobuf与ICE或Crossroads IO。 Got turned off from the OpenSplice DDS website. 已从OpenSplice DDS网站关闭。 Ive done lots research on the various options, was originally considering OpenMPI + boost:mpi, but there does not seem to be MPI for .NET. 我已经对各种选项进行了大量研究,最初考虑的是OpenMPI + boost:mpi,但似乎没有针对.NET的MPI。

My question is: 我的问题是:

How does ICE compare to 0MQ? ICE与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. 目前在Windows上使用CMAKE C ++,但计划在某个时候转移到CentOS。 An additional desired feature is to store the tic data and all the messages in a "NoSql" database such as Hbase/Hadoop or HDF5. 另一个所需的特性是将tic数据和所有消息存储在“NoSql”数据库中,例如Hbase / Hadoop或HDF5。 Do any of these middleware/messaging/pub-sub libraries have any database integration? 这些中间件/消息/ pub-sub库中的任何一个都有任何数据库集成吗?

Jaybny, 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. ZMQ:如果你想要真正的良好性能,而你工作的第一阶段唯一的工作就是将数据从C ++移动到C#,那么Zmq是最好的选择。 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可以通过其内置消息模式帮助您的东西。 Zmq also supports your IPC requirements in this case. 在这种情况下,Zmq还支持您的IPC要求。 Eg: you can have one instance of your application that consumes 24 cores by multithreading and communicating via IPC. 例如:您可以拥有一个应用程序实例,通过多线程和IPC通信来消耗24个内核。

ZeroC Ice: Ice is a RPC framework very much like CORBA. ZeroC Ice:Ice是一个非常类似于CORBA的RPC框架。

Eg. 例如。 Socket/ZMQ - You send message over the wire. 套接字/ ZMQ - 您通过线路发送消息。 Read it at the other end, parse the message, do some action, etc. ZeroC Ice - Create a contract between client and server. 在另一端阅读它,解析消息,做一些操作等.ZeroC Ice - 在客户端和服务器之间创建一个契约。 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. 因此,int result = mathClass.Add(10,20)是客户端调用的。 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. 方法,参数等被编组并发送到服务器,服务器实现Add方法,返回结果,客户端得到30作为结果。 Thus on the client side, the api is nothing but a proxy for a servant running on a remote host. 因此,在客户端,api只是在远程主机上运行的服务方的代理。

Conclusion: ZeroC ICE has some nice enterprisy features which are really good. 结论:ZeroC ICE有一些很好的创业功能,非常好。 However, for your project requirements, ZMQ is the right tool. 但是,对于您的项目要求,ZMQ是正确的工具。

Hope this helps. 希望这可以帮助。

Some thoughts about ZeroC: Very fast; 关于ZeroC的一些想法:非常快; 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); 有良好的工具链(IceGrid,IceStorm,IceBox等); 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. 除此之外,我已经将它用于热交换代码模块(类似于Erlang),让客户端创建具有多个端点的代理,然后逐个关闭每个端点以进行快速升级。 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. 总的来说,如果需要使用ZeroC Ice,很容易扩展您的服务器。

I know ZeroMQ provides a fantastic set of tools and messaging patterns and I would keep using it for my pet projects. 我知道ZeroMQ提供了一套很棒的工具和消息模式,我会继续将它用于我的宠物项目。 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? 或者介于两者之间的任何一座桥(REP / REQ,XREP / XREQ等)?

Overall, ZeroC provides a much better toolset and ecosystem for enterprise solutions. 总体而言,ZeroC为企业解决方案提供了更好的工具集和生态系统。

And it is open source :) 它是开源的:)

For me.. the correct answer was Crossroads I/O . 对我来说......正确的答案是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. 它完成了我需要的一切......但是在使用protobufs时仍然无法发布/ sub ...我确定ZeroC ICE非常适合分布式IPC,但是0MQ / Crossroads,为您提供了使用线程间通信的额外灵活性。

Note: on windows, 0mq does not have IPC. 注意:在Windows上,0mq没有IPC。

So, all in all, the crossroads fork of 0mq is the best. 总而言之,0mq的十字路口叉是最好的。 but you will have to roll your own windows/ipc (or use tcp::127..) , and publisher side topic filtering features for pub/sub. 但你必须滚动你自己的windows / ipc(或使用tcp :: 127 ..),以及pub / sub的发布者端主题过滤功能。

nanomsg, from the guy who wrote crossroads and 0mq (i think). nanomsg,来自写过十字路口的人和0mq(我想)。

http://nanomsg.org/ http://nanomsg.org/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM