DDS介绍

news2024/10/6 16:23:00

今天我们一起来了解一个中间件协议框架DDS,它的全称是Data Distribution Service,是一套通信协议和API标准,提供了以数据为中心的连接服务,基于发布者-订阅者模型,提供了介于操作系统和应用程序之间的功能,使得组件之间可以互相通信。强调以数据为中心,提供丰富的QoS服务质量策略,以保障数据进行实时、高效、灵活地分发,可满足各种分布式实时通信应用需求。

标准提供商

DDS本身是一套标准。由Object Management Group(简称OMG)维护。
OMG是一个开放性的非营利技术标准联盟,由许多大型IT公司组成:包括IBM,Apple Computer,Sun Microsystems等。它的使命是开发技术标准,为数以千计的垂直行业提供真实的价值。OMG一直致力于将其由最终用户、供应商、政府机构、大学和研究机构组成的国际成员聚集在一起,随着多年来技术的变化来开发和修订这些标准,其中包括统一建模语言SYSML和UML,还有中间件标准CORBA等,而标准的实现则由其他服务提供商完成。
目前DDS的提供商包括下面这些:

  • Vortex OpenSplice
  • eProsima Fast RTPS
  • Hamersham
  • Company Summary Kongsberg Gallium
  • MilSOFT
  • Object Computing OpenDDS
  • Remedy IT
  • RTI
  • Twin Oaks Computing, Inc.

4个数据通信时代

有了DDS协议后,我们可以大致把数据通信方式划分为4个时代:
在这里插入图片描述

  • (第一代)点对点的CS(Client-Server)结构,这是大家最为熟悉的:一个服务器角色被许多的客户端使用,每次通信时,通信双方必须建立一条连接。当通信节点增多时,通信的连接数也会增多。并且,每个客户端都必须知道服务器的具体地址和所提供的服务。一旦服务器地址发生变化,所有客户端都会受到影响。
  • (第二代)Broker模型:存在一个中间人,它负责初步处理大家的请求,并进一步找到真正能响应服务的角色,这就好像存在一个经纪人。这为客户端提供了一层抽象,使得服务器的具体地址变得不重要了。服务端地址如果发生变化,只需要告诉Broker就可以了。但这个模型的问题在于,Broker变成了模型的中心,它的处理速度会影响所有人的效率,这就好像城市中心的路口,当系统规则增长到一定程度,Broker终究会成为瓶颈。更糟糕的是,如果Broker瘫痪了,可能整个系统都将无法运转。
  • (第三代)广播模型:所有人都可以在通道上广播消息,并且所有人都可以收到消息。这个模型解决了服务器地址的问题,且通信双方不用单独建立连接,但它存在的问题是:广播通道上的消息太多,太嘈杂,所有人都必须关心每条消息是否与自己有关。这就好像全公司一千号人坐在同一个房间里面办公一样。
  • (第四代)DDS模型:这种模型与广播模型有些类似,所有人都可以在DataBus上发布和读取消息。但它更进一步的是,通信中包含了很多并行的通路,每个人可以只关心自己感兴趣的消息,自动忽略自己不需要的消息。

下图展示了DDS在网络栈中的位置,它位于传输层的上面,并且以TCP,UDP为基础。
在这里插入图片描述

分布式系统通信痛点解决

分布式系统中包含了许多的角色需要互相通信,随着角色数量的不断增长,其通信的通道数量会以爆炸式增长。
在这里插入图片描述
有了DDS后,就有统一的DataBus,则即便新增了通信角色其通信模型也不会变得更加复杂。
在这里插入图片描述

此外对于分布式系统来说,有很多复杂的逻辑需要处理,例如:如何发现其他节点,如何为每个节点分配地址,如何配置消息的可靠性等,这使得应用程序变得臃肿。而如果说通信的中间件能够完全处理好这些逻辑,则应用程序将可以集中处理自己的业务,变得更加敏捷。
在这里插入图片描述

DDS 的应用

它的应用非常广泛,广泛到它涉及到了我们每天都要依赖的许多重要行业,例如:航空,国防,交通,医疗,能源等等。下图是一些示例:
在这里插入图片描述对于汽车行业来说,汽车开放系统架构(AUTomotive Open System ARchitecture)已经在AUTOSAR Adaptive Platform 18.03中包含了DDS协议。
另外,DDS的实时特性可能特别适合自动驾驶系统。在这类系统中,通常会存在感知,预测,决策和定位模块,这些需要非常高速和频繁的交换数据。借助DDS,可以很好的满足它们的通信需求。
在这里插入图片描述

DDS标准核心规范

在DDS规范中,有以下描述标准的基本文档:

  • DDS Specification:描述了以数据为中心的发布-订阅模型。该规范定义了API和通信语义(行为和服务质量),使消息从消息生产者有效地传递到匹配的消费者。DDS规范的目的可以概括为:“能够在正确的时间将正确的信息高效,可靠地传递到正确的位置”。
  • DDSI-RTPS:描述了RTPS(Real Time Publish Subscribe Protocol)协议。该协议通过UDP等不可靠的传输,实现最大努力(Best-Effort)和可靠的发布-订阅通信。RTPS是DDS实现的标准协议,它的目的和范围是确保基于不同DDS供应商的应用程序可以实现互操作。
  • IDL 定义了IDL,一种用于以独立于编程语言的方式定义数据类型和接口的语言。这不属于DDS标准,但DDS依赖于它。

DDS的通信模型DCPS,如下图:
在这里插入图片描述

  • Domain:代表一个通信平面,由Domain ID唯一标识,只有在同一个域内的通信实体才可以通信;可以只划分1个Domain,也可以按照交互规则或其他规则,定义多个Domain;
  • Topic:是数据的抽象概念,由TopicName标识,关联相应数据的数据类型(DataType),把所涉及的所有Topic集合在一起,这样就形成一个虚拟的全局数据空间“Global Data Space”,这里弱化了节点的概念;
  • DataWriter:数据写入者,类似缓存,把需要发布的Topic数据从应用层写入到DataWriter中;
  • DataReader:数据读取者,同样可以理解为一种缓存,从订阅者得到Topic数据,随之传给应用层;
  • QoS:服务质量(Quality of Service),这是DDS的亮点,通过定义灵活的QoS规则,包括可靠性、系统健康(活跃度)甚至安全性,也可以共享数据。DDS在发送它所需要的信息方面很聪明。如果消息不能总是到达它们预期的目的地,那么中间件将在需要的地方实现可靠性。当系统发生变化时,中间件动态地计算出向何处发送哪些数据,并智能地通知参与者这些变化。如果总数据量很大,DDS会智能地过滤并只发送每个端点真正需要的数据。当更新需要快速时,DDS发送多播消息来一次更新许多远程应用程序。随着数据格式的发展,DDS跟踪系统各个部分使用的版本,并自动转换。对于安全性至关重要的应用程序,DDS控制访问、强制数据流路径并实时加密数据。

发布者(publisher)设置发布的主题(topic),数据读者(subscriber)订阅感兴趣的主题。publisher作为发布者角色,至少包含一个DataWriter,并负责创建,删除和管理datawriter。同样,subscriber作为订阅者,至少与一个datareader关联,并负责发布数据,数据发布者通过调用datawriter的write函数发布数据,但数据不会立刻被送出,实际的消息产生是通过publisher和Qos综合控制的。datareader负责订阅数据,订阅方式可采用异步方式(listener),同步方式和非阻塞三种。

DDS的通信协议RTPS建立在传输层之上,可以支持共享内存:
在这里插入图片描述

RTPS协议的主要特点包括:

  • 性能和服务质量属性,使得实时应用程序能够在标准IP网络上进行最佳努力和可靠的发布-订阅通信;
  • 容错,允许创建没有单点故障的网络;
  • 可扩展性,允许协议通过新的服务进行扩展和增强,而不会破坏向后兼容性和互操作性;
  • 即插即用连接,使新的应用程序和服务自动发现,应用程序可以随时加入和离开网络,而不需要重新配置;
  • 可配置性,允许每个数据传递能够平衡可靠性和及时性的要求;
  • 模块化,允许简单设备实现协议的子集,同时仍然参与网络;
  • 可扩展性,使系统有可能扩展到非常大的网络;
  • 类型安全,以防止应用程序编程错误而危及到系统中其他远程节点。

RTPS协议由PIM(Platform Independent Model,平台独立模型)和一组PSM(Platform-Specific Model,平台特定模型)描述。
PIM包含四个模块:结构,消息,行为和发现。结构(Structure)模块定义通信端点。消息(Messages)模块定义这些端点可以交换的消息集合。行为(Behavior)模块定义合法交互集(消息交换)以及它们如何影响通信端点的状态。发现(Discovery)模块定义如何自动发现和配置实体。如图:
在这里插入图片描述
PSM负责提供PIM与UDP(或者说底层平台)之间的映射,主要包括各种消息格式。

总结

DDS是一种网络中间件,可以简化网络编程;它实现了一个超越基本发布-订阅模式的机制,用于在节点之间发送和接收数据、事件和命令。产生信息的节点(发布者)创建“主题”(例如,温度、位置、压力)并发布“样本”。 DDS 将样本交付给声明对该主题感兴趣的订阅者。主要好处是使用 DDS 进行通信的应用程序是分离的,很少需要花费设计时间来处理它们的相互交互。特别是,应用程序永远不需要有关其他参与应用程序的信息,包括它们的存在或位置(支持去中心化);DDS 透明地处理消息传递,无需用户应用程序的干预。提供了一个数据空间的方式,属于同一数据空间,访问数据就像通过api来访问内存一样。
后续会再来一起看下DDS的实现,Fast DDS,欢迎关注。

参考资料:
https://paul.pub/dds-and-fastrtps/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/410916.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】二叉树性质巩固

🚀write in front🚀 📜所属专栏:初阶数据结构 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:🎉VS2022_C语言仓库 🎡您的点赞、关注、收藏、评论,是对…

Shell基础了解

一.Shell简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。 Ken…

JavaScript【二】JavaScript中的流程控制

文章目录🌟前言🌟流程控制🌟选择结构(条件判断)🌟if分支🌟 switch 分支(多选一的条件判断)🌟循环结构🌟for🌟while🌟 do...while🌟区别🌟break和c…

从元宇宙婚礼和元宇宙游戏看元宇宙的“史前时代”

元宇宙,正在从科幻走进现实——确切地说,是走进现实中的虚拟世界。这一切,离不开强有力的高科技及其产品化基础设施设备的支撑。而且,元宇宙不会单由哪一家公司建成,也不会一蹴而就,它需要多方参与和一定的…

外包干了三年,算是废了...

先说一下自己的情况。大专生,19年通过校招进入湖南某软件公司,干了接近3年的测试,今年年上旬,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了三年&#xff0c…

C语言基础——数组与字符串

文章目录一、数组1.数组的意义2.数组类型如何表示3.数组变量的定义3.1求数组类型大小3.2数组的长度4.数组中成员的使用4.1数组的下标4.2如何表示数组成员5.常见问题6.冒泡排序7.字符数组 字符类型数组7.1定义7.2物联网 -- 服务器/web -- 上层使用大多是字符串。7.3定义1个字符型…

javaweb考研辅导网站交流

设计内容: 前台技术:html/css/javascript。 后台技术:java/jspServlet/struts2框架。 数据库技术:mysql。 具体功能模块主要包括: 1、考研浅谈:专业不同的热心的考研成功者能够发布不同科目的复习心得等。…

JavaScript 基础入门速成下篇

JavaScript 高级 数组及操作方法 数组,即一组数据的集合,JavaScript中,数组里面的数据可以时不同类型的; 定义数组的方法 1. 对象实例创建 new Array 2. 直接量创建 // 对象实例创建 var arr new Array(1,2,3)// 直接量…

4.11每日一题

翀某说:C语言快忘了,决定每日一练,周末超难度训练 当然了翀某说,python自学中,所以每道题除了C语言之外,看看python能不能写 题目给定一个整数数组 nums 和一个整数目标值 target,请你在该数组…

入门前端框架Layui

🏭 作者:哈桑c(CSDN平台) ⛺️ 专栏:前端自学记录 文章目录文章简介说在前面的话需要具备的基础1、Layui 的介绍2、Layui 的下载和使用3、Layui 示例4、Layuimini layui-vue结语文章简介 本文为大家介绍前端 UI 组件…

【Linux】进程概念二

文章目录进程概念二1. 进程状态2. 进程状态查看3. 僵尸进程3.1 僵尸进程的危害4. 孤儿进程5. 环境变量5.1 常见环境变量5.2 查看环境变量的方法5.3 测试PATH5.4 环境变量相关的命令5.5 环境变量的组织方式5.6 通过代码获取环境变量6. 程序地址空间7. 进程地址空间8. 扩展8.1 为…

前端学习路线(2023版)超详细

一:前端开发基本功 俗话说的好“不积跬步,无以至千里”,学习也是一样的从简单的基础的知识点开始慢慢积累,首先就是掌握前端语言的基础知识3大部分(HTML、CSS、页面制作工具)其中包含了元素和属性、表单和图…

Adobe 中国

Adobe中国是Adobe公司在中国设立的分支机构,其总部位于上海。 Adobe中国的主要业务包括销售Adobe公司的软件产品、提供技术支持和服务、开展市场推广和宣传等工作。 作为全球领先的创意设计软件提供商,Adobe中国向中国用户提供了一系列功能强大的软件产…

webpack配置本地TypeScript编译环境和开启本地服务

目录 1.创建一个文件夹 2.初始化一个package.json文件对我们安装包进行记录 3.安装webpack 4.配置webpack.config.js文件 1.创建一个文件夹 2.初始化一个package.json文件对我们安装包进行记录 执行npm init,文件命名为ts_demo,然后一直回车。 3.安装…

【Spring6】| Spring IoC注解式开发

目录 一:Spring IoC注解式开发 1. 回顾注解 2. 声明Bean的四个注解 3. Spring注解的使用 4. 选择性实例化Bean 5. 负责注入的注解(重点) 5.1 Value 5.2 Autowired与Qualifier 5.3 Resource 6. 全注解式开发 一:Spring I…

开放式耳机的颠覆之作!南卡OE Pro新皇降临!佩戴和音质双重突破

千呼万唤的南卡OE Pro终于要在最近正式官宣上线,此消息一经放出,蓝牙耳机市场就已经沸腾。NANK南卡品牌作为国内的音频大牌,发展和潜力一直备受业内关注,这次要上线的南卡OE Pro更是南卡十余年来积累的声学技术结晶之一。 据透露…

ChatGPT惨遭围剿?多国封杀、近万人联名抵制……

最近,全世界燃起一股围剿ChatGPT的势头。由马斯克、图灵奖得主Bengio等千人联名的“暂停高级AI研发”的公开信,目前签名数量已上升至9000多人。除了业内大佬,欧盟各国和白宫也纷纷出手。 最早“动手”的是意大利,直接在全国上下封…

【Redis】Redis 是如何保证高可用的?(背诵版)

Redis 是如何保证高可用的?1. 说一下 Redis 是如何保证高可用的?2. 了解过主从复制么?2.1 Redis 主从复制主要的作用是什么?2.2 Redis 主从模式的拓扑结构?(1)一主一从结构(2)一主多…

客快物流大数据项目(一百一十一):Spring Boot项目部署

文章目录 Spring Boot项目部署 一、​​​​​​​​​​​​​​项目打包 二、运行 Spring Boot项目部署

Hadoop之Mapreduce序列化

目录 什么是序列化: 什么是反序列化: 为什么要序列化: Java的序列化: Hadoop序列化: 自定义序列化接口: 实现序列化的步骤: 先看源码进行简单分析: 序列化案例实操: 案例需…