DDS学习笔记

本文详细介绍了DDS(数据分布服务),一种以数据为中心的分布式实时通信中间件,涵盖其定义、架构、通信流程、发现协议以及FastDDS的实现。重点讨论了Domain、DomainParticipant、Topic等核心概念及其在实际应用中的作用。
摘要由CSDN通过智能技术生成

DDS定义

DDS定义:Data Distribution Service 数据分发服务,是新一代分布式实时通信中间件协议,采用发布/订阅体系架构,强调以数据为中心,提供丰富的QoS服务质量策略,以保障数据进行实时、高效、灵活地分发,可满足各种分布式实时通信应用需求。

**数据分发服务(DDS™)是一个由对象管理组(OMG)发布的以数据为中心的中间件协议和API标准。**采用分布式发布/订阅体系架构,以中间件的形式提供通信服务,强调以数据为中心。DDS中间件是一个软件层,从操作系统、网络传输和底层数据格式的细节中抽象出应用。相同的概念和api提供给不同的编成语言,使得应用在不同的操作系统、编成语言和处理体系架构之间交换信息。底层细节包括数据传输格式、发现、连接、可靠性和、协议、Qos策略等由中间件来管理。

在分布式系统中,DDS位于操作系统和应用程序之间,支持多种编程语言以及多种底层协议。这便是我们常说的跨平台

在这里插入图片描述

DDS发布订阅模型

Domain:全局数据空间,DDS把所有的本地存储的数据称作全局数据空间(domain)。对于应用来说,全局数据空间看上去像通过api来访问内存一样。你使用时,就像使用本地存储一样。事实上,DDS发送消息来更新远端节点的相应存储值。这样,在使用时,如同本地存储。代表一个通信平面,由Domain ID唯一标识,只有在同一个域内的通信实体才可以通信;如果考虑车内通信,可以只划分1个Domain,也可以按照交互规则或其他规则,定义多个Domain;

Domain Participant:代表域内通信的应用程序的本地成员身份,简单来说,就是说明同一数据域内的通信成员;

Topic:是数据的抽象概念,由TopicName标识,关联相应数据的数据类型(DataType),如果把车内所涉及的所有Topic集合在一起,这样就形成一个虚拟的全局数据空间“Global Data Space”,进一步弱化了节点的概念,所以域参与者已经不是节点的概念了;

DataWriter:数据写入者,类似缓存,把需要发布的主题数据从应用层写入到DataWriter中;

DataReader:数据读取者,同样可以理解为一种缓存,从订阅者得到主题数据,随之传给应用层;

Publisher:发布者,发布主题数据,至少与1个DataWriter关联,通过调用DataWriter的相关函数将数据发出去;

Subscriber:订阅者,订阅主题数据,至少与1个DataReader关联。当数据到达时,应用程序可能忙于执行其他操作或应用程序只是等待该消息时,这样就会存在两种情况,同步访问和异步通知。

在这里插入图片描述

通信流程

基于DDS的分布式系统中,加入DDS网络的节点发布自己想要发布的(或者想要订阅的)Topic和QoS,DDS网络上已经存在的节点收听到这个请求后和自己的发布订阅情况以及QoS标准进行对照,如果新加入节点的Topic信息与自己相关,并且QoS标准也符合要求,就主动同新加入的节点进行通信,将自己的Topic信息发送给新加入节点,同时,把新加入节点的相应信息注册到本节点上,以便有通信需求时建立点到点连接

DDS规范是由OMG(Object Management Group)对象管理组织发布的。OMG组织是一个国际性、开放性、非盈利性技术标准联盟,由供应商、终端用户、学术机构、政府机构推动,已经有31年的历史;OMG工作组针对各种技术和行业制定企业集成标准,并开发可为数千个垂直行业提供现实价值的技术标准。

DDS四层结构

在这里插入图片描述

应用层:使用DDS API在分布式系统中实现通信的用户应用程序;

DDS层:DDS通信中间件的稳健实现。它允许部署一个或多个 DDS域,其中同一域内的域参与者通过在域主题下发布/订阅来交换消息;

RTPS层:实施Real-Time Publish-Subscribe protocol(实时发布-订阅协议),以实现与DDS应用程序的互操作性。该层充当传输层的抽象层;

传输层:DDS可用于各种传输协议,例如:UDP、TCP、SHM;

DDS发现协议

DDS提供发现协议,该协议定义了DataWriters在给定Topic下与订阅同一Topic的DataReaders匹配的机制,允许跨域DomainParticipants自动查找和匹配DataWriters和DataReaders,以便他们可以开始共享数据,这适用于通信过程中的任何时候。

Fast DDS 作为DDS的一种具体实现,以下以Fast DDS举例其发现过程,分两个阶段执行:

参与者发现阶段(PDP):在此阶段,DomainParticipants确认彼此的存在。为此,每个DomainParticipant都会定期发送公告消息,其中指定DomainParticipant正在侦听传入元数据和用户数据流量的单播地址(IP和端口)。当两个给定的DomainParticipants 存在于同一个DDS域中时,它们将匹配。默认情况下,通知消息使用众所周知的多播地址和端口(根据DomainId来计算)发送。此外,可以指定地址列表以使用单播发送通知。此外,还可以配置此类公告的周期。

端点发现阶段(EDP):在这个阶段,DataWriters和DataReaders相互确认。为此,DomainParticipants使用PDP期间建立的通信通道相互共享有关其DataWriters和DataReaders的信息。除其他外,此信息包含Topic和数据类型。对于要匹配的两个端点,它们的主题和数据类型必须一致。一旦DataWriter和DataReader匹配,它们就可以发送/接收用户数据。

同时,Fast DDS提供如下四种发现机制:

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

发现服务器:这种发现机制使用集中式发现架构,其中服务器充当元流量发现的中心;

静态发现:这实现了DomainParticipant彼此之间的发现,但如果远程DomainParticipant事先知道这些实体,则可以跳过每个 DomainParticipant (DataReader/DataWriter) 中包含的实体的发现;

手动发现:此机制仅与RTPS层兼容,它允许用户使用其选择的任何外部元信息通道手动匹配和取消匹配RTPSParticipants、RTPSWriters和RTPSReaders;

参考链接

https://zhuanlan.zhihu.com/p/192981171

https://www.digiproto.com/news/161.html

https://zhuanlan.zhihu.com/p/192981171

https://www.digiproto.com/news/161.html

https://developer.aliyun.com/article/1291618

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值