一、为什么要用DDS?
为满足机载显控系统软件与其他机载系统及机载设备之间的通信需求, 设计了虚拟总线组件。 通过对各类机载总线网络的协议特征共性的提取, 提出一种总线网络仿真的统一方法, 适用于不同种类的机载总线网络仿真。 虚拟总线组件模拟并支持各种机载网络协议接口(AFDX、 FC、 1553B、 ARINC 429、 IEEE 1394),使用基于发布/订阅机制的数据分发服务支持各类虚拟机载设备之间的一对多,一对一的通信。 在其底层使用内存管理服务及 Winsock 库支持基于虚拟共享内存的总线通信模拟和基于以太网的总线通信模拟。
1) 应用程序层软件可使用虚拟总线层提供的各类总线接口与其他交联子系统或虚拟机载设备进行通信, 其接口与真实机载代码所调用的接口完全一致。 保证了机载代码在虚拟开发平台与真实硬件设备之间的无缝移植。
2) 虚拟总线层向应用程序层提供与真实总线设备相同的通信接口, 其数据发送与接收通过各种虚拟总线(虚拟 AFDX 总线、 虚拟 A429 总线等) 完成。
3) 数据分发服务层向虚拟总线层提供基于发布/订阅的数据分发服务, 通过建立发送方与接收方的发布/订阅关系来绑定发送端口与接收端口, 并建立发送方与接收方的数据传输通道。
4) 传输层使用两种方式来完成数据从源端到目的端的发送:
- 针对数据分发服务层的基于共享内存的数据分发服务(DDS), 传输层采用内存管理服务来实现数据发送与接收。
- 针对基于以太网的数据分发服务(DDS), 传输层采用 Winsock 库提供的服务来完成数据发送与接收。
从应用开发的角度而言, 数据分发服务(DDS)具有位置透明性和协议透明性两大特性, 这两种特性大大简化了应用开发流程。
- 位置透明性是指开发者只需设定发布者、 订阅者和数据主题即可完成数据的收发, 而不需要知道数据发送方和接收方的物理地址。
- 协议透明性是指数据的发送方和接收方只需调用数据分发服务提供的统一的接口即可完成数据的发布和订阅, 与数据传输协议无关。
DDS是物联网的最佳选择之一
也就是说随着物联网的发展,传统的通信协议在物联网和大数据等新场景下会有暴漏出很多的弊端,所以需要设计一些新的方法去适用新的应用场景需求。
1.物理网场景下:需要低延迟数据连接、高可靠性以及高可扩展的体系结构,以适应商业级物联网(IoT)应用程序的需求。
2.物联设备的增多必然会导致数据的增多,所以需要一个方法能够让开发人员关注数据本身,而不用处理繁杂的消息收发过程代码。市面上虽然存在多种通信中间件标准和产品,唯独DDS是以数据为中心,是工业物联网的理想选择。
3.物联设备的加入会增加兼容性、同步性等问题从而提升整个系统架构的复杂度,所以分层设计就会更加重要,中间件的需求就会更强烈。
二、什么是DDS?
Data Distribute Serveice,数据分发服务:
DDS™是一个由对象管理组(OMG)发布的以数据为中心的中间件协议和API标准。采用分布式发布/订阅体系架构,以中间件的形式提供通信服务,强调以数据为中心。DDS中间件是一个软件层,从操作系统、网络传输和底层数据格式的细节中抽象出应用。相同的概念和api提供给不同的编成语言,使得应用在不同的操作系统、编成语言和处理体系架构之间交换信息。底层细节包括数据传输格式、发现、连接、可靠性和、协议、Qos策略等由中间件来管理。
三、什么时候用DDS?
1.存在通信延迟问题,比如需要以毫秒为单位或更短的时间来衡量延迟。
2.存在网络带宽/吞吐量或扩展问题,比如有超过10个不同的软件,或者需要共享超过一千种数据项。
3.系统离线5分钟(甚至5毫秒)将导致严重的问题。
4.在配置、启动或故障转移到备份服务器方面存在困难。 5.构建的系统将花费一年甚至更多的时间编写,并且涉及多个版本或需要与旧版应用程序进行集成。
四、DDS技术细节
分布式发布/订阅体系架构
1.全局数据空间是一个抽象的概念。 在实现时,数据仍然是分别存储在每一个应用程序的本地空间中。在系统运行时,数据是按需传输或存储的,数据的发布者仅仅发送对方需要的数据,订阅者仅接受本地应用程序中需要的数据。
2.实际场景中,每个应用程序既可以是发布者又可以是订阅者。
以数据为中心
DDS提供Qos控制功能。应用程序通过发布和订阅主题进行通信。订阅可以指定时间和内容筛选器,并且只能获取发布主题的数据的子集。不同的DDS域彼此完全独立,跨DDS域无法进行数据通信。 以数据为中心的本质是DDS知道它存储什么数据,并控制如何共享这些数据。使用传统的以消息为中心的中间件的程序员必须编写发送消息的代码;而使用以数据为中心的中间件的时,只需指定数据如何共享、何时共享,编写少量代码即可直接共享数据值。DDS使用户无需在应用程序的代码中管理所有这些复杂的操作,而是直接为用户实现了受控、托管、安全的数据共享。
全局数据空间
DDS在概念上创建了一个 “全局数据空间”的本地的数据存储空间。对应用程序来说,全局数据空间看起来像是通过API访问的本地内存:发送端应用程序写入数据时,就像是写到了本地的存储空间;而实际上,由DDS发送消息以更新远程节点上的存储内容;接收端应用程序方可通过读取本地存储获取到数据。 在DDS域中,信息共享的单位是主题的数据对象。主题由其名称标识,数据对象由一些“键(Key)”属性标识。这类似于在数据库中用键属性来标识数据。上述是一张概念性的图示, DDS进行点对点通信,不需要服务器或云代理进行转发。