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库中的任何一个都有任何数据库集成吗?
答案 0 :(得分:7)
Jaybny,
ZMQ: 如果您想要真正的良好性能,并且您的工作的第1阶段的唯一工作是将数据从C ++移动到C#,那么Zmq是最佳选择。 拥有事件驱动架构的发布/订阅模型也是Zmq可以通过其内置消息模式帮助您的东西。 在这种情况下,Zmq还支持您的IPC要求。例如:您可以通过多线程并通过IPC进行通信,从而使应用程序的一个实例消耗24个内核。
ZeroC Ice: Ice是一个非常类似于CORBA的RPC框架。
EG。 套接字/ ZMQ - 您通过线路发送消息。在另一端阅读它,解析消息,做一些动作等。 ZeroC Ice - 在客户端和服务器之间创建合同。合同只不过是一个班级的模板。现在客户端调用该类的代理方法,服务器实现/操作它并返回该值。因此,int result = mathClass.Add(10,20)是客户端调用的。方法,参数等被编组并发送到服务器,服务器实现Add方法,返回结果,客户端得到30作为结果。因此,在客户端,api只不过是在远程主机上运行的服务员的代理。
结论: ZeroC ICE有一些很好的创业功能,非常好。但是,对于您的项目要求,ZMQ是正确的工具。
希望这有帮助。
答案 1 :(得分:7)
关于ZeroC的一些想法: 非常快;能够有多个端点;能够在端点上进行负载平衡;如果其中一个节点出现故障,则可以重新连接到其他端点。这对最终用户是透明的;有良好的工具链(IceGrid,IceStorm,IceBox等);分布式,高可用性,多故障转移等
除此之外,我已经将它用于热交换代码模块(类似于Erlang),让客户端创建具有多个端点的代理,然后逐个关闭每个端点以进行快速升级。通过透明重试到不同的端点,我可以在整个系统启动和运行时进行升级。不确定这是广告功能还是未公布的副作用:)
总的来说,如果需要使用ZeroC Ice,很容易扩展您的服务器。
我知道ZeroMQ提供了一套很棒的工具和消息模式,我会继续将它用于我的宠物项目。但是,我看到的问题是,很容易过度使用并且无法跟踪所有分布式组件。这是分布式环境中必须具备的功能。当您需要升级时,您如何知道客户端/服务器的位置?如果链中的某个组件没有收到消息,那么如何识别问题所在?出版商?客户端?或其中任何一个桥(REP / REQ,XREP / XREQ等)?
总体而言,ZeroC为企业解决方案提供了更好的工具集和生态系统。
它是开源的:)
答案 2 :(得分:1)
对我来说......正确答案是Crossroads I / O.它完成了我需要的一切......但是在使用protobufs时仍然无法发布/ sub ...我确定ZeroC ICE非常适合分布式IPC,但是0MQ / Crossroads,为您提供了使用线程间通信的额外灵活性。
注意:在Windows上,0mq没有IPC。
所以,总而言之,0mq的十字路口叉是最好的。但你必须滚动你自己的windows / ipc(或使用tcp :: 127 ..),以及pub / sub的发布者端主题过滤功能。
答案 3 :(得分:1)
nanomsg,来自写过十字路口的人和0mq(我认为)。