为什么/何时使用DDS代替ZeroMQ?

时间:2015-01-04 17:44:59

标签: ipc zeromq data-distribution-service

我读了以下内容:

  1. DDS vs AMQP vs ZeroMQ
  2. http://mnb.ociweb.com/mnb/MiddlewareNewsBrief-201004.html
  3. 似乎没有使用DDS代替zmq:

    1. zmq的延迟更好。
    2. 在我看来,ZMQ的API清晰而简单。
    3. 我无法使用ZMQ在线程/进程/站之间传输数据。
    4. 所以:

      1. 何时最好使用DDS?
      2. 与ZMQ相比,是否有更好的性能
      3. 使用DDS(而不是ZMQ)是否明确目的
      4. 由于

1 个答案:

答案 0 :(得分:47)

在我作为DDS实施者/供应商的经验中,许多应用程序发现使用DDS而非中间件技术(包括ZeroMQ)的显着优势。事实上,我看到了更多关键应用程序"使用DDS而不是ZeroMQ ...

首先澄清一下:

(1)DDS及其下面使用的RTPS协议是标准,而不是特定产品。这些标准有很多实现。据我所知,至少有9家不同的公司拥有实施这些标准的独立产品和代码库。谈论"表现"没有意义。对于DDS与ZeroMQ,您只能谈论特定实现的性能。我将在稍后讨论性能问题但仅从这个角度来看你的陈述" zmq的延迟更好"显然是错的。当然,相反的说法也是错误的。

(2)我在您提供的第一次参考资料中找不到太多客观信息。主要观点是,DDS似乎最适合该应用程序,并且人们担心它的使用范围有多广,AC的回复澄清了这一点。但这些论点似乎有点主观。根据某人对特定产品代码库的主观检查,对AC的帖子做出了否定回复。即使假设发布负面评论的人有一个有效的观点,评论也只适用于一个特定的DDS实施/产品,而不是一般的DDS。就个人而言,我不会对这一评论给予太多的信任,它的语气似乎过于敌对,不能仅基于陈述的事实。

(3)关于API的清晰度/简单性。您的评论是基于您在第二个参考中提供的基准示例吗?此代码未使用标准DDS API。我不确定为什么OCI(写那篇文章的公司)这样做 - 也许他们改编了其他一些先前的代码。

查看符合DDS规范的API示例的好地方是:

无论如何,正如我后面提到的,DDS和ZeroMQ提供的抽象层是完全不同的,因此API不能直接比较......

回答您的具体问题。

<强> 1。什么时候使用DDS更好?

很难对这个问题提供简短/客观的答案。我相信ZeroMQ是一个很好的产品,很多人都很开心。关于DDS也是如此。

我认为最好的办法是指出一些差异,让人们决定什么对他们很重要。

DDS和ZeroMQ在治理,生态系统,功能甚至抽象层方面都有所不同。

一些重要的差异:

1.1治理,标准和生态系统

DDS和RTPS是对象管理组(OMG)的开放国际标准。 ZeroMQ是一个由其贡献者控制的松散结构&#34;

这意味着有开放的治理和明确的OMG流程来控制规范及其演变,以及知识产权规则。

ZeroMQ IPR不太清楚IMO。在他们的网页(http://zeromq.org/docs:features)中,他们声明了#Zero; ZeroMQ的libzmq核心由其贡献者所拥有&#34;和#34; ZeroMQ组织是一个松散的联盟,没有明确的权力结构,大部分都存在于GitHub上。组织维基页面解释了任何人都可以加入所有者&#39;团队只需引入一些有趣的工作。&#34;

这种松散的结构&#34;对于关心知识产权血统,保修和赔偿等事情的用户来说可能会有更多问题。

与此相关。如果我理解正确,只有一个核心ZeroMQ实现(github中的那个),并且只有站在它后面的公司(iMatix)。从那里开始,似乎只有4个提交者在核心(libzmq)中进行大部分开发工作。如果iMatix被收购或决定改变其商业模式,或主要提交者失去兴趣,那么除了支持代码库本身之外,用户几乎没有追索权。

当然,基于代码的共同所有权,有许多成功的项目/技术。另一方面,拥有与独立产品,代码库和商业模式竞争的公司生态系统为该技术的未来提供了良好的保证......这一切都取决于社区和生态系统的规模以及用户的风险厌恶程度。

1.2功能&amp;抽象层

DDS和ZeroMQ都支持发布 - 订阅和Request-Reply等模式(这是DDS的新增功能,即所谓的DDS-RPC)。但总的来说,DDS的抽象层更高。意思是中间件做得更多&#34;自动&#34;为申请。具体地

DDS提供自动发现

在DDS中,您只需发布/订阅主题名称。您永远不必提供IP地址,计算机名称或端口。它全部由内置发现处理。它无需额外服务即可自动完成。这意味着可以重新部署和集成应用程序,而无需重新编译或重新配置。

ZeroMQ是较低级别。您必须指定端口,IP地址等。

DDS pub-sub以数据为中心。

应用程序可以发布到主题,但关联的数据可以表示已更新为多个数据对象,每个数据对象都由键属性标识。例如,当发布飞机位置时,每次更新都可以识别飞机ID&#34;中间件可以分别为每架飞机提供历史记录,强制执行QoS,更新费率等。当新飞机出现或从系统中消失时,中间件会理解并进行通信。

与上述DDS相关的可以保留应用程序的相关数据的缓存,它可以在其认为合适的情况下(通过密钥或内容)查询,例如,阅读飞机的最后5个位置。应用程序会收到更改通知,但不会立即强制使用它们。这也有助于减少应用程序开发人员需要编写的代码量。

DDS为&#34;应用程序提供更多支持&#34;的QoS

DDS支持超过22种消息和数据传递QoS策略,例如可靠性,端点活跃性,消息持久性和向后加入者的传递,消息过期,故障转移,定期更新监视,基于时间的过滤,排序等。这些都是通过简单的QoS策略设置配置的。该应用程序使用相同的读/写API,所有额外的工作都在下面完成。

ZeroMQ通过提供构建块和模式来解决这个问题。它非常灵活,但应用程序必须编程,组装和编排不同的模式以获得更高级别的行为。例如,要获得可靠的pub-sub,需要组合多个模式,如http://zguide.zeromq.org/page:all#toc119中所述。

DDS支持其他功能,如内容过滤,时间过滤,分区,域名......

这些在ZeroMQ中不可用。它们必须在应用层构建。

DDS提供类型系统并支持类型可扩展性和可变性

您必须将ZeroMQ与google协议缓冲区等其他软件包结合使用才能获得类似的功能。

安全

DDS-Security规范提供细粒度(主题级)安全性,包括身份验证,加密,签名,密钥分发,安全多播等。

<强> 2。与ZMQ相比,DDS有更好的表现吗?

请注意,您参考的基准是针对Object Computing公司的&#34; OpenDDS&#34;实现。据我所知,这不是最快的DDS实现之一。我建议你看一下其他一些产品,如RTI Connext DDS(我们的实施),PrimsTech的OpenSplice DDS,或TwinOaks&#39; CoreDX DDS。当然,结果对于所使用的实际测试,网络和计算机是高度可靠的,但使用C ++的更快DDS实现的典型延迟性能大约为50微秒,而不是180微秒。见https://www.rti.com/products/dds/benchmarks.html#CPPLATENCY

像DDS或ZeroMQ这样的中间件层运行在诸如UDP或TCP之类的东西之上,所以我希望它们受到底层网络可以做什么的限制,对于简单的情况它们可能没有太大的区别,它们当然会比原始运输更糟糕。

差异也来自他们提供的服务。所以你应该比较你可以获得相同服务水平的东西,例如可靠地发布到扩展到许多消费者,优先处理信息,通过UDP发送多个流和大数据(以避免TCP的线头阻塞) )等等。

根据您参考的OpenDDS研究以及不同DDS实施的相对性能(http://www.dre.vanderbilt.edu/DDS/)我希望在一个苹果对苹果的测试中,性能更好的DDS实现将匹配或超过ZeroMQ& #39; S

那说人们很少选择能够给他们带来最佳性能的中间件#34;否则,没有人会使用Web服务或HTTP。选择基于许多因素,性能只需要满足应用程序的需求即可。稳健性,可扩展性,支持,风险,可维护性,编程模型对域的适应性,总体拥有成本等通常对决策更为重要。

第3。是否有使用DDS(而不是ZMQ)的明确目的?

嗯,是的......在许多应用程序中,它在性能,可伸缩性,功能,应用程序简单性,健壮性,降低风险和总体拥有成本方面提供了最佳权衡。在过去几年中,有数千个项目得出了这样的结论:)

了Gerardo