c++ - ZeroC ICE 对比 0MQ/ZeroMQ 对比 Crossroads IO 对比开源 DDS

标签 c++ publish-subscribe zeromq ice 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 库是否有任何数据库集成?

最佳答案

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

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

总体而言,如果需要使用 ZeroC Ice,扩展服务器非常容易。

我知道 ZeroMQ 提供了一套很棒的工具和消息传递模式,我会继续将它用于我的宠物项目。但是,我看到的问题是,很容易走极端并失去对所有分布式组件的跟踪。这是分布式环境中必须具备的。当您需要升级时,您如何知道您的客户端/服务器在哪里?如果链下的组件之一没有收到消息,如何确定问题出在哪里?出版商?客户端?还是两者之间的任何一个桥梁(REP/REQ、XREP/XREQ 等)?

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

而且它是开源的:)

关于c++ - ZeroC ICE 对比 0MQ/ZeroMQ 对比 Crossroads IO 对比开源 DDS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12104123/

相关文章:

c++ - 替换 msvc 上的 vsscanf

websocket - 仅针对使用 channel 而定制的 Phoenix 应用程序如何在多台机器上扩展?使用HAProxy?如何向所有节点广播消息?

publish-subscribe - pub.py 中存在无效语法

c# - System.ArgumentNullException 与 NetMQ.Msg.Put()

c++ - 需要 OOP C++ 帮助

c++ - 使用 OpenGL 风扇而不是根据不同的位置创建圆有什么好处?

c++ - 同一个类中的迭代器和 const_iterator 的问题

go - 如何在 gRPC 中从服务器向客户端广播?

c++ - 提升 : Serializing/De-serializing a custom C++ object passed over ZeroMQ pull socket

sockets - 用于 WinRT 网络合理性的 Berkeley Socket 外观?