当前位置:网站首页 > 技术博客 > 正文

dds实现原理



一,概念介绍:

DDS(Data Distribution Service)是一种以数据为中心的分布式通信协议,由OMG(Object Management Group)发布,最早应用在美国海军舰艇,后来在物联网场景中大量使用,最近由于自动驾驶技术的兴起,在车载软件的通信中间件开发中也使用了DDS。

DDS协议大致流程如下图所示:

*DDS采用的通信方式是多对多的单向数据交互,通信模型为分布式结构,没有中心节点,同一个数据空间任何两个节点之间都能直接通信。

二,DDS中的主要关键词:

Domain:通信时的全域数据空间,由Domain ID唯一标识,只有处在相同空间内的通信实体才能相互通信。

DomainParticipant:数据空间内的通信实体。

Topic:主题,可以理解成通信数据的载体,主题将相互通信的发布者/订阅者进行了关联。

Qos:Quality of Service,使通信过程变得可靠。

Publisher:发布者,发布主题数据。包含至少一个DataWriter。

Subscriber:订阅者,订阅主题数据。包含至少一个DataReader。

DataWriter:数据写入者,把需要发布的数据写入到主题。

DataReader:数据读取者,从订阅的主题得到数据。

三,关于通信中间件:

中间件是位于操作系统平台和应用程序之间的软件层,它屏蔽了一些通信协议的细节,使组件之间通信模块的代码逻辑变得更简洁。

通信中间件采用的模型一共经历过四代演变:

(1)点对点模型:常见的服务器/客户端(Client/Server)模式。通信时,服务器和客户端直接连接,导致服务器和客户端的耦合程度过高,且服务器的异常会直接影响到客户端。

(2)Broker模型:由Broker集中统一处理所有请求,解决了通信双方的耦合问题,当服务器地址发生变化时,客户端不受影响。但是一旦Broker出现异常,会影响整个系统,且当请求规模达到一定程度,会因为Broker处理速度慢而影响整体的性能,可靠性很低。

(3)广播模型:通信双方不用单独连接,而是借助于一种总线——广播信道。只需借助广播信道发送和接收信号。由于所有的通信实体都可以从广播信道接收所有的信号,而无论该实体是否需要这个信号,这样会浪费传输带宽。

(4)以数据为中心的模型:与广播模型类似,所有通信实体都可以往“总线”发布和订阅消息,但是这个“总线”根据数据不同划分了很多数据空间,每个通信实体在数据空间内只收到和自己关联的信号。

四,关于发布/订阅模式:

通信架构如图,以RTI Connext DDS官网提供的素材为例,在巧克力工厂中,可能有一个传感器可以测量和发布调温机的当前温度。其他应用程序则通过订阅标题为 “ChocolateTemperature”的Topic来获得调温机的温度,而不需要关注“ChocolateLoteState"。

五,实时发布订阅互操作性有线协议——RTPS协议

虽然DDS定义了应用层接口和以数据为中心的发布订阅模式,但是它的通信机制不包含网络传输的定义。

DDS在网络传输层的数据通信上需要借助RTPS协议。RTPS协议还可以允许不同的DDS模块之间进行交互。

DDS域和RTPS域的交互方式如图

DDS实体与RTPS实体的交互关系如图

六,接口描述语言IDL

IDL是一种描述性语言,类似于XML,以独立于编程语言/操作系统/处理器平台的方式来定义用于交互的数据类型和接口。

IDL通常用于RPC(Remote Procedure Call远程过程调用)软件,此处用于定义DDS发送和接收的数据格式,以及生成发布者/订阅者的代码。

DDS通信协议配合使用IDL语言的大致开发流程如下:

*常见开源的DDS框架:FastDDS,CycloneDDS

参考阅读:

https://www.scirp.org/html/6-6101064_3999.htm#Figure%201

https://www.dds-foundation.org/sites/default/files/DDS_Tutorial_RTEW09.pdf

https://community.rti.com/static/documentation/connext-dds/6.1.1/doc/manuals/

https://medium.com/software-architecture-foundations/dds-middleware-1af525f69753

https://fast-dds.docs.eprosima.com/en/latest/fastdds/rtps_layer/rtps_layer.html

  • 上一篇: 微信小程序源码平台
  • 下一篇: py文件是啥
  • 版权声明


    相关文章:

  • 微信小程序源码平台2025-04-26 18:30:00
  • ugui ngui区别2025-04-26 18:30:00
  • python如何运行一个python程序2025-04-26 18:30:00
  • 如何查看csdn积分2025-04-26 18:30:00
  • redis rdb bgsave2025-04-26 18:30:00
  • py文件是啥2025-04-26 18:30:00
  • 弹性盒子样式2025-04-26 18:30:00
  • opengl 教程2025-04-26 18:30:00
  • js connection2025-04-26 18:30:00
  • linux文件权限怎么改2025-04-26 18:30:00