APP下载

基于DDS的传感器数据分发系统的设计与实现

2018-10-23王永生

舰船电子工程 2018年10期
关键词:发布者代理服务器

韩 军 王永生

(海军航空大学 烟台 264001)

1 引言

传感器数据是时效性很强的数据对象,对实时性具有很高的要求。将合适的传感器数据在合适的时间分发给合适的用户是传感器数据分发系统设计的原则之一,其中合适的时间是指传感器数据快速实时的分发,合适的传感器数据和合适的用户是指传感器数据的按需分发[1]。

对象管理组织OMG于2004年发布了第一个基于发布/订阅体系结构的实时通信规范——数据分发服务[2](Data Distribution Service,DDS)。DDS采用以数据为中心的设计思想,定义了大量的QOS策略,能够解决高效、实时的数据分发问题,非常贴合传感器网络等应用场景。

2 实时数据分发规范——DDS

2.1 数据为中心的发布/订阅模型

传统的客户端/服务器模型以对象为中心,客户端与服务器之间高度耦合,降低了系统的健壮性、灵活性和可扩展性,同时服务器端工作效率低,容易造成网络阻塞。分布式对象模型是随着网络和面向对象技术逐渐完善起来的,主流实现模型有三种:COBRA、DCOM和 EJB[3]。其中COBRA最为完善,具有无关于操作系统、开发语言的独立性,但其本质上依然属于C/S模型,不能满足实时性的要求,不能对不同的数据类型进行实时性和可靠性的折中。以数据为中心的发布/订阅(Data Centric Publish Subscribe,DCPS)模型实现了发布者和订阅者在时间、空间和数据传输上的解耦,适用于节点可以随意加入和退出的动态松耦合的网络环境。

DCPS模型如图1所示,一个节点上可以存在发布者、订阅者,也可以两者同时存在。标以主题的数据通过数据域共享,具有相同主题的订阅者和发布者才能建立发布/订阅关系,服务质量(Quality of Service,QoS)要求贯穿整个发布/订阅过程。DCPS模型由域(Domain)、域参与者(DomainParticipant)、发布者(Publisher)、订阅者(Subscriber)、数据写入者(Publisher)、数据读取者(DataWriter)和主题(Topic)等内容组成[4]。

2.2 DDS体系结构

DDS采用DCPS通信机制,提供了一个与平台无关的数据模型。DDS规范分为两层,DCPS层和数据本地重构层(Data Local Reconstruction Layer,DLRL)。DCPS层是核心和基础,提供了数据发布的基础架构和服务,DLRL层是可选层,建立在DCPS基础之上,将DCPS层提供的服务进行了抽象,在DLRL层建立了与底层服务的映射关系[5]。目前,包括OpenDDS在内的大多数实现仅实现了DCPS层,因此后面仅讨论和研究DCPS层。DDS规范的层次结构如图2所示。

图2 DDS的层次结构

DCPS层建立了一个抽象的全局数据空间GDS[6](Global Data Space),发布者和订阅者在该GDS中发布和订阅自己需要的数据类型,通过中间件处理后进行数据传送。DCPS层将用户对资源的需求情况和资源的可用情况都转化为服务质量QoS,QoS参数贯穿整个DDS通信过程,通过设定QoS来程序化服务器的行为[7]。发布和订阅是通过主题来关联的,通过主题来关联发布信息,创建发布和订阅者实体,并为这些实体设定QoS参数。

2.3 QoS策略

DDS规范定义多个QoS策略,控制应用程序间如何、何时发布数据的多个方面,应用程序使用它指定其对服务质量的要求。参与者指定它们需要服务的哪些行为,服务描述如何实现这些行为。这些策略可应用于各个DCPS实体(主题、数据写入者、数据读取者、发布者、订阅者、域参与者),但是并非所有策略对所有实体有效[8]。现对部分QoS的功能总结如下。

2.3.1 资源管理

1)Resource_Limits策略描述了有多少本地存储可用于DDS基础设施。在该策略中,max_samples成员指定单个数据写入者或数据读取者在其所有实例中可管理的样本最大数量,max_instances成员指定数据写入者或数据读取者可管理的实例的最大数量,max_samples_per_instance成员指定单个数据写入者或者数据读取者中可为单个实例管理的样本的最大数量。

2)Time_based_filter策略提供一种设置“最小间隔”时间段的方式,用于限制发布者发布的数据量,发布者使用该策略进行数据采样后再发布,订阅者使用该策略过滤接收的数据。

2.3.2 实时性控制

1)Deadline定义数据发送的最小速率,适用于主题、数据写入者和数据读取者。在数据写入者和数据读取者间创建关联时,双方的值必须兼容,即数据读取者的Deadline值必须大于或等于数据写入者的对应值。该策略可用于设置传感器数据分发系统的数据刷新率。

2)Latency_budget用来优化并调节发布方在数据传输时订阅者最大可接受时延。

2.3.3 通信控制

1)Reliability策略控制数据分发的可靠性,支持reliable和best effort两种设置。如果将可靠性种类设置为尽力而为(best effort),则不会发生数据重传。best effort的设置适合那些周期性强,且需要最新样本的数据。如果要求给定信息的全部数据样本,则该参数应设置为reliable。

2)Ownership策略描述了多个数据写入者是否能更新数据对象的同一实例。当所有权设置为shared时,一个数据实例能被多个数据写入者更新,当设置为exclusive时,一个数据实例只能被一个数据写入者更新。被选中的数据写入者是由所有权强度参数决定的。

3 传感器数据分发系统设计

3.1 传感器数据格式

本文研究的传感器为空中目标探测雷达,传感器数据格式如表1所示。其中传感器类型有火控雷达、红外雷达和远程预警雷达等,目标类型为直升机、运输机和轰炸机。用户终端可以通过获取某一或某些传感器生成的数据来满足远程预警和协同作战的需要。

表1 传感器数据格式

3.2 发布/订阅框架

3.2.1 事件声明

事件声明方式是指发布条件和订阅条件对事件的描述方式,目前有三种事件声明方式:主题方式、内容方式和类型方式[9]。

主题是发布和订阅应用程序间互动的基本方法,发布者和订阅者的主题相匹配才能建立通信。主题方式以关键字(keyword)的方式描述事件,表达能力较弱,但是实现简单,目前许多成熟发布/订阅中间件均采用这种方式。

基于内容的方式事件描述能力很强,可以将有关于事件的元数据或是对事件进行封装的数据结构来作为事件属性。但是这种方式匹配算法复杂、效率低,因此不适用于大规模分布式系统。

类型方式利用数据结构来区分、刻画事件,但是由于不同质的事件可能具有相同的数据结构,不能单独使用。本文将采用类型与主题相结合的方式。

3.2.2 匹配模式

发布/订阅包括两种匹配模式,即分布注册匹配模式和集中注册匹配模式[10]。

分布式注册匹配模式难以保证系统的完整性,不易掌握系统中存在的所有发布者和订阅者。同时发布者和订阅者的信息资源的查找和路由会占用额外的带宽资源。

本文注册服务器采用集中注册匹配模式,接受传感器代理和用户终端代理的注册。其中传感器代理是传感器数据的发布者,用户终端代理是传感器数据的订阅者。传感器代理和用户终端代理将发布条件和订阅条件直接发送给注册服务器,由注册服务器返回匹配结果。

3.2.3 通信架构

传感器数据分发系统采用非中心直连通信架构[11],注册服务器在完成注册匹配之后,不再发布者和订阅者之间的通信,由发布者和订阅者进行点对点的数据传送,大大提高了通信效率。即使注册服务器失效也不会影响正在进行的通信,因此系统具有很强的可靠性。

3.3 数据分发流程

传感器数据分发系统诸要素之间的交互顺序如图3所示。要实现数据实时按需分发,关键是注册匹配算法match(),其次是数据分发过程,分别由注册服务、注册匹配服务、发布服务和订阅服务实现。

图3 实体交互顺序图

3.3.1 注册服务

注册包括传感器代理注册和用户终端代理注册,传感器代理注册对应图中的advertise()。传感器代理接收传感器数据后生成发布条件,用户终端代理解析用户终端的数据请求生成订阅条件,然后分别将发布条件和订阅条件发送给注册服务器进行注册。

3.3.2 注册匹配服务

注册服务器通过调用match()实现注册匹配服务,为已注册的发布者寻找符合发布条件的订阅者,并通过MatchNotify()将匹配结果返回给发布者,这是发布/订阅模型服务实现自动发现的关键。

3.3.3 发布服务和订阅服务

发布服务扮演数据服务提供者的角色,对应于图中的Dissemination()。发布服务将应用数据按照订阅条件按需分发给数据订阅者,具体由Datawriter完成。订阅服务是数据服务的消费者,通过Datareader实现订阅数据的接收。

4 传感器数据分发系统实现

4.1 中间件层实现

OpenDDS是由OCI组织开发的符合OMG DDS规范的发布/订阅中间件,实现了DCPS层的主要功能和部分QoS,使用OpenDDS可以方便快速开发高效实时的数据分发系统[12]。另外,OpenDDS的源代码完全公开,便于根据需求进行改造。因此,本文通过移植ACE、TAO和OpenDDS中间件,构建了传感器数据分发软件的中间件层。

4.2 注册条件描述

在DDS规范中,发布条件和订阅条件是用主题Topic来描述的,通过对发布条件和订阅条件中各数据项的分析,本文将传感器类型作为topic的划分标准。topic的命名方案如表2所示。

表2 Topic规划表

根据表1所示传感器数据格式,DDS数据类型的IDL定义如下:

4.3 注册服务器

OpenDDS执行一种独立式的服务,叫做DCPSInfoRepo,以便发布者和订阅者以集中式发现彼此,它作为一个CORBA服务器进行实现。DCPSInfoRepo运行方式如下:

DCPSInfoRepo-ORBListenEndpoints iiop://localhost:12345-d domain_id

-ORBListenEndpoint iiop://localhost:12345 指定注册服务器监听注册信息的地址和端口。

-d domain_id指定注册服务器工作的域。

4.4 传感器代理实现

传感器代理使用发布服务实现传感器数据分发,首先创建participant实体和Publisher实体,然后Publisher实体根据发布条件创建Topic,最后创建与Topic对应的Datawriter。为简单起见,所有实体均采用默认的QoS策略。

至此生成了所有需要通过注册线程向服务器注册的实体。

4.5 用户终端代理实现

用户终端代理使用订阅服务实现传感器数据的订阅,首先创建participant实体和Subscriber实体,然后根据订阅条件创建设置Topic,最后创建与Topic对应的Datareader。订阅端各实体的实现方式与发布端类似,具体代码不再赘述。

5 程序运行示例

本文的应用情形设计如下:发布端发布两种主题,一种是目标信息主题,另一种是雷达状态主题,包括雷达开机(RADAR_OPENED)和雷达关机(RADAR_CLOSED)事件。订阅端同时订阅两种主题,并实时打印接收到的目标信息。当订阅者收到雷达关机事件时,将停止接收雷达数据。

要运行这个程序,必须先启动DCPSInfoRepo进程,运行方法见4.3节。

运行订阅者和发布者方法如下:

subscriber-DCPSConfigFile dds_tcp_conf.ini

publisher-DCPSConfigFile dds_tcp_conf.ini其中配置文件dds_tcp_conf.ini指定订阅者和发布者的注册服务器和数据传输协议等。

程序运行结果如图4所示。

图4 订阅端

6 结语

DDS标准提出了以数据为中心的设计思想和技术规范,被欧美等国大量运用于民航、国防等诸多领域,且已形成相对完善的商业产品。将DDS技术应用于传感器数据分发系统,可以很好地满足战场数据对实时性、可靠性和灵活性的要求,实现数据的按需分发,有效地减少了网络负载。目前国内DDS的相关研究和应用范围还非常有限,应加强该技术的研究,拓宽应用范围。

猜你喜欢

发布者代理服务器
新加坡新法规引争议
《汽车维修技师》诚招代理
1号异星球餐馆·不可思议的代理老板
2018年全球服务器市场将保持温和增长
《航空模型》团体代理招募
在微信朋友圈买到假货,该如何维权?
网络大V转发违法广告须担责
复仇代理乌龟君
寓言
用独立服务器的站长注意了