为什么/什么时候使用DDS而不是ZeroMQ?[英] WHY / WHEN using rather DDS instead of ZeroMQ?

本文是小编为大家收集整理的关于为什么/什么时候使用DDS而不是ZeroMQ?的处理方法,想解了为什么/什么时候使用DDS而不是ZeroMQ?的问题怎么解决?为什么/什么时候使用DDS而不是ZeroMQ?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我阅读了以下内容:

  1. DDS vs AMQP vs ZeroMQ
  2. http://mnb.ociweb.com/mnb/MiddlewareNewsBrief-201004.html

而且使用 DDS 代替 zmq 似乎没有任何好处:

  1. zmq 的延迟更好.
  2. 在我看来,ZMQ 的 API 简洁明了.
  3. 我无法使用 ZMQ 在线程/进程/站之间传输数据.

所以:

  1. 什么时候最好使用 DDS?
  2. 与 ZMQ 相比,DDS 有任何更好的性能吗?
  3. 是否有明确的目的使用 DDS(而不是 ZMQ)?

谢谢

推荐答案

在我作为 DDS 实施者/供应商的(诚然有偏见的)经验中,许多应用程序发现使用 DDS 优于中间件技术(包括 ZeroMQ)的显着优势.事实上,我看到使用 DDS 的"关键应用程序"比 ZeroMQ 多得多……

首先澄清几点:

(1) DDS 和它在下面使用的 RTPS 协议是标准,而不是特定产品.这些标准有很多实现.据我所知,至少有 9 家不同的公司拥有实施这些标准的独立产品和代码库.谈DDS vs 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 是一个"由其贡献者控制的松散结构"

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

ZeroMQ IPR 不太清楚 IMO.在他们的网页(http://zeromq.org/docs:features)上,他们声明"ZeroMQ 的 libzmq 核心归其贡献者所有"和"ZeroMQ 组织是一个松散的联盟,没有明确的权力结构,主要存在于 GitHub 上.组织 wiki 页面解释了任何人都可以通过引入一些有趣的工作来加入所有者团队."

这种"松散的结构"对于关心知识产权血统、保修和赔偿等内容的用户来说可能会更成问题.

与此有关.如果我理解正确,那么只有一个核心 ZeroMQ 实现(github 中的那个),并且只有支持它的公司(iMatix).从那里开始,似乎只有 4 个提交者在核心 (libzmq) 中完成大部分开发工作.如果要收购 iMatix 或决定改变其商业模式,或者主要提交者失去兴趣,那么用户除了自己支持代码库之外几乎没有其他办法.

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

1.2 特点与抽象层

DDS 和 ZeroMQ 都支持发布-订阅和请求-回复等模式(这是 DDS 的新增功能,即所谓的 DDS-RPC).但一般来说DDS的抽象层更高.意味着中间件为应用程序做更多的"自动".具体来说.

DDS 提供自动发现

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

ZeroMQ 级别较低.您必须指定端口、IP 地址等.

DDS 发布-订阅是以数据为中心的.

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

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

DDS 为"应用"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 Inc 的"OpenDDS"实现的.据我所知,这并不是最快的 DDS 实现之一.我建议您看看其他一些,例如 RTI Connext DDS(我们的实现)、PrimsTech 的 OpenSplice DDS 或 TwinOaks 的 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.

也就是说,人们很少选择能够提供"最佳性能"的中间件.否则没有人会使用 Web 服务或 HTTP.选择基于许多因素,性能只需要满足应用程序的需求即可.稳健性、可扩展性、支持、风险、可维护性、编程模型对领域的适用性、总拥有成本等通常对决策更重要.

3.使用 DDS(而不是 ZMQ)有明确的目的吗?

嗯,是的...在许多应用程序中,它在性能、可扩展性、功能、应用程序简单性、稳健性、风险降低和总拥有成本方面提供了最佳权衡.在过去的几年里,成千上万的项目得出了这个结论:)

杰拉尔多

本文地址:https://www.itbaoku.cn/post/1794055.html