基于DDS的数据分发中间件设计与实现(论文阅读)

研究目的意义

航空系统子系统难以集成,急需一项实现异构系统间透明数据交互的关键技术。航电系统面临着:实时性、可靠性和动态扩展性,传统中间件产品无法很好的解决这三个问题,如当今流行的CORBA技术,其以对象和服务为中心,但是在航空电子系统中,大量的实时应用需要把他们的通信模式建成纯粹的以数据为中心的交换模式。这种模式下,一个应用发布数据,另一个应用获取感兴趣的数据,构成发布/订阅网络模型,这些实时应用主要关心的是如何用最小的代价来实现数据的可预测性分发。

OMG意识到这种数据分发服务需求,于2004年12月发布了面向分布式实时系统的数据分发服务规范。DDS规范为DDS中间件定义了一系列规范化的接口和行为,定义了以数据为中心的发布/订阅机制,提供了一个与平台无关的数据分发模型。此外,DDS规范还强力关注了对QoS的支持,它定义了大量的QoS策略,使得DDS可以很好的配置和利用系统资源,协调可预测性与执行效率之间的平衡,以及支持复杂多变的数据流需求。

国内外现状

RTI DDS是Real-Time Innovation公司开发实现的,也是第一个支持DDS规范的商业产品,目前被广泛应用于任务要求十分苛刻的场合。

Open DDS是使用C++语言基于DDS规范实现的开源软件,其由Object Computing.Inc开发实现和维护。OpenDDS的实现采用了中心节点的结构方式,即系统中专门有一个节点运行daemon程序,该程序(即信息库,DCPSInfoRepo)用于存储和管理主体和连接节点的控制信息,判断发布方所发布的主题和订阅方所订阅的主题是否匹配,QoS策略是否兼容,而数据是直接由发布者传输到订阅者的。OpenDDS将所有控制信息都集中在一个节点上,配置简单,但是会有性能瓶颈和单点失效风险。

OpenSplice DDS是由Prism Tech公司开发,实现了完整的DDS规范。其架构采用内存共享的方式,然而这种方式不仅仅局限于单个计算机上的应用,还包括可扩展性的服务集合,这种服务集提供了很强的伸缩性和可配置型。

数据分发模型

通常使用的数据分发模型有三种:客户端/服务器端(C/S)模型、消息队列(MQ)模型以及发布订阅(PS)模型。

CS模型特点是:客户端直接与服务器建立连接,之后向服务器请求服务并等待服务器端的相应,服务器端接收到客户端的请求后做相应处理,并将处理结果返回给客户端。因此,该过程中通信的发起这是客户端。该模型会随着客户端节点的增加,服务器端的工作负荷增加,响应时间增长,从而出现性能瓶颈,此外也存在单点失效问题。

MQ模型允许各个应用程序运行在不同节点,并且允许不一样的消息格式。消息发送者将消息发送到队列,接收者可以在任意时刻查看该消息队列。该模型和邮件系统类似,可以保证消息传输的质量,但是无法保证接收人是否阅读该消息,因此不适合实时系统数据的传输。

PS模型实现了应用程序间搞笑的数据分发,该模型下节点只需订阅其感兴趣的数据,或是发布它所提供的数据。发布者与订阅者之间的数据传输完全由中间件来完成,两者无需知道彼此的存在,只需要关心所需传递的数据,可以实现参与者的动态的加入与退出。

DDS规范

DDS规范分为两层:DCPS层和DLRL层。

DCPS层是DDS的基础层,为应用程序提供发布订阅的功能,此外该层还提供了对21中QoS策略的支持。

DLRL层位于高层,建立在DCPS层基础之上,是DDS一个可选的层次,允许将服务简单的集成到应用层。当有数据更新后自动重组数据,并通知所有的订阅者更新本地数据。

DCPS有五个模块组成:基础模块、域模块、主题模块、发布模块、订阅模块。

DCPS有两中通知机制:基于监听器和基于等待集合。

DP表示参与者(DomainParticipant),DR表示数据读者(DataReader),DW表示数据写者(DataWriter),T表示主题(Topic),P表示发布者(Publisher),S表示订阅者(Subscriber),DPF表示域参与者工厂(DomainParticipantFactory)。

信息库的设计

DCPS信息库是一个全局数据空间,管理一些全局的数据结构。DCPS信息库的管理采用多线程技术,使各个数据处理可以并发执行,提高数据处理效率。其中包括:主题记录表、订阅记录表、订阅成功记录表、失效节点记录表。

信息库中包含三种线程:接受节点注册线程、接受发布订阅主题信息线程、处理心跳信息线程。当新节点注册时,信息库会启动一个新的线程接收该节点的心跳信息,因此当系统中有n个节点时,信息库总共有n+2个线程。

原文