ZeroC ICE与0MQ/ZeroMQ、Crossroads IO和Open Source DDS的比较

7
ZeroC ICE和0MQ有什么区别?我知道0MQ / Crossroads和DDS非常相似,但无法确定ICE的作用。
我的项目需要快速实现将实时市场数据从C ++转移到C#的系统。下一阶段是实现基于事件的架构,并采用基础的发布/订阅设计。
我愿意使用TCP,但是该系统目前正在单个24核服务器上运行,因此IPC选项会更好。据我所知,ICE仅支持TCP,而DDS和0mq有IPC选项。
目前,我倾向于在ICE或Crossroads IO中使用Protobuf。从OpenSplice DDS网站上被打击了。我对各种选项进行了大量研究,最初考虑使用OpenMPI + boost:mpi,但是.NET没有MPI。
我的问题是:
ZeroC ICE和0MQ有什么区别?我无法理解这一点。在网上找不到任何比较两者的东西。
关于我的项目:
当前在Windows上使用CMAKE C ++,但计划在某个时间点转移到CentOS。另一个期望的功能是将tic数据和所有消息存储在“NoSql”数据库中,如Hbase / Hadoop或HDF5。这些中间件/消息传递/发布-订阅库中是否有任何数据库集成?

在MQ库中持久性并不罕见,但在消息层中进行数据库集成听起来很别扭。不用担心,相反地,要拥抱分布式。订阅您的tick数据发布者并将输入存储到数据库中,可以创建一个漂亮的、自包含的应用程序。 - eevar
可以这样想:如果下游应用程序崩溃并重新启动,会话中的所有消息都需要重新发送。因此,可以将其视为一个长时间的“消息事务”,如果未完全完成,则需要重新发送。因此,有一些逻辑方法可以表明消息层应在应用程序启动时重新发送所有“丢失”的消息。但我同意你的观点。 - jaybny
4个回答

8
关于ZeroC的一些想法: 非常快速;能够具有多个端点;能够在端点上进行负载均衡;如果其中一个节点宕机,能够重新连接到不同的端点。这对最终用户来说是透明的;具有良好的工具链(IceGrid,IceStorm,IceBox等);分布式,高可用性,多故障转移等。
此外,我使用它进行热代码模块交换(类似于Erlang),方法是让客户端创建具有多个端点的代理,然后逐个关闭每个端点以进行快速升级。借助对不同端点的透明重试,我可以在整个升级过程中保持系统运行状态。不确定这是否是广告特性还是未经宣传的副作用 :)
总的来说,使用ZeroC Ice非常容易扩展您的服务器。
我知道ZeroMQ提供了一套神奇的工具和消息模式,我会继续在我的个人项目中使用它。但是,我看到的问题是很容易过度使用并失去跟踪所有分布式组件。这在分布式环境中是必须的。当您需要升级时,您将如何知道客户端/服务器在哪里?如果链中的任何一个组件未收到消息,如何确定问题所在?发布者?客户端?还是中间的任何一个桥接器(REP/REQ,XREP/XREQ等)?
总的来说,ZeroC为企业解决方案提供了更好的工具集和生态系统。
而且它是开源的 :)

7

Jaybny,

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

ZeroC Ice: Ice是一个非常像CORBA的RPC框架。

例如: Socket/ZMQ - 你通过电线发送消息,在另一端读取它,解析消息,执行一些操作等。 ZeroC Ice - 在客户端和服务器之间创建合同。合同只是一个类的模板。现在客户端调用该类的代理方法,服务器实现/执行它并返回值。因此,int result = mathClass.Add(10,20) 是客户端调用的内容。该方法、参数等被编组并发送到服务器,服务器实现Add方法并返回结果,客户端获得30作为结果。因此,在客户端上,API只是运行在远程主机上的仆人的代理。

结论: ZeroC ICE具有某些很好的企业特性。但是,对于你的项目需求,ZMQ是正确的工具。

希望这可以帮到你。


就原始性能而言,ZeroC ICE非常快。对于大多数情况来说,这应该足够了。但是,如果您的需求是亚毫秒、低延迟等,则ZMQ是更好的选择。 - Ravindra Josyula
我不会说ZeroC Ice与CORBA非常相似,详情请见http://www.zeroc.com/iceVsCorba.html。 - Contango

1

1

对我来说,正确的答案是Crossroads I/O。它可以满足我所有的需求,但在使用protobufs时仍无法进行发布/订阅...我相信ZeroC ICE非常适合分布式IPC,但0MQ/Crossroads还可以提供额外的灵活性,以便使用线程间通信。

注意:在Windows上,0mq没有IPC。

总的来说,0mq的crossroads分支是最好的选择。但您将不得不自己编写Windows / IPC(或使用tcp :: 127..),并为发布者端提供主题过滤功能以进行发布/订阅。


谢谢分享!你说Crossroads(与ZMQ相比)是最好的分支,你看到了具体的区别(稳定性/功能等)还是这个结论更多地基于可用的社区/支持?我目前正在研究类似的解决方案。 - Jakob Möllås
1
看起来Crossroads I/O在7月左右停止了开发,这是基于创建者已经放弃它去做一个新项目的评论以及主要存储库中提交的停止。 - Kitsune
Crossroads I/O非常干净且没有漏洞。它提供了基本的消息传递功能,没有任何多余的东西。我正在生产中使用它,并计划在未来进行贡献。将Crossroads视为极简0MQ。 - jaybny
1
nanomsg是新的十字路口。 - jaybny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接