【DDS】DDS与OpenDDS

本文深入探讨了DDS(Data Distribution Service)及其开源实现OpenDDS的基本概念、体系结构与通信机制。详细介绍了DDS作为分布式环境下高效数据分发服务的核心原理,包括订阅/发布模型、RTPS协议、OMG规范及全局数据空间概念。同时,阐述了OpenDDS作为DDS规范的实现,其框架组成、传输协议选择及节点发现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DDS与openDDS

DDS

  • 什么是DDS?
    Data Distribution Service(DDS),根据字面理解就是数据分发服务。这套服务,在分布式应用环境下,可以高效率地分发参与者(应用)间的数据信息。
  • 订阅/发布体系结构
    考虑到应用实现,肯定要定一套体系结构。DDS采用订阅/发布体系结构,以数据为中心,也就是通过订阅/发布这个结构来实现消息(数据)的交换。
  • P/S与RTPS
    上面说的订阅/发布,从通信角度考虑。其实,就是P/S通信模式。P(Publish)是发布者,S(Subscribe)是订阅者,订阅者订阅发布者提供的某些服务后,P与S间就存在了通信关系。P发布了相应的消息后,订阅者便可以收到这些消息(数据)。
    RTPS又是什么?
    RTPS指Real Time Publish/Subscribe,它继承自P/S模型。简单来说,相比P/S,RTPS多出了QoS属性(Quality of Service)、将发布/订阅模块化等等优点。
    因此,OMG将RTPS标准化为:DDS的实施互操作协议。
  • OMG
    一个组织,全名为Object Management Group。DDS就是OMG这个组织规定的规范。
  • 全局数据空间
    DDS以数据为中心,也就是基于数据去考虑如何分发消息。因此在DDS中存在全局数据空间的概念。这个全局数据空间是虚拟(逻辑)上的,所有数据都在这个空间中,每个分布式结点可以向这个空间写数据,也可以从这个空间读数据。
    这个空间可以总结为三点:All Data、Read and Write、Cache。
    全局数据空间
DCPS

OMG将RPTS重定义为DCPS,DDS采用DCPS通信机制。DCPS主要组成有:

  • Domain : 域。参与者只有在同一个域内,才可以通信。不同域间,不可通信。
  • DomainParticipant: 域参与者。一个域的入口点。
  • Topic:主题。只有使用相同主题(主题名)的P和S,才能够通信。
  • DataWriter:数据写入者,负责向Publisher写入消息。
  • Publisher:发布者,负责发布DataWriter写入的消息。
  • Subscriber:订阅者,负责接收已订阅的消息。
  • DataReader数据读取写,负责处理从Subscriber接收的消息。
    DCPS
DLRL与DCPS

DDS规范定义了两类Interfaces结构

  1. DCPS:DDS核心,数据分布基础架构。
    DCPS

  2. DLRL(A Data Local Reconstruction Layer):更高的抽象接口层,隐藏细节实现。其实,Data Local Reconstruction可以理解为将App与DDS直接的数据,根据应用环境重构为需要的格式。
    DLRL

OpenDDS

  • 根据OpenDDS(目前最新版本是3.14)官网开发者手册中的介绍

OpenDDS is an open source implementation of the OMG Data Distribution Service (DDS) for
Real-Time Systems Specification v1.4 (OMG Document formal/2015-04-10) and the Realtime Publish-Subscribe Wire Protocol DDS Interoperability Wire Protocol Specification
(DDSI-RTPS) v2.3 (OMG Document formal/2019-04-03). OpenDDS also implements the
DDS Security Specification v1.1 (OMG Document formal/2018-04-01).

  • 因此OpenDDS,是DDS规范的实现。当然还有其他一些DDS规范的实现。例如:RTI DDS、OpenSplice DDS。
  • OpenDDS框架:下图为OpenDDS官网给出的Framework图。可以看出,主要部分为Topic、Transport、Discovery。也就是,数据如何定义?如何传输信息?如何发现两端(P/S)?
    OpenDDS架构
  • OpenDDS Topic:根据IDL,定义Topic结构,利用OpenDDS提供的工具,根据IDL文件自动生成主题文件。例:https://github.com/adver1991/DDS-Example/blob/master/Messenger.idl
  • OpenDDS Transport: OpenDDS提供了多种传输协议,TCP、UDP、Multicast、Shared-Memory、RTPS_UDP。使用者可以通过配置文件,指定使用的传输协议。
OpenDDS Discovery

DDS应用在分布式环境中,订阅者和发布者两端,如何发现对方?OpenDDS提供了两种节点寻找方式:

  1. DCPSInfoRepo(默认):一个集中式的仓库,相当于发现中心,它需要运行在独立的进程中(例:P端一个进程,S端一个进程,还需要一个进程运行InfoRepo)。
    DCPSInfoRepo

  2. RTPS:使用RTPS协议,点对点,不需要额外的进程运行其他服务。
    RTPS

使用OpenDDS
  • 平台(Ubuntu 16.4)
  • 下载解压安装报,根据官网提示操作即可。
  • https://opendds.org/quickstart/GettingStartedLinux.html
  • 例子(参考自OpenDDS官网开发手册2.1.3节),使用RTPS发现方式,使用rtps_udp传输协议。这里只给出代码,代码中具体的含义请参考OpenDDS开发者手册。代码见:
    https://github.com/adver1991/DDS-Example
  • 关于例子的简单说明:例子中,包括订阅者、发布者、数据写入者、数据读取者(包含Listener)、Topic(IDL定义)部分。根据IDL文件,使用OpenDDS提供的工具,生成Topic相关的代码。订阅者与发布者,在同一个域内,使用相同的主题(主题名)实现数据的分发。
参考
DDS系列

【DDS】DDS与OpenDDS
【DDS】DDS-RPC通信机制
【DDS】基于OpenDDS的DDS-RPC实现
【DDS】DDSI-RTPS规范

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值