软件总线体系结构的研究与应用*
2012-04-17李经松陈朝晖
李经松,陈朝晖
(北京控制工程研究所,北京 100190)
随着软件系统规模和复杂性的不断增加,系统总体结构设计的重要性已远远超过特定算法和数据结构的选择,良好的体系结构是保证系统成功的关键.体系结构的不同开发模式相继推出,基于软件总线的开发与集成框架显示出强大的活力,文献[1-2]中介绍软件总线体系结构的设计方式,软件总线的结构模型的建立.软件总线思想很早以前就已经存在,如美国Brown大学于1990年开发的FIELD环境[3],它作为一种工具集成的方式,通过消息服务器接收和发送消息实现工具间的通信,完成工具的集成,FIELD可以看作是一种面向消息的软件总线模型.“软件总线(software bus)”的概念最早由美国Maryland大学的Purtilo和Snodgrass于1994年在一篇论文中提出[4],阐述了一种软件总线原型POLYLITH,POLYLITH能够提供分布式环境下异构构件的集成.
本文对软件总线体系结构进行研究,采用双总线结构设计一种轻型软件总线,使其成为单机软件系统开发的支撑架构.
1 软件总线体系结构
正如硬件系统的复杂化使工业生产不堪重负而导致总线结构兴起,软件开发也遵循总线的结构,产生了软件总线.软件总线并非完全是硬件总线的虚拟和映射,它主要是借鉴硬件总线的思想来实现构件的组合集成:通过适配器将构件挂接到总线上,实现构件的“即插即用”.
1.1 软件总线结构模型
所谓软件总线,就是所有的功能构件以相同的方式连接在一个用来相互通信的结构性部件上,这个结构性部件就是软件总线.软件总线源于分布式异构环境的搭建所提出的,软件复用、构件化以及面向对象技术的发展促进了它的形成.软件总线的思想也同样适用于单机软件系统的开发[5].
软件总线结构模型如图1所示.其中,复合构件也可以通过局部软件总线连接而成,软件总线为整个系统和各个层次的构件提供了统一的集成机制.
图1 软件总线结构模型Fig.1 Software bus architecture model
1.2 软件总线结构分析
本文所讨论的软件总线是基于消息的发布/订阅机制[6],总线控制与构件间交互都是通过消息传输实现的.软件总线作为软件系统中各个构件的连接组织平台,负责系统内消息的订阅、接收、传递、转换工作.软件总线为构件提供透明的服务,使遵循总线接口规范的构件能够“即插即用”.
软件总线结构为构件集成的基础架构,基于软件总线的软件系统的组成描述如下[7]:
软件系统由3部分组成:软件总线结构、功能构件以及连接关系.其中软件总线结构作为系统创建的框架,主要包含3部分:总线管理器、总线(此处的总线是指软件总线结构中的负责通信的模块)、以及总线适配器.总线管理器主要负责启动总线;加载、卸载构件,并对加载的构件进行登记;为构件创建适配器,挂起、重启、注销适配器(在图1中,总线管理器隐含在软件总线模块中).总线负责登记构件对消息的订阅,接收构件的发布,根据订阅登记表转发消息.总线适配器负责构件与总线的连接工作,作为构件与外界环境交互的“代理”.软件系统中的连接关系,是指系统中特定模块间的交互关系,整个系统的所有连接关系通过接口函数调用和线程间消息传递来实现.总线管理器、总线、总线适配器三者与构件的交互关系如图2所示.
图2 软件总线结构模型交互图Fig.2 Interaction relationship of software bus configuration components
2 轻量级软件总线体系结构的设计
传统的软件总线,应用于网络环境,其功能的实现需要借助如下繁琐的功能:容错处理功能、负载平衡功能、事务处理功能、安全管理功能、缓冲池功能等.将软件总线应用于单机软件系统的开发,可以避免以上繁琐功能的实现.
本文所设计的轻量级软件总线,作为单机模式下软件系统开发的基础架构.对满足总线接口规范的构件,总线管理器根据构件接口描述信息配置生成适配器,实现构件的“即插即用”.轻量级软件总线采用消息的“发布/订阅”机制降低构件间耦合性,增强系统的灵活可扩展性;通过改进总线结构,基于双总线的拓扑结构提高所开发软件系统的实时响应和数据快速处理能力.软件总线之所以称之为总线,必须具备两个条件:1)具有一组总线协议标准以及接口规范;2)实现构件的“即插即用”.所以,轻量级软件总线的设计必须遵循这两个条件.
2.1 双总线结构
将传统软件总线模型直接引入到单机平台使用,难以有效支持领域特性,不能很好满足特定的业务需求,如系统对实时性和高效率的要求.为使软件总线适用于单机平台软件的设计,本文从软件总线拓扑结构角度出发对其进行改进,引入双总线结构[8-9].文献[8-9]中的双总线结构是在分布式环境下将原有的一条总线划分为两条总线,目的在于将监控数据和业务数据分开传输,提高数据批量处理能力;同时,通过冗余提高分布式环境下的可靠性.本文所设计双总线结构,将单机环境下的软件系统中的管理控制和业务数据分开来,分别用一条总线来传输——管理控制总线(MCBUS)和业务交互总线(BIBUS).适配器也相应划分为控制端(MC)和业务端(BI)两个部分.双总线结构如图3所示.
图3 软件总线双总线结构图Fig.3 Dual-bus based software bus topology
两条总线具有不同的功能目的——管理控制总线为具有实时响应能力的传输通道,能够提高软件系统的控制实时性;业务交互总线为交互信息传输的通道,支持构件间数据的直接传输,有利于软件系统中批量数据的快速传输.
管理控制信息与业务交互信息虽同属于消息范畴,但具有不同的表现形式,使用“通知”作为管理控制信息的载体,使用“消息”作为业务交互信息的载体.管理控制信息:一般指控制命令、构件状态等,不包含数据部分,依据情况响应,选取MCBUS,采用消息发布/订阅方式实现准同步传输.业务交互信息:主要是指构件间交互的数据,选取BIBUS,采用改进的消息发布/订阅方式实现准异步传输.通知与消息的格式定义如下:
(1)通知格式:
通知格式包含6个域.通知名与通知号都是作为通知的唯一性标识;通知发布者域存放发送通知的适配器线程的ID;命令/状态域表示通知是命令还是状态,命令字域和状态字域分别存储命令编号和状态编号.命令形式的通知分为需要响应和不响应两种,需要响应命令可以用通知或消息进行响应.如果命令需要响应,通知发布者域用来告诉命令响应者发送方的地址,使响应直接由响应者返回到发送方,提高响应速度,实现准同步.
(2)消息格式:
消息格式包含5个域.消息名与消息号都是作为消息的唯一性标识;消息发布者域存放发布消息的适配器线程的ID;消息订阅者域存放订阅消息的适配器线程的ID;消息体域用来存放指向消息体结构的指针.
消息分为两种:实时性消息和非实时性消息,实时性消息需要尽快的发送出去,到达订阅消息的地方;非实时性消息,对时间要求不高,所以可以“延缓-缓存发送”,一段时间后根据消息号一起发布,这样能够提高批量传输能力.采用消息“发布/订阅”机制的准异步形式,在不提高构件间耦合性的前提下,能够在构件间建立一条“虚拟链路”.
2.2 构件模型设计
轻量级软件总线的构件模型借鉴COM的构件模型标准[5,10],构件模型中接口部分设计支持3个接口:IMyUnknown、IControl、IBusiness,IControl 与IBusiness继承IMyUnknown接口.其中IMyUnknown类似于COM标准中的IUnknown接口,接口函数QueryInterface提供对构件所有接口的询问,获取接口指针;IControl,包含5个接口函数,主要负责构件与适配器控制端的交互工作;IBusiness,包含3个接口函数,主要负责构件与适配器业务端的交互工作.构件接口设计如下所示:
在体系结构设计层次上,构件通过接口定义了同外界的信息传递和承担的系统责任,构件接口代表了构件同环境的全部交互内容,也是唯一的交互途径.构件在加载到软件总线时,总线管理模块通过IMyUnknown接口的QueryInterface函数获取到构件的IControl和IBusiness接口指针,并将这两个指针传递给构件对应的适配器.
为每个构件定义一个用XML描述的接口文件,接口文件中描述构件包含的接口以及发布、订阅的通知和消息.XML以其严格的语法要求,良好的可扩展性和通用性,成为一种很好的构件接口描述语言.当构件请求加载时,总线管理器运用DOM技术对接口描述文件进行解析,解析出的接口信息,用来配置完善相应的适配器.接口描述如表1所示.如表1中,Component作为根元素,包含有两个固定的子元素:IControl和IBusiness.IControl元素包含的是构件与外界交互的所有通知,不论订阅还是发布;IBusiness元素包含的是构件与外界交互的所有消息.
构件模型的设计将构件接口与功能实现分开来,每个构件都支持3个接口(IControl、IBusiness以及 IMyUnknown),构件通过 IControl、IBusiness 两个接口与适配器进行交互,适配器作为构件的代理与软件总线交互.构件的功能是由内部定义的
私有功能函数实现的,构件通过接口函数来接收、发布通知和消息,最终实现与外界环境的交互.面向对象设计中,将构件设计为一个构件类形式,构件类的定义模式如下所示:
轻量级软件总线体系结构的设计通过改进传统软件总线结构与功能,使其更适合单机平台软件系统的开发,有效地降低软件系统的集成难度,提高系统的灵活可扩展性,提高软件总线中构件间的交互效率.
表1 构件接口XML描述Tab.1 Component interface description using XML
3 软件总线的应用
本文通过实现一个基于轻量级软件总线的模拟银行服务排队系统,验证轻量级软件总线作为单机软件系统的搭建架构具有可行性.
现有的银行服务排队系统根据客户到达的先后顺序为客户分配序号,银行职员依序号为客户提供服务.系统的调度是基于公平竞争的先来先服务的策略,这种策略虽然对每个客人来说是公平的,但不能满足一些对服务时间具有特殊要求的客人.基于这点,对这一系统进行改造,使它既能体现公平竞争性,又能满足特殊要求.
改进的客户服务排队系统为客户分配了一个带有优先级参数的序号组,其表示为一个二元组<S,T>,S表示分配的序号,T依客户具有的优先级(数字越大优先级越小)而定.对于普通客户来说,没有优先级别,T设置为常数0,其得到服务的顺序根据S大小确定,先来先服务.对具有优先级别的客户,T为其优先级值的大小,可以递减至0,其得到服务的规则是当T的值减到0后,若当前银行职员空闲,则其直接得到服务;如果银行职员非空闲,则等当前客户服务完后直接得到服务;如果同时有几个客户的T值为0,则比较S的值,小者先得到服务.系统需要定义4个功能模块:
(1)Scheduler,序号调度模块.接收新生成的序号,当有服务窗口空闲时依据调度算法使满足条件的客户获得服务.
(2)Ticket_Creator,序号产生模块.当有客户到来时,根据客户是否具有优先级别来产生不同的二元组<S,T>的序号,并将序号发送给Scheduler.
(3)Service,服务窗口模块.为客户提供服务,当前服务结束后,向Scheduler发送空闲通知.Service模块可以有多个.
(4)UI,用户接口模块.用来模拟客户随机时间的到来,并为具有优先级别的客户提供优先级,普通客户不提供优先级.
根据第2节构件模型的设计规范,上面4个功能模块可以定义为符合轻量级软件总线接口规范的构件,获得总线的支持.将4个构件加载到软件总线上即可实现一个模拟银行服务排队系统,构件间通过通知和消息进行交互,完成功能模拟.构件间的通知与消息定义如表2所示.
表2 构件间交互的通知与消息Tab.2 Notification and message between components
模拟银行服务排队系统基于轻量级软件总线,采用双总线结构搭建,其结构如图4所示:
如图4所示,服务排队系统在运行时,4个功能构件通过各自的适配器挂接到双总线上,进行命令交互以及数据传递,其对应的运行流程,如图5所示.
最初验证系统仅仅包含上面所述的4个功能构件,其中只有一个服务构件Service,之后,为了提高银行的服务速度,需要另外再添加一个Service构件,这时基于软件总线体系结构凸显了灵活性以及可扩展性的优势,仅仅在系统的配置文件中添加新增的构件项即可,不需要对软件总线及其他构件进行更改.
模拟银行服务排队系统的成功搭建与顺利运行表明:所设计的轻量级软件总线体系结构可以作为一个软件系统开发的基础架构来使用,服务于面向构件技术的软件系统,使系统结构清晰,实现构件的“即插即用”.
4 结论
软件总线体系结构易于实现复杂软件系统的定制和集成,具有灵活扩展性.将软件总线的使用范围由分布式环境延伸到单机平台,实现基于软件总线技术的单机系统的创建.本文设计一种轻量级软件总线体系结构,采用双总线结构,有效满足单机系统对构件交互实时性和高效率的要求.
轻量级软件总线体系结构作为一种通用的软件系统架构,适用于单机软件系统的体系结构设计,能够降低系统的开发难度,提高系统的搭建效率和灵活扩展能力.
[1] 孙志安,窦强.软件总线:体系结构分析与设计[J].指挥控制与仿真,2009,31(2):77-80 Sun Z Z,Dou Q.Software-bus:analyzes and design of architecture[J]. Command Control & Simulation,2009,31(2):77-80
[2] 张世琨,王立福,杨芙清.基于层次消息总线的软件体系结构风格[J].中国科学(E辑),2002,32(3):393-400 Zhang S S,Wang L F,Yang F Q.Hierarchical message bus-based software architecture style[J].Science in China(Series E),2002,32(3):393-400
[3] Reiss S P.Connecting tools using message passing in the Field environment[J].IEEE Software,1990(7):57-66
[4] Purtilo J M.The polylith software bus[J].ACM,1994,16(1):151-174
[5] 刘义才.基于软件总线技术的嵌入式集成开发平台[D].成都:电子科技大学,2006 Liu Y C.Embedded integrated development environment based on software bus technology[D].Chengdu:UEST of China,2006
[6] 詹先银.基于发布/订阅的消息中间件技术及其应用[D].西安:西安电子科技大学,2005 Zhan X Y.Public/subscribe-based message oriented middleware technology and application[D].Xi’an:Xi’an Electronic and Science University,2005
[7] 雷剑.嵌入式系统仿真开发平台的体系结构研究[D].成都:电子科技大学,2004 Lei J.Architecture research of simulation development platform of embedded system[D].Chengdu:UEST of China,2004
[8] 周宝,杜承烈.一种内嵌软件传感器的双软总线体系结构研究[J].计算机测量与控制,2008,16(11):1766-1769 Zhou B,Du C L.Research on a soft dual-bus architecture with software sensor embedded[J].Computer Measurement& Control,2008,16(11):1766-1769
[9] Du C L,Li G.A Software dual-bus architecture suitable for distributed real-time embedded system[C].2008 International Conference on Computer Science and Software Engineering,Wuhan China,2008
[10] 潘爱民.COM原理与应用[M].北京:清华大学出版社,1999:21-54 Pan A M.COM theory and application[M].Beijing:Tsinghua University Press,1999:21-54