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

jay*_*bny 6 c++ ice publish-subscribe zeromq data-distribution-service

ZeroC ICE与0MQ相比如何?我知道0MQ/Crossroads和DDS非常相似,但似乎无法弄清楚ICE的位置.

我需要快速实现一个系统,将实时市场数据从C++卸载到C#,作为我项目的第一阶段.下一阶段将实现具有基础Pub/Sub设计的基于事件的架构.

我愿意使用TCP ..但系统当前正在一台24核服务器上运行..因此IPC选项会很好.根据我的理解,ICE只是TCP,而DDS和0mq有IPC选项.

目前,我倾向于使用Protobuf与ICE或Crossroads IO.已从OpenSplice DDS网站关闭.我已经对各种选项进行了大量研究,最初考虑的是OpenMPI + boost:mpi,但似乎没有针对.NET的MPI.

我的问题是:

ICE与0MQ相比如何?我无法绕过这个.无法在网上找到任何比较两者的东西.

提前致谢.

........关于我的项目的更多信息:

目前在Windows上使用CMAKE C++,但计划在某个时候转移到CentOS.另一个所需的特性是将tic数据和所有消息存储在"NoSql"数据库中,例如Hbase/Hadoop或HDF5.这些中间件/消息/ pub-sub库中的任何一个都有任何数据库集成吗?

小智 7

Jaybny,

ZMQ:如果你想要真正的良好性能,而你工作的第一阶段唯一的工作就是将数据从C++移动到C#,那么Zmq是最好的选择.拥有事件驱动架构的发布/订阅模型也是Zmq可以帮助您的内置消息模式.在这种情况下,Zmq还支持您的IPC要求.例如:您可以拥有一个应用程序实例,通过多线程和IPC通信来消耗24个内核.

ZeroC Ice:Ice是一个非常类似于CORBA的RPC框架.

例如.套接字/ ZMQ - 您通过线路发送消息.在另一端阅读它,解析消息,做一些操作等.ZeroC Ice - 在客户端和服务器之间创建一个契约.合同只不过是一个班级的模板.现在客户端调用该类的代理方法,服务器实现/操作它并返回该值.因此,int result = mathClass.Add(10,20)是客户端调用的.方法,参数等被编组并发送到服务器,服务器实现Add方法,返回结果,客户端得到30作为结果.因此,在客户端,api只是在远程主机上运行的服务方的代理.

结论:ZeroC ICE有一些很好的创业功能,非常好.但是,对于您的项目要求,ZMQ是正确的工具.

希望这可以帮助.


小智 7

关于ZeroC的一些想法:非常快; 能够有多个端点; 能够在端点上进行负载平衡; 如果其中一个节点出现故障,则可以重新连接到其他端点.这对最终用户是透明的; 有良好的工具链(IceGrid,IceStorm,IceBox等); 分布式,高可用性,多故障转移等

除此之外,我已经将它用于热交换代码模块(类似于Erlang),让客户端创建具有多个端点的代理,然后逐个关闭每个端点以进行快速升级.通过透明重试到不同的端点,我可以在整个系统启动和运行时进行升级.不确定这是广告功能还是未公布的副作用:)

总的来说,如果需要使用ZeroC Ice,很容易扩展您的服务器.

我知道ZeroMQ提供了一套很棒的工具和消息模式,我会继续将它用于我的宠物项目.但是,我看到的问题是,很容易过度使用并且无法跟踪所有分布式组件.这是分布式环境中必须具备的功能.当您需要升级时,您如何知道客户端/服务器的位置?如果链中的某个组件没有收到消息,那么如何识别问题所在?出版商?客户端?或者介于两者之间的任何一座桥(REP/REQ,XREP/XREQ等)?

总体而言,ZeroC为企业解决方案提供了更好的工具集和生态系统.

它是开源的:)