OpenDDS学习笔记(2):DDS概述

article/2025/10/4 8:05:08

文章目录

  • 一、DDS体系结构
    • 1.1 DLRL层
    • 1.2 DCPS层
  • 二、DDS通信过程
  • 三、DDS通信特点
  • 四、DDS标准实现
    • 4.1 RTI DDS软件
    • 4.2 OpenSplice DDS软件
    • 4.3 OpenDDS软件


一、DDS体系结构

DDS采用DCPS通信机制,提供一个与平台无关的数据模型。它允许应用程序实时发布拥有的信息,并订阅需要的信息,能较好处理不可靠网络通信中数据自动发现、可靠性和冗余性等问题。该规范分为两层,数据本地重构(Data Local Reconstruction Layer,DLRL)层DCPS层。DCPS层是DDS的核心和基础,提供基本通信服务,DLRL层将DCPS层提供的服务进行抽象,在DLRL层建立与底层服务的映射关系。

1.1 DLRL层

DLRL层建立在下层DCPS基础上,通过DCPS提供的服务,简化编程实现,把服务简单整合到应用层,使用户能直接访问变更的数据,达到与本地语言结构无缝连接。
具体实现机制:将DCPS层提供的服务以类的形式封装,建立每个类与DCPS层相应服务的映射关系,在DLRL层用本地语言结构对类进行操作。简单地说,相当于在DLRL层建立了一个对DCPS层服务的索引表

1.2 DCPS层

DCPS层是DDS规范核心,提供了数据分布的基础架构,确保正确有效地传输信息给适当的接收者。该层建立了一个全局数据空间的概念,发布者和订阅者在全局空间中分别发布和订阅自己需要的数据类型,通过中间件处理后,再进行数据传送,将传统C/S模式转为以数据为中心的服务模式。
DCPS层将用户对资源的需求情况和资源的可用情况都转化为服务质量QoS,QoS包括多种策略形式,每种策略形式通过与一个赋值的名字关联来描述服务的行为。在DDS中,QoS参数贯穿整个DDS通信过程,应用开发者只需要指明想要什么样的QoS并进行设定就能程序化服务器的行为。
DCPS层提供了发布和订阅数据的功能。发布和订阅通过主题关联,通过主题关联发布信息,创建发布者和订阅者实体,并为这些实体设定QoS参数。
DCPS模型分为平台独立模型(Platform Independent Model,PIM)和平台专门模型(Platform Special Model,PSM)。PSM是以PIM为基础的OMG接口定义语言(Interface Definition Language,IDL)平台。

PIM主要组成内容:

  • 数据写入者(DataWriter)
  • 数据读入者(DataReader)
  • 发布者(Publisher)
  • 订阅者(Subscriber)
  • 领域(Domain),领域代表通信范围,只有同一个领域的发布者和订阅者才能交互
  • 数据对象

PIM平台总体框架如下:
PIM平台框架结构

  • 每个发布者都有一个关联的数据写入者,当数据通过数据写入者与发布者通信时,发布者负责发布数据写入者描述的数据类型的数据(根据自己的QoS或根据相应数据写入者的QoS)。当发布者与数据写入者关联时形成一个发布
  • 订阅者负责对发布的数据进行接收并使数据能被接收应用程序(根据订阅者的QoS)使用。订阅者能接受并分发不同类型数据。应用程序必须使用和订阅者关联的数据读入者来访问被接收到的数据。当订阅者与数据读入者关联时形成一个订阅
  • 主题用于联系发布和订阅。发布方在中间件上发布一个主题后,订阅方根据主题查阅发布方发布的信息。中间件服务检查发布方发布的主题是否满足订阅方的要求,并检查其QoS策略是否兼容,如果是就在发布方和订阅方建立连接,进行点对点数据传送;否则就提示异常。

二、DDS通信过程

DDS数据发布动作,包括注册数据类型、生成主题、比较并设置合理的QoS、预分配资源(缓存区等)、根据订阅资源生成消息(包含订阅者地址)、通知侦听(Listener)接口等;还要根据QoS要求,在规定时间发送数据。基于消息中间件的应用程序进行通信过程如图。

发布订阅时序图

  • 首先建立并初始化DCPS信息仓库,包括域的建立、QoS和传输的初始化。然后,发布者/订阅者端建立域工厂(DomainParticipantFactory),由域工厂建立域参与者,各个域靠ID区分,发布者/订阅者域ID必须与DCPS层建立的域ID一致才能通信。
  • 发布者在中间件注册数据类型DataType,然后设置主题QoS便能建立主题。同样订阅者设置QoS也能建立主题。主题建立后,经过中间件服务的检查机制,若符合连接要求,发布者/订阅者便建立连接。
  • 连接建立后发布者设置数据写入者QoS并建立数据写入者发布最新数据,订阅者设置数据读入者QoS并建立数据读入者接收最新数据。
  • 在创建数据读入者之前,激活Listener接口,通过中间件检测侦听网络连接状态,以便实现节点的自动退出和重新接入。

三、DDS通信特点

1. 引入全局数据空间概念,提高通信效率。
DDS在消息通信基础上增加中心数据模型,及全局数据空间,不需要中心服务器连接,通过全局数据空间主题关联,发布方发布主题,订阅方找到需要的主题,发布方通过数据写入者发布数据,订阅方通过数据读入者接收数据。可以实现一对多连接,提高通信效率。

2. 以数据为中心,降低网络延迟。
DDS以数据为中心,一个订阅者可以找到多个相同主题,一个连接失败可以换用另一个,降低网络延迟。同时发布者和订阅者通过主题相连后直接进行点对点数据传送,不需要中间媒介,提高通信效率。

3. 用QoS控制服务行为,增加通信灵活性。
DDS将资源可用情况、提供方对资源的占有程度及请求方对资源的期待程度分别程序化为主题QoS发布者QoS订阅者QoS。QoS参数虚拟了底层和整个通信机制,包括带宽限制、可靠性、等待时间和资源限制等。中间件负责检查发布者QoS和订阅者QoS之间是否兼容,从而建立连接或提示异常。通过QoS控制大大增加通信灵活性,主要表现为:
(1)QoS提供“语句传播”模型,使DDS像分布式共享内存一样,只有在数据改变时才进行更新,提高整体速度。
(2)发布者和订阅者通过主题关联,允许一个订阅者一次性订阅成千上万数据流,中间件根据主题关键字进行分类并分发。
(3)发布者和订阅者根据双方需求改变QoS策略改变传输速率,所以DDS支持不同速率数据传输。
(4)对等待时间和资源进行QoS控制,实现实时通信,当准备通信的双方超过等待时间还没有建立链接就会试图建立其他连接传输数据。

4. 用UDP/IP协议,增大网络吞吐率。
DDS提供高效传输和可靠性传输两种服务。基于实时性考虑,采用UDP/IP协议。不能保证传输可靠性,所以采用多播方式,一个包同时发送到多个网络节点,增大网络吞吐率。

5. 进行动态配置,提高数据传送能力。
DDS在订阅者订阅数据时已经选择好与哪个连接器进行连接,当数据准备就绪,该节点就知道向哪里发送数据。DDS具有高效动态配置能力,可以方便地增加节点,并快速发现新节点及主题。当一个领域被分割,系统也可以很快重新组合成新的领域并开始工作。

不足:
由于不能保证传输的可靠性,所以不适合对可靠性要求非常严格的系统,也不适合请求应答模式。为了让DLRL层与DCPS层之间进行整合,需要对它们之间的映射关系进行复杂描述,此项工作繁琐复杂。另外当参与者没有提供对象索引时,通过DLRL就无法更新相应的数据,但是为了达到面向对象一致性,就需要DCPS层中的每个实例可以唯一识别,失去DCPS层对实例的灵活性。


四、DDS标准实现

4.1 RTI DDS软件

RTI DDS采用单播(默认方式)和多播传输模型,采用第三层网络接口(IP组播和广播)来处理不同通信模型的网络传输。

  • 优点:采用分散体系结构,简化了同一联邦内一组实体的配置策略,提供不同通信通道之间的优先级调度策略。
  • 不足:增加了额外的配置步骤,存在节点失效的问题;用户必须通过额外进程边界进行通信,会增加通信的时延和时延抖动。

4.2 OpenSplice DDS软件

OpenSplice DDS采用多播广播(默认方式)传输模型,采用第三层网络接口(IP组播和广播)来处理不同通信模型的网络传输。

  • 优点:不需要通过专门的配置节点,时延和抖动会减少,不存在节点失效的问题。
  • 不足:指定的配置细节(如:多播地址、端口号、可靠性等)必须在应用层完成,存在潜在的不可移植性问题;该结构存在同一节点上多个应用程序发送的数据缓存困难的问题。

4.3 OpenDDS软件

采用单播(默认方式)和多播传输模型,采用第三层网络接口(IP组播和广播)来处理不同通信模型的网络传输。
采用有中心体系结构,在一个节点上运行守护程序(daemon),存储用于管理主题和连接的控制信息,数据直接从发布者传到订阅者,但控制和初始化(如:数据类型注册、主题创建、QoS值设置、修改及匹配)需要与该服务器通信。

信息分发体系结构

  • 优点:所有控制信息在一个节点上,实现和配置简单,减少工作量。
  • 不足:daemon程序需要一个单独节点运行,可能发生节点失效;存在超负载系统潜在的性能瓶颈问题。


http://chatgpt.dhexx.cn/article/dMtbY6CX.shtml

相关文章

OpenDDS系列(1) —— OpenDDS 简介

1. OpenDDS简要介绍 1.1 简介 1.1.1 DDS是什么1.1.2 DDS通信的基本要素1.1.3 DDS架构的主要优点1.1.4 DDS产品种类1.1.5 OpenDDS 1.2 DDS的应用领域 美国海上战争中心(NSWC)高性能分布式计算系统(HiPer-D) 1.3 结论 1. OpenDDS简要介绍 1.1 简介 1.1.…

IDEA中查找与替换快捷键(项目全局替换、该文件下替换)

该文件下查找(CtrlF) 项目全局查找(CtrlShiftF 或【Edit】——>【Find】——>【Find in Path…】) 注意:本人电脑上的IDEA版本不支持该快捷键(CtrlShiftF),有可能是快捷键冲突…

idea实现快捷批量修改替换

1. 在当前文件内容中替换 idea替换快捷键,批量处理对象 ctrl r: 当前文件内容替换,指的是在当前打开的文件中替换匹配的字符,只操作一个文件。 2. 在路径中替换(可替换不同文件夹中的内容) ctrl shift r: 在路径中替换,指的是…

idea 查找与替换

查找当前文件内容:ctrlF 如上图片 查找全局文件:ctrlshiftF 或double shift(按两下)或ctrlshiftN替换当前文件内容 :ctrlR 如上图片 你想通过编辑器快速的将所有的’29’,变为29,你可以 ctrl…

IDEA全局替换

在做项目时,有时会在整个项目里或指定文件夹下进行全局搜索和替换,这是一个很方便功能。使用方法如下: 一、全局搜索 1、使用快捷键CtrlShiftF打开搜索窗口,或者通过点击Edit–>Find–>Find in path打开搜索窗口&#xff0…

idea 替换

idea 替换功能说明 快捷键: ctrl R界面说明

idea全局查找和替换

原文 https://blog.csdn.net/fanrenxiang/article/details/80168215 全局查找 通过快捷键 CtrlShiftf 快速进入全局查找页面,或者通过 Edit 》Find 》Find In Path 1、你要检索的内容; 2、如何匹配内容,分别表示 区分大小写、单个单词、正则、过滤查找…

JDK更换IDEA如何修改

一、.打开idea设置。 1、点击file里面的settings... 二、取消默认javac编译 2、然后点开 Build, Execution, Deployment找到里面的compiler,再点开Java compiler 取消勾选。点击🆗 如图演示: 三、检查项目jdk配置 3、点击file里面的…

总结idea全局搜索和替换的快捷键

文章目录 1. 文章引言2. 按文本内容查找(替换)3. 按文件名称搜索文件4. 查看类的继承关系5. 查找类(方法)在哪使用6. 搜索任何东西7. 按名字搜索类 1. 文章引言 我们在使用idea做java开发时,通常会执行如下查找: 在页面内查找或替换 全局查找或替换 按…

IDEA代码替换

IDEA代码替换 快捷键 当前文件内容 C t r l R CtrlR CtrlR 全局替换 C t r l S h i f t R CtrlShiftR CtrlShiftR 使用 第一行输入栏:输入被替换内容 第二行输入栏:输入替换内容 详细使用 第一行输入栏后第一个图标:换行 第一行输…

IntelliJ IDEA中怎么全局搜索替换(整个项目)(Eclipse)

IntelliJ IDEA使用教程 (总目录篇) 我们用Eclipse或者IntelliJ IDEA编程,有时候需要将整个项目的某个字符串替换成其他的。 全局搜索我会,我还给调成ctrlg了呢,但是遇到要全局(整个项目)替换字符串。哎哟&#xff0c…

idea利用正则表达式快速替换

idea利用正则表达式快速替换 需求&#xff1a;要将link标签中的href属性替换成用thymeleaf表达的形式&#xff0c;让其资源寻址是从从项目名开始寻找的 如将<link rel"stylesheet" href"assets/css/bootstrap.min.css"> 换成<link rel"styl…

intellij idea全局查找和替换

点击这里查看 <intellij idea使用教程汇总篇> 全局查找 通过快捷键 CtrlShiftf 快速进入全局查找页面&#xff0c;或者通过 Edit 》Find 》Find In Path 1、你要检索的内容; 2、如何匹配内容&#xff0c;分别表示 区分大小写、单个单词、正则、过滤查找文件; 3、查找…

IDEA全局替换快捷键

Intellij IDEA使用教程相关系列 目录 Intellij IDEA 强大的搜索能力 IDEA全局替换 通过快捷键 CtrlShiftr 或这点击 Edit 》Find 》Replace In Path 有些IDEA版本按了快捷键也没效果&#xff0c;经常遇到的原因如下&#xff1a; 1、与其他软件快捷键冲突了&#xff0c;特别是…

idea替换所有文件中的内容

通过快捷键CtrlShiftR打开窗口&#xff0c;或者通过点击Edit–>Find–>Replace in path打开窗口。如下图&#xff1a; 输入被替换和要替换的内容后&#xff0c;点击replace all即可替换全部。

IDEA 批量修改变量名、批量替换代码快捷键

平时学习过程中经常遇到一些变量名需要依照规范来修改的&#xff0c;这里记录Idea批量修改变量名&#xff0c;或者批量修改代码的快捷键&#xff0c;希望对大家有所帮助吧。1. 使用Shift F6批量修改变量名 选中要修改的变量名按ShiftF6&#xff0c;然后就可以直接编辑 编辑完…

idea的替换快捷键

替换&#xff1a;有全局替换 和 当前文件内容替换 全局&#xff1a;ctrl shift r: 在路径中替换,指的是在选定的目录下或者类包下,查找要被替换的字符。 当前文件内容&#xff1a;ctrl r: 当前文件内容替换,指的是在当前打开的文件中替换匹配的字符,只操作一个文件。 一、…

idea如何全局替换

idea如何全局替换 打开idea&#xff0c;点击CtrlShiftR&#xff0c;打开Replace in Files面板 在1里面输入想要被替换的单词&#xff0c;在2里面输入替换之后的单词 In project代表在整个项目中搜索替换 Module代表在模块中搜索替换 Directory代表在当前目录中搜索替换 Sc…

idea 中的查找与替换

⭕️前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家(点击跳转到网站)⭕️ 1.查找当前文件内容&#xff1a;ctrlF 如上图片 2.查找全局文件&#xff1a;ctrlshiftF 或double shift&#xff08;按两下&#x…

Intellij IDEA使用经验(八):快速批量替换

一、需求背景 ​ 在使用idea过程中&#xff0c;经常根据样例或者其他变量名字等进行统一更改&#xff0c;用到查找替换&#xff0c;提高我们工作效率。当前文件查找替换&#xff0c;其实我们经常用&#xff0c;都很了解也熟悉&#xff0c;还有另外一种场景&#xff0c;我们在整…