fastdds学习之3——库概览

Fast DDS(前身为Fast RTPS)是DDS规范的高效高性能实现,DDS规范是一种用于分布式应用软件的以数据为中心的通信中间件(DCPS)。本节回顾Fast DDS的体系结构、操作和关键特性。

1、架构

Fast DDS的架构如下图所示,其中可以看到具有以下不同环境的层模型。

  • Application Layer:使用Fast DDS API在分布式系统中实现通信的用户应用程序。
  • Fast DDS Layer:DDS通信中间件的稳健实现。它允许部署一个或多个DDS域,在这些域中,同一域中的域参与者通过在域主题下发布/订阅来交换消息。
  • RTPS Layer:实时发布订阅(RTPS)协议的实现,以实现与DDS应用程序的互操作性。该层充当传输层的抽象层。
  • Transport Layer:fastDDS可用于各种传输协议,udp、tcp和SHM等。

image

1.1 DDS层

在DDS层中定义了通信的几个关键元素。用户将在其应用程序中创建这些元素,从而合并DDS应用程序元素并创建以数据为中心的通信系统。Fast DDS遵循DDS规范,将通信中涉及的这些元素定义为实体。DDS实体是支持服务质量配置(QoS)并实现侦听器的任何对象。

  • QoS:定义每个实体行为的机制。

  • Listener:向实体通知应用程序执行期间可能发生的事件的机制。

下面列出了DDS实体及其描述和功能。有关每个实体、其QoS及其侦听器的更详细说明,请参阅DDS层部分。

Domain:标识DDS域的正整数。每个DomainParticipant都将分配一个DDS域,以便同一域中的DomainParticipants可以进行通信,并隔离DDS域之间的通信。此值必须由应用程序开发人员在创建DomainParticipant时提供。

  • DomainParticipant:包含其他DDS实体(如发布者、订阅者、主题和多主题)的对象。它可以创建包含在自己中的实体以及实体的配置。

  • Publisher:发布服务器使用DataWriter发布主题下的数据,DataWriter将数据写入传输。它是创建和配置其包含的DataWriter实体的实体,并且可能包含一个或多个DataWriter实体。

  • DataWriter:它是负责发布消息的实体。用户在创建此实体时必须提供一个主题,该主题将是发布数据的主题。发布是通过将数据对象作为更改写入DataWriterHistory来完成的。

  • DataWriterHistory:这是对数据对象的更改列表。当DataWriter继续发布特定主题下的数据时,它实际上会对该数据进行更改。历史记录中记录的正是这一更改。然后将这些更改发送到订阅该特定主题的DataReader。

  • Subscriber:订阅服务器使用DataReader订阅主题,DataReader从传输中读取数据。它是创建和配置其包含的DataReader实体的实体,可以包含一个或多个DataReader实体。

  • DataReader:它是订阅出版物接收主题的实体。创建此实体时,用户必须提供订阅主题。DataReader接收消息作为其HistoryDataReader中的更改。

  • DataReaderHistory:它包含DataReader由于订阅某个主题而接收的数据对象中的更改。

  • Topic:将发布服务器的DataWriter与订阅服务器的DataReader绑定的实体。

1.2 RTPS层

如上所述,Fast DDS中的RTPS协议允许从传输层抽象DDS应用实体。根据上面显示的图表,RTPS层有四个主要实体。

  • RTPSDomain:它是RTPS协议对DDS域的扩展。

  • RTPSParticipant:包含其他RTPS实体的实体。它允许配置和创建包含的实体。

  • RTPSWriter:消息的来源。它读取写入DataWriterHistory中的更改,并将其传输到先前匹配的所有RTPSReader。

  • RTPSReader:消息的接收实体。它将RTPSWriter报告的更改写入DataReaderHistory。

有关每个实体、其属性和侦听器的更详细说明,请参阅RTPS层部分。

1.3 Transport层

Fast DDS支持通过各种传输协议实现应用程序。这些是UDPv4、UDPv6、TCPv4、TCPv6和共享内存传输(SHM)。默认情况下,DomainParticipant实现UDPv4和SHM传输协议。传输层部分详细介绍了所有支持的传输协议的配置。

2、 编程和执行模型

Fast DDS是并发的和基于事件的。以下说明了控制Fast DDS操作的多线程模型以及可能的事件。

2.1 并发和多线程

Fast DDS实现了一个并发多线程系统。每个DomainParticipant都产生一组线程来处理后台任务,如日志记录、消息接收和异步通信。这不会影响您使用库的方式,即Fast DDS API是线程安全的,因此您可以从不同的线程调用同一DomainParticipant上的任何方法。但是,当外部函数访问由库内部运行的线程修改的资源时,必须考虑此多线程实现。这方面的一个例子是实体侦听器回调中修改的资源。以下是Fast DDS多线程调度工作原理的简要概述:

  • Main thread: 有应用程序管理。

  • Event thread: 每个DomainParticipant都拥有其中一个。它处理周期性和触发的时间事件。

  • Asynchronous writer thread: 此线程管理所有DomainParticipant的异步写入。即使对于同步写入程序,某些形式的通信也必须在后台启动。

  • Reception threads: DomainParticipes为每个接收信道生成一个线程,其中信道的概念取决于传输层(例如UDP端口)。

2.2 事件驱动架构(存疑)

Fast DDS的事件驱动原理是基于回调函数的。当某个事件(如数据到达)发生时,系统会触发相应的回调函数来执行相应的处理逻辑。Fast DDS依赖于Boost ASIO库来实现事件驱动,采用异步I/O机制,使得Fast DDS能够高效地进行数据传输和交换。

3、功能

快速DDS具有一些附加功能,用户可以在其应用程序中实现和配置这些功能。这些概述如下。

3.1 发现协议

发现协议定义了在给定主题下发布的DataWriter和订阅同一主题的DataReader相匹配的机制,以便它们可以开始共享数据。这适用于通信过程中的任何一点。Fast DDS提供以下发现机制:

  • Simple Discovery:这是默认的发现机制,在RTPS标准中定义,并提供与其他DDS实现的兼容性。在这里,DomainParticipant在早期阶段被单独发现,以随后匹配它们实现的DataWriter和DataReader。

  • Discovery Server:该发现机制使用集中式发现架构,其中服务器充当元流量发现的中心,可以跟踪可用的节点(包括其ID和IP地址等信息),并允许注册新节点到网络中,当新节点加入Fast DDS网络时,发现服务器会立即检测到,并通知其他已注册的节点。。

  • Static Discovery:这实现了对彼此的DomainParticipant的发现,但如果远程DomainParticipants事先知道每个DomainParticipate(DataReader/DataWriter)中包含的实体,则可以跳过对这些实体的发现。

  • Manual Discovery:该机制仅与RTPS层兼容。它允许用户使用其选择的任何外部元信息通道手动匹配和取消匹配RTPSParticipant、RTPSWriter和RTPSReader,需要用户访问DomainParticipant实现的RTPSParticipant,并直接匹配RTPS实体。用户需要在相应的回调函数中实现手动发现机制。

fastDDS中实现的所有发现协议的详细说明和配置可以在发现部分中看到。

3.2 安全

快速DDS可配置为通过在三个级别实现可插拔安全性来提供安全通信:

  • Authentication of remote DomainParticipants:DDS:Auth:PKI-DH插件使用可信证书颁发机构(CA)和ECDSA数字签名算法提供认证,以执行相互认证。它还使用椭圆曲线Diffie-Hellman(ECDH)密钥协议建立共享密钥。

  • Access control of entities:DDS:Access:Permissions插件在DDS域和主题级别为域参与者提供访问控制。

  • Encryption of data:DDS:Crypto:AES-GCM-GMAC插件在伽罗瓦计数器模式(AES-GCM)中使用高级加密标准(AES)提供认证加密。

有关Fast DDS中安全配置的更多信息,请参阅安全部分。

3.3 日志

Fast DDS提供了一个可扩展的日志记录系统。日志类是日志系统的入口点。它公开了三个宏定义以便于使用:EPROSIMA_LOG_INFO、EPROSIMA-LOG_WARNING和EPROSIMA.LOG_ERROR。此外,除了已经可用的类别(INFO_MSG、WARN_MSG和ERROR_MSG)之外,它还允许定义新的类别。它使用正则表达式按类别进行过滤,并控制日志系统的详细程度。有关可能的日志记录系统配置的详细信息,请参阅日志记录部分。

3.4 Xml配置

Fast DDS提供了使用XML配置文件更改默认设置。因此,无需用户实现任何程序源代码或重新构建现有应用程序,可以改变DDS实体的行为。

用户具有每个API功能的XML标记。因此,可以通过标记或分别带有<data_writer>和<data_reader>标记的DataWriter和DataReader配置文件来构建和配置DomainParticipant。

为了更好地理解如何编写和使用这些XML概要文件配置文件,您可以继续阅读XML概要文件部分。

3.5 环境变量

环境变量是指通过操作系统功能在程序范围之外定义的变量。Fast DDS依赖于环境变量,因此用户可以轻松自定义DDS应用程序的默认设置。有关影响Fast DDS的环境变量的完整列表和说明,请参阅环境变量部分。

转载自:https://www.cnblogs.com/zhangzl419/p/17158601.html

posted @   星星星星yu  阅读(1489)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示