欧阳军 蔡志明 王希敏
(海军工程大学电子工程学院 武汉 430033)
随着Internet技术的广泛应用和计算机技术的飞速发展,各种应用系统的体系结构呈现出以网络为中心的趋势,这对通信的实时性、动态灵活性提出了更高要求,同时要求分布式系统各参与者间采用一种具有松散耦合特性和QoS(Quality of Service)支持的灵活通信模型和交互机制。因此需一种能为实时系统应用开发者提供高级抽象接口的同时还能有效合理地控制部署实时系统所需的QoS策略的系统要来满足分布式实时应用需求。
在 CORBA[1]基础上制定的 DDS[2](Data Distribution Service)数据分发服务规范解决了分布式实时系统“在正确的时间、正确的位置获取正确的数据”的需求,该规范描述了分布式系统中数据发布、传递和接收的接口和行为,定义了以数据为中心的发布-订阅(Data Centric Publish Subscriber,DCPS)机制,提供了一个与平台无关的数据模型。而DDS信息分发中间件是一种轻便的、能够提供实时信息传送的中间件技术。目前,成熟的DDS中间件产品有多种,其中由PrismTech公司开发实现的OpenSplice DDS,实现了完整的DDS规范(包括DCPS和DLRL)。针对分布式系统的需求,本文将着重对OpenSplice DDS中间件的实时和吞吐性能进行第三方测试。
OpenSplice DDS独立于操作系统和编程语言,极大地方便了不同系统之间的通讯。系统设计者通过可扩展的传输框架结构连接多个物理端点。传输方式包括以太网络、共享内存或其他连接方式。具有多种服务质量策略(QoS)参数可供调整,方便设计者调整其应用程序达到性能和资源使用的最佳组合。OpenSplice DDS是位于网络协议栈最上层的软件,它屏蔽底层网络代码,代之以通用的、基于标准的应用程序接口(API)。通过API提供易于理解的基于发布/订阅的通讯模式。这种模式定义了两种基本的角色:
·发布者:创建数据,给数据命名(称为主题Topic),并将数据分发给感兴趣的订阅者;
·订阅者:注册感兴趣的主题,并在主题数据有变化时接收数据。
任意一个节点可以成为发布者、订阅者或两者皆是,并可拥有多个主题。DDS处理所有的网络输入输出,管理可靠和透明的传输:消息寻址、数据组合和分散、流控制、重试等等。所有这些都不需要应用程序干预,大大降低了用户的工作量,用户可以把精力花在应用程序的设计等。
OpenSplice DDS为设计者提供了运行平台和DDS开发调试工具[3],前者用于设计者编程实现分布式系统的通讯,后者用于调试分布式通讯中出现的问题,这些工具及其所具有的功能分别如下:
·IDL Preprocessor[4]:产生类型指定的主题,类型指定的数据写入者和读取者。
·OpenSplice Tuner[5]:用于检测和控制 DDS域。
·OpenSplice Configurator:可简化服务配置过程。
·OpenSplice DDS Power Tools[6]:为设计者提供了操作简便的、可动态图形化建模的环境。
OpenSplice DDS实现了DDS规范的两层,分别是数据本地重构层DLRL[7]和以数据为中心的发布-订阅层 DCPS[8]。DLRL层将 DCPS层提供的服务进行了抽象,在DLRL层建立了与底层服务的映射关系,DCPS层则是DDS的核心和基础,提供了通信的基本服务。
DCPS层建立了一个全局数据空间的概念,发布者和订阅者在该全局空间中分别发布和订阅自己需要的数据类型,通过中间件处理后,再进行数据传送。DCPS层将用户对资源的需求情况和资源的可用情况都转化为服务质量QoS参数。
每个发布者都有一个与之关联的数据写入者。当数据通过适当的数据写入者与发布者通信时,发布者负责发布数据写入者描述的数据类型的数据(发布者将根据它自己的QoS来完成,或根据相应数据写入者的QoS)。当发布者与数据写入者关联时就形成了一个发布。
订阅者负责对发布的数据进行接收并使数据能被接收应用程序(根据订阅者的QoS)所使用。它能接收并分发不同类型的数据。为了访问被接收到的数据,应用程序必须使用和订阅者相关联的数据阅读者。当订阅者与数据阅读者关联后就形成了订阅。
订阅获取信息有两种模式:异步方式和同步方式。异步模式下,DDS提供监听(Listener)接口,当数据发布或状态改变时,中间件通知Listener接口,Listener通过相应的回调(callback)获取信息。同步模式下,应用调用 WaitSet阻塞调用线程,一旦与WaitSet关联的条件(如readcondition、querycondition、statuscondition、guardcondition)之一被满足时停止阻塞,应用程序就可通过数据读取者获取最新的数据信息。
主题用于联系发布和订阅。发布方在中间件上发布一个主题后,订阅方根据主题来查阅发布方发布的信息。中间件负责检查发布方发布的主题是否满足订阅方的要求,并检查其QoS策略是否兼容。订阅方对相关服务质量策略指定一个申请值,而发布方则对该服务质量策略指定一个供应值,系统确定发布方的供应值和订阅方的申请值是否一致,如果双方QoS策略一致,则通信正常建立;如果不一致,则系统服务不会在这两个实体对象之间建立通信,并会通知发送方和接收方。
开发OpenSplice DDS应用有几个主要步骤:从Prismtech公司下载评估版的相关软件;安装OpenSplice DDS和Power Tools;运行守护程序,通过Power Tools设计发布/订阅应用程序。
Power Tools为设计者提供了便于操作、可图形化建模的环境,该工具具有开发指导、集成简单、实时检查错误、自动连接生成代码的功能。
利用Power Tools进行应用开发的具体步骤如下:
s1:打开Create an OpenSplice Project向导;
s2:在Project Name文本框内输入工程名,可用默认路径也可自定义路径,再点击Finish;
s3:添加DDS应用所需的DDS实体,Power Tools组件和资源;
s4:设置DDS实体的属性和所需的QoS策略值;
s5:创建Diagram组件,通过Diagram Editor可创建新的DDS实体并可将相应的DDS实体连接起来,进行图形化建模;
s6:对建立好的OpenSplice工程产生DDS源代码;
s7:使用相应的编译器对应用进行编译,如VS2005、VS2008等。
Power Tools为初学者提供教学用开发示例:聊天室应用[9],并介绍了具体的操作步骤和源代码,如图1所示。
图1 聊天室应用示例
对源代码进行编译后,运行效果如图2所示。
图2 聊天室运行效果图
基于OpenSplice DDS的发布/订阅系统性能无法通过理论计算得到,因此需实验测量,才能验证系统性能是否满足应用需求。
选取端到端时延和吞吐量这两个性能指标进行测试[10],时延构成通常为处理时延、传输时延、传播时延和排队时延等,实际为应用层时延;吞吐量亦为应用层的吞吐量。
DDS的点到点传播特性决定了网络拓扑结构的简单性,只需在网络上的两台计算机就可建立发布订阅系统,因此实验可在两台计算机上完成,计算机配置如表1所示。
表1 测试环境软硬件配置
本文采用单端计时的方法测试往返时延,取往返时延值的一半为端到端时延值。采用的测试模型如图3,每一端既是发布者又是订阅者,订阅者端采用WaitSet阻塞方式获取发布的数据信息,假设两端分别为A和B,测试的过程如下:
图3 端到端往返时延测试模型
B端先作为订阅者被阻塞,等待接收事件,A端作为发布者发布事件,B先于A运行,即事件接收在事件发送之前。当A发送完毕一个信息,立即转换为订阅者并阻塞;同时B接收完毕一个事件,立即转换为发布者,并发送事件。在B发送事件前,A已经被阻塞并准备接收事件,因此同样B发送事件后,A将接收到事件。这样,相当于同样的发布/订阅事件发生两次,端到端的时延计算公式为:
吞吐量采用订阅者端计时的方式,测试模型如图4所示。一端为发布者端,另一端为订阅者端,订阅者端采用WaitSet阻塞方式获取事件,发布者端不断发布事件,订阅者端从接收事件时开始计时,直到接收10000次事件后停止计时。这样,吞吐量计算公式为:
Buffer为事件大小,count为计数次数。
图4 吞吐量测试模型
图5 端到端时延
图6 不同事件大小下的吞吐量
时延测试时事件大小固定为16384B,共进行10个批次,每批次事件被往返发送10000次,测试结果包括平均值、最大值和最小值。如图5所示,平均值在4000μs附近摆动,最大值为18924.5μs,最小值为1840μs。
吞吐量测试时按照事件大小分别进行测量:128B,256B,512B,1024B,4096B,8192B,16384B,测试结果如图6所示,可见吞吐量随着事件的增大呈近似线性增加趋势。
OpenSplice DDS是DDS规范的一个实现,采用发布/订阅通信机制,建立全局数据空间,根据主题进行点对点数据传送,有效地减少了不必要的网络流量,通过提供应用级QoS,使用户对发布/订阅行为可控、可见,并且具有应用规定语义下的可靠性。本文通过实例对实时和吞吐性能进行了测试,今后的工作是深入研究其提供的QoS策略及DLRL层,并逐步应用到分布式实时嵌入式系统(DRE)中。
[1]OMG.Real-time CORBA Specification[R].Version1.2,Jan.2005
[2]OMG.Data Distribution Service for Real-time Systems Specification[R].Version1.1,Nov.2005
[3]Prismtech.OpenSplice DDS Version 5.x Getting Started Guide[R].Doc Issue 39,8October 2010:5~6
[4]Prismtech.OpenSplice DDS Version 5.x IDL Pre-processor Guide[R].Doc Issue 22,25October 2010
[5]Prismtech.OpenSplice DDS Version 5.x Tuner Guide[R].Doc Issue 21,11May 2010
[6]Prismtech.OpenSplice DDS Version 2.2DDS Power Tools[R].Doc Issue 38,22September 2009:71~94
[7]Prismtech.OpenSplice DDS Version 5.x DLRL Code Generator Guide[R].Doc Issue 14,11May 2010
[8]Prismtech.OpenSplice DDS Version 5.x C Reference Guide[R].Doc Issue 30,6January 2011
[9]Prismtech.OpenSplice DDS Version 5.x C Tutorial Guide[R].Doc Issue 23,11May 2010
[10]胡钰铣,王希敏.基于实时CORBA与DDS的发布/订阅系统的设计与实现[D].武汉:海军工程大学硕士学位论文,2007:78~87