APP下载

数据分发系统的研究与设计

2012-10-08刘海燕程郁文杨健康

装甲兵工程学院学报 2012年2期
关键词:中间件应用程序客户端

刘海燕,程郁文,杨健康

(装甲兵工程学院信息工程系,北京100072)

目前,大型的信息系统正逐步向构件化、服务化的体系结构方向发展,这种体系便于软件的开发、部署和扩展,可以为应用程序提供即插即用的功能。构件化、服务化的软件迫切需要研究分布式环境下的数据分发技术。所谓数据分发,是指数据的生产者通过各种方式将数据传送到用户的过程。由于网络技术的普及,建立基于网络的数据分发服务成为数据分发的发展趋势。军队指挥信息系统是基于军事通信网的大型分布式信息系统,数据传输是战场侦察情报、指挥控制、维修保障业务软件运行的基础,因此目前基于分发服务的软件体系结构得到广泛应用,而信息分发服务也成为军事信息系统体系中平台性、支撑性软件构件。

对象管理组织(Object Management Group,OMG)为分布式实时系统制订了一个数据分发服务规范(Data Distribution Service,DDS)[1]。DDS 描述了2个层次的接口:低层的以数据为中心的发布订购层(Data Centric Publish Subscribe,DCPS),用于将数据发布者发布的信息高效准确地传送给数据订购者,是DDS规范的核心;高层的数据本地重构层(Data Local Reconstruction Layer,DLRL)允许将服务简单地集成到应用层,该层是可选的。DDS还定义了一套服务质量(Quality of Service,QoS)策略,能基于QoS进行数据的订购和分发。OpenDDS软件是OMG对DDS的DCPS层的一个开源实现。我国也制定了相关的数据共享标准——数据分发服务指南与规范[2],该标准对基于因特网的数据分发体系进行了描述,对相关的环节和内容提出了要求。在我国,近些年一些科研机构致力于数据分发服务的体系结构、实现技术的研究[3-4],取得了一定的成果。在实际应用中,有越来越多的大型软件系统开始采用基于数据分发服务中间件的软件体系结构[5-6]。

尽管目前既有开源的分发系统,如OpenDDS,又有商用的分发中间件,但可能由于分发系统太复杂,或具体应用有具体的传输环境和传输需求,因此许多系统都开发自己的分发中间件,在满足自定义的信息格式、传输质量需求的基础上,提供一定范围的通用性。为满足局域网中的分布式系统各进程间消息交流的需求,笔者参考DDS中DCPS规范的内容,根据应用系统的环境和对数据传输质量的要求,设计实现了一个基于消息的分发服务中间件。该中间件能提供进程间并发、异步、可靠、按序的消息传输功能,使上层的进程能专注于各自业务流程的实现。

1 数据分发系统结构

数据分发服务实现信息的订购、发布机制,提供用户按需订购信息、消息按需推送的机制。按消息的分发机制划分,数据分发服务中间件可以分为2大类:集中式分发系统和分布式分发系统。

1.1 集中式分发系统

在数据分发系统中存在一个分发服务器,这个服务器保存了各个节点间通信所必须的信息,如客户端标志、订购信息等。客户端应用程序通过客户端分发中间件接入分发系统,实现客户的注册、信息的订购和发布。信息实际传输可以使用点到点方式直接送达,也可以通过服务器节点转发。集中式数据分发系统的结构如图1所示。

图1 集中式数据分发系统的结构

集中式结构的优点是便于系统内各应用程序间的协调控制;缺点是存在单一故障点,一旦分发服务器瘫痪,则整个分发系统也随之瘫痪。

1.2 分布式分发系统

在数据分发系统中所有节点都是对等的,每个节点都有一个发布/订购信息的拷贝,节点的注册和信息的订购都在本地完成,由分发中间件完成信息的组播分发,以保证所有节点信息的一致性和完整性。在进行信息发布时,应用程序首先写到本地,再由分发服务中间件根据订购信息将数据分发给订购者。分布式分发系统的结构如图2所示。

图2 分布式数据分发系统的结构

2 数据分发系统InfoSubDstrSys

2.1 系统设计目标

本分发系统的目的是为一类运行在局域网中的分布式协同系统提供进程间的消息分发中间件,在方便进程间协同的基础上,使上层程序更专注于业务流程的设计。这类系统运行在局域网中,需要交流数据的进程数有数十个;进程间交流的多为一些协同和状态消息,消息长度一般为几十到几百字节;消息的传输需要有一定的可靠性和时序性;此外,各进程需要有并发和异步通信能力。为满足上述需求,笔者设计了数据分发软件InfoSubDstrSys。该分发系统采用集中式的结构,一个分发服务器独立运行,分发客户端以动态链接库的形式由上层应用程序调用;客户端与服务器间采用TCP传输协议,以消息号定义消息的类别,传输信息的格式为消息号、消息长度、消息体;采用IO端口映射技术支持多进程的并发通信;通过事件机制和回调函数技术为进程提供异步通信功能。

2.2 系统的设计与实现

数据分发系统InfoSubDstrSys由2部分组成:分发服务器InfoSubDstrSrv和客户端分发中间件InfoS-ubDstrCli。二者底层通过TCP协议实现信息的传输。

分发服务器InfoSubDstrSrv采用IO端口映射套接字技术实现多套接字的并发通信。服务器主要由3个模块组成:主控模块、连接管理模块和消息分发模块。

1)主控模块负责初始化套接字环境、线程池管理、服务器控制命令处理等任务。

2)连接管理模块负责接收客户端分发中间件的连接请求,建立并维护客户连接套接字表以及套接字相关的数据结构。

3)消息分发模块是分发服务器的核心部分,由IO端口关联的线程池中的线程执行。它监听所有通信事件,接收客户端发来的消息,对接收到的客户端消息进行解析,根据消息类型进行相应的处理。建立并维护客户的订购信息库,完成消息的订购、订购的取消,根据订购信息进行消息转发等功能。

客户端分发中间件InfoSubDstrCli主要由2部分组成:消息分发模块和应用程序接口模块。其中:消息分发模块负责监听并接收分发服务器发来的消息;应用程序接口模块则提供用户应用程序使用分发系统的API函数。

客户端分发中间件的主体是导出类CInfoSub-DistrbCli和回调函数_CallBackFun的定义。回调函数用于实现对接收消息的解析和处理,是一个全局函数,函数定义如下:

Typedef int_stdcall_CallBackFun(char*recvBuf,unsigned short recvLen)。

每个应用都要根据自己的特定需求定义自己的回调函数。

导出类CInfoSubDistrbCli的定义如下。

友元函数msgHandler负责异步接收消息和回调函数的调度,从而实现消息的推送功能。

3 基于数据分发服务的应用开发

3.1 基于InfoSubDstrSys的应用开发步骤

分发服务器InfoSubDstrSys作为一个独立的进程运行在一台主机上,处理多个不同的客户的注册、消息订购和信息的分发。

客户端分发中间件以动态链接库的形式存在,应用程序通过动态链接库提供的API接口接入分发系统。应用程序使用分发系统的一般流程如下。

1)定义回调函数,可以对不同的消息定义不同的回调函数。

2)声明客户端对象。

CInfoSubDistrbCli client;

3)注册客户端。

client.registerCLi(SrvIP,SrvPort);∥参数为分发

服务器的IP地址和端口号

4)订购消息或取消消息订购。

client.MsgSubscribe(msgno,myCallBackFun);∥订购消息,参数为消息号和回调函数

client.MsgSubscribeCancel(msgno);∥取消订购,参数为消息号

5)发布消息。

client.sendMsg(msgno,m_sendBuf,m_sendLen);∥参数为消息号、消息缓冲区和消息长度

6)客户端取消注册。

client.unRegisterCli();

其中,消息以消息号来区分,消息号是一个整数,每个消息号对应一种消息。每个客户可以订购0个或者多个消息。在订购一个消息时,需指定接收该类消息时的回调函数。不同消息的回调函数可以相同也可以不同。客户端程序在注册成功之后,可以随时订购或取消订购某种消息。

3.2 基于InfoSubDstrSys的应用开发示例

图3是一个基于InfoSubDstrSys实现的应用程序示例。界面上分别显示了分发系统的基本功能。注册按钮对应客户端的注册,订购、取消订购按钮分别对应消息的订购和取消,发送消息按钮将消息发送到分发服务器。每个客户端将收到的消息实时显示在界面上。

图3 基于分发系统的应用示例

同时运行该程序的2个实例,如图4、5所示。在图4、5中,左端的应用订购了1号消息,右端应用订购了1号和2号消息。在图4中,当右端应用发送2号消息“222”时,只有订购了2号消息的应用收到了该消息;在图5中,右端应用发送了1号消息“111”,可以看出2个应用都收到了该消息。

本示例仅演示了字符消息根据订购需求进行的并发、异步、按序的分发过程。实际上,由于TCP传输协议对消息的类型和长度并不限制,因此该分发平台可以用于任何类型、任何长度数据的分发。

图4 只有右端应用收到2号消息

图5 2个应用都收到1号消息

4 结论

该数据分发中间件已经用于某仿真系统中,为系统的多个进程提供数据交换和共享服务。由于开发者不必关心信息交换的实现细节,可以更专注于业务逻辑的开发,因而提高了开发效率。该系统的不足是应用规模受限。因为该分发系统使用了集中式结构,仅有一个服务器,所以一般只用于局域网内的应用系统中。进一步的研究应该关注如何设计多个协作的服务器,实现分布式结构的分发系统,为大规模分布式系统提供信息分发服务。

[1]OMG.Data Distribution Service for Real-time Systems Version 1.2[EB/OL].(2007-01-01)[2011-10-25].http:∥www.omg.org

[2]SDS/T 2241_2004科学数据共享工程技术标准:数据分发服务指南与规范[S].

[3]卢传富,蔡志明,夏学知.数据分发服务体系结构的研究[J].计算机与数字工程,2008,36(5):67-69.

[4]裘楷,沈栋,李娜,等.基于DCPS模型的数据分发服务DDS的研究[J].电子科技,2006(11):68-72.

[5]姚兵,蔡婷,李峻林,等.基于DDS模型的数据分发中间件的设计与实现[J].计算机工程与设计,2009,30(3):619-623.

[6]曹万华,谢蓓,吴海昕,等.基于 DDS的发布/订购中间件设计[J].计算机工程,2007,33(18):78-80.

猜你喜欢

中间件应用程序客户端
你的手机安装了多少个客户端
你的手机安装了多少个客户端
删除Win10中自带的应用程序
如何看待传统媒体新闻客户端的“断舍离”?
谷歌禁止加密货币应用程序
RFID中间件技术及其应用研究
基于Android 平台的OSGi 架构中间件的研究与应用
新华社推出新版客户端 打造移动互联新闻旗舰
云计算环境下中间件的负载均衡机制研究
三星电子将开设应用程序下载商店