其他笔记 - 关于Fast DDS 和rtps的介绍

简述

分布式实时数据分发服务中间件协议Data Distribution Service(DDS)是OMG于2003年发布并于2007年修订的开放标准。该标准定义了用于分布式系统的【发布-订阅】通信中间件的API规范。

使用DDS的分布式应用程序可以发布或订阅信息的“主题”,并使用一组丰富的服务质量参数来设置通信的不同方面(可靠性,持久性,冗余性,寿命,传输设置,资源…) 。

DDS模型:

抽象模型非常容易理解:如是我们要在分布式系统中共享的数据结构的定义,以及引用该信息的名称。例如,我们可以定义一个名为“车辆位置”的主题,其结构可以是x和y的几个浮点数,也可以是车辆ID的整数。

主题存在于DDS称为“全局数据空间”的抽象空间中。实际上,这个抽象概念接近于实际的实现,因为在最常用的DDS实现中,没有中间代理,例如JMS,ZeroC ICE Storm或其他发布/订阅技术。

其他笔记 - 关于Fast DDS 和rtps的介绍_第1张图片
用于创建发布者和订阅者的DDS工厂称为DDS参与者。通常,应用程序创建一个参与者,发布者发布数据,和/或订阅者订阅数据。实际上,DDS定义了第三层,即数据写入器和数据读取器,而这些实体实际上负责从全局数据空间进行写入/读取,但是为了简单起见,在本文中,我们仅讨论发行者和订阅者。

远程DDS参与者的发现是自动的,在默认行为下,每个参与者都会发送多播声明(或将单播消息发送到预定义的对等列表),并且DDS会维护一个远程目标列表。

该模型在几个方面解耦:

  • 空间:作为自动发现,分布式系统独立于网络拓扑。如果用户更改了网络拓扑,则无需在应用程序中进行任何更改。
  • 时间:发布者可以完全异步发布,而无需测试订阅者的存在。如果将服务的持久性质量参数设置为持久性,则DDS会将数据发送给后加入者。
  • 冗余:DDS允许非常轻松地实现冗余。多个发布者可以在同一个主题上发布,共享该主题,或者可以设置DDS将该主题设置为独占,并且该主题的所有者将是“强度”参数最高的发布者。如果所有者失败,那么以下更强大的发布者将成为所有者。故障转移和接管行为都可以实现。对于订户方,任何数量的订户都可以订阅同一主题。
  • 平台和语言:DDS在许多平台(Windows,Linux,Solaris,Aix,Mac
    OS,Integrity,LynxOS,QNX,VxWorks …)和语言(C,C,Java,C#,Ada …)中实现。
    )。您的分布式系统可能非常异构,开发人员不必担心远程节点的平台/语言。
  • 实现:DDS规范集包括一个用于DDS互操作性协议的规范,称为RTPS(实时发布订阅协议)。分布式系统中的不同应用程序可以使用不同的DDS实现,并且它们将互操作。

DDS体系结构:

DDS公开了简单的模块化设计。在最常用的实现中,DDS基础结构只是链接到应用程序的库(静态或动态)。不需要安装任何服务或守护程序。

互操作性协议位于OSI模型中的传输层之上,因此可以在任何基础传输上实现。几种DDS实现公开了可插入的传输机制,并提供了典型的传输选项,例如UDP,TCP和共享内存,并允许添加用户传输。
其他笔记 - 关于Fast DDS 和rtps的介绍_第2张图片

DDS的优势:

发布/订阅模型:简单且分离。它允许您对分布式系统进行更整洁的设计。
性能:与请求/回复模式相比,在发布/订阅模式下,延迟时间较短,吞吐量更高。在请求/答复模型中,请求者应拉远程参与者以获取数据,但在发布/订阅模型中,发布者只要有可用数据,便直接将数据发送给订阅者。 已经计划了API,对象模型和QoS参数以实现实时性能,并且通常会对不同的实现进行真正的优化。
自动发现远程参与者:此机制是DDS的关键功能之一。通信是匿名的并且是分离的,并且开发人员不必担心远程参与者的本地化。
丰富的Qos参数集,允许调整通信的各个方面:可靠性,持久性,冗余,寿命,传输设置,资源…
互操作性协议(RTPS):该协议几乎可以在任何传输上实现,从而允许在UDP,TCP,共享内存和用户传输中使用DDS,并在不同DDS实现之间实现真正的互操作性。
可用的实现:
DDS的商业和开源实现均可用。最著名的是 eProsima Fast DDS (以前称为Fast RTPS),RTI DDS,OpenSplice DDS,CoreDx和OpenDDS。

RTPS简介

什么是RTPS?

RTPS(实时发布订阅协议)是一种协议,用于在单播和多播中的不可靠传输(例如UDP )上实现最大努力和可靠的发布-订阅通信。

OPS (对象管理组)已将RTPS标准化 为数据分发服务(DDS) 实施的互操作性协议,该协议已 广泛用于航空航天和国防领域的实时应用程序。

除了嵌入在不同DDS实现中的RTPS实现之外,还有独立的轻量级RTPS实现,eProsima Fast RTPS 在性能,功能和对最新版本的RTPS标准(RTPS 2.2)的坚持方面均处于领先地位。

RTPS的优势:

RTPS协议的主要功能是:

  • 性能和服务质量(QoS)属性为使用标准IP网络的实时应用程序实现尽力而为,可靠的发布-订阅通信。
  • 容错能力允许创建没有单点故障的网络。
  • 可扩展性允许通过协议的扩展和新服务的增强实现向后兼容性和互操作性。
  • 新应用程序和服务的即插即用连接性允许应用程序随时加入和离开网络而自动进行无需配置的发现。
  • 可配置性允许平衡每个数据传递事务的可靠性和及时性要求。
  • 模块化允许简单的设备实现协议的子集,并且仍然参与发布-订阅网络。
  • 可伸缩性使系统可以扩展到非常大的发布-订阅网络。
  • 防止应用程序编程错误的类型安全性,从而损害发布-订阅网络中远程节点的操作。

RTPS架构:
RTPS有线协议基于四个不同的模块,这些模块控制不同DDS应用程序之间的信息交换。

  • 结构模块 定义了通信端点并将它们映射到自己的DDS同行。
  • 消息模块 定义,可以将消息这些端点交换以及它们是如何构建的。
  • 行为模块 定义了一组法律交互作用以及它们如何影响每个端点。
  • 发现模块 定义内置的端点,允许自动发现一组。

每个模块及其组成部分的简要说明如下:

  • 结构模块
    由于RTPS是旨在实现DDS应用程序的有线协议,因此每个DDS概念或实体自然都映射到RTPS实体。所有RTPS实体都与一个RTPS域相关联,该域表示一个包含一组参与者的单独通信平面。每个RTPS参与者都可以包含两种不同类型的多个本地端点: Writer 和 Readers。这两个端点通过发送RTPS消息在RTPS网络中交换信息。编写器将本地可用的信息发送给读取器,而后者又可以请求或确认数据。

    RTPS端点(写入器 和 读取器)及其相应的DDS实体之间的接口是 HistoryCache。端点之间交换的信息通常存储在CacheChange中。例如,每个写操作都会在Writer History中引入CacheChange。然后,RTPS编写器将RTPS消息发送给所有匹配的阅读器。收到后,RTPS读取器将CacheChange添加到其相应的HistoryCache并通知DDS实体新数据可用。

  • 消息模块
    消息模块定义RTPS编写器和读取器之间原子信息交换的内容。RTPS消息由标题和后面的许多子消息组成。标头将消息标识为RTPS协议的一部分,以及所使用协议的版本和发送消息的供应商。它还标识正在发送消息的参与者。

    每个Submessage由一个Submessage标头和一系列Submessage元素组成。选择此结构是为了使子消息的词汇表和每个子消息的组成得以扩展,同时保持向后兼容性。子消息标题包含标识子消息类型,子消息长度(以字节为单位)和子消息标记的子消息ID。有十二种不同的子消息。有关所有消息,其组成和解释的完整说明,请查阅OMG RTPS规范文档。三个最重要的消息是:

    数据: 此子消息从写入器发送到读取器,其中包含有关更改属于写入器的数据对象的信息。此更改可以是值(正在添加新信息),也可以是生命周期(先前发送的数据不再有效)。

    HEARTBEAT: 此子消息从Writer发送到Reader,以传达Writer目前可用的CacheChanges。

    确认: 此子消息从阅读器发送到编写器,并允许阅读器将其已收到的更改和仍遗漏的更改通知编写器。它可以用来做肯定和否定的确认。

  • 行为模块
    该模块描述了在写方和读方之间可能发生的有效消息交换。它还定义了Writer和Reader的状态更改,具体取决于每个消息。可以在OMG RTPS规范文档中找到全套规则。设置这些规则是为了确保不同实现之间的互操作性。

  • 发现模块
    该模块描述了使参与者能够获取有关域中所有其他参与者和端点的存在和属性的信息的协议。这种信息交换称为超流量。一旦发现远程端点,就可以相应地配置本地端点以建立通信。发现协议分为两层:参与者发现协议(PDP)和端点发现协议(EDP)。PDP规定了参与者如何发现彼此。发现后,参与者使用EDP交换有关其端点的信息。不同的供应商可以实现多种发现协议,但是,为了确保互操作性,所有供应商都必须实现一个PDP和一个EDP。这些发现协议称为“简单”

发现模块的完整描述可以在规范文档中找到。但是,此发现机制的最重要特征是,它允许简单的即插即用连接,而无需用户进行任何配置。

参考

你可能感兴趣的:(ROS,分布式)