一种可分层部署的软件架构的设计与实现

时间:2022-09-17 04:02:43

一种可分层部署的软件架构的设计与实现

摘 要:为了解决逻辑分层软件架构中存在数据共享困难和服务器负担过重的问题,提出一种可以分层部署的架构方式。该方式通过Web Service可以在不同服务器之间的进行无缝连接与通信,把逻辑上独立的软件层次部署到不同的服务器上,实现软件层次物理上独立,有效解决以上问题。

关键词:软件架构;分层部署;物理分层;Web Service;XFire

中图分类号:TP31.11 文献标识码:A 文章编号:2095-2163(2014)02-

Design and realization of layed deployment software architecture

LI Qirui , WANG Weiling

(College of Computer and Electronics Information, Guangdong University of Pectrochemical Technology, Maoming Guangdong 525000,China)

Abstract:To solve the problems of difficulty of data sharing and server overburdening in logical hierarchy architecture, a software architecture is proposed whose layers can be deployed separately in the paper. In this architecture, web service is used in seamless connectivity and communications between the severs of different layers. Logically independent layers could be deployed on different servers. So the layers could be independent physically. Application examples show that this architecture can solve the above problems effectively.

Key words:Software Architecture ; Layered Deployment ; Physical Hierarchy ; Web Service; XFire

0引 言

软件架构(Architecture)就是将整个系统分解为多个逻辑子系统,以及包或者是层,并制定这多者之间的逻辑关系和物理分布关系。软件架构是软件设计与开发中的一个重要环节,在软件开发过程中,当需求和架构确定之后,整个软件就基本上已经定型[1]。一个良好的软件架构可以提高软件的性能,并增强其健壮性,还能帮助项目管理者合理安排项目人员的角色和任务,在降低软件开发风险的同时,减少开发成本,优化整个软件设计过程[2]。

无论是C/S或是B/S架构的软件,分层均已成为企业级软件的现行标准。目前,软件通常分为客户层(客户端)、应用层(应用服务器)、数据层(数据库服务器)三层结构[3-4],但这种结构的伸缩性较差,数据表示和数据处理处于同一层次当中,难以管理和维护升级。后来,应用层得到了进一步细分,形成数据表示层、业务逻辑层和数据存取层,使软件程序的结构实现了完全划分,且各层次逻辑上相互独立,由此而显著提高了软件的性能和开发能力[5],如图1所示。

图1软件三层架构

Fig.1 Three-layer software architecture

由图1可见,这种架构方式虽然数据表示、业务逻辑和数据存取三个层次已经逻辑上分开,但物理上仍共存于单一的应用服务器中。随着软件规模的扩大,该种架构出现了应用服务器负担过重、数据共享困难和数据安全等问题,对其分析如下:

(1)软件要实现的业务算法比之前更为复杂,业务逻辑层则随之日益庞大。数据量的增大和用户数量的增加意味着访问量的上升,对数据存取也产生了更快速度和更高效率的要求。很多人性化、色彩丰富的用户交互界面技术开始在表示层中应用,这些技术将占用大量的计算机资源。上述三点导致了应用程序服务器的负担越来越大。

(2)不同应用系统之间的数据共享是信息系统软件发展的一个必然趋势。在图1的架构方式中想要实现数据共享,必须将数据库服务器公开给外部其它的软件系统。这就直接暴露了数据源,对数据安全性形成了较大的风险。

Java EE平台为分层体系架构的实现提供了良好的技术基础,因其提供了一个有效的企业应用架构解决方法以及许多可重用组件用于开发者灵活的技术选择。目前,应用最为广泛的是Struts2、 Spring 和 Hibernate(简称SSH)三大轻量级开源框架技术的整合,使用这些技术可以方便地实现软件的三层架构[6]。其中,Struts是基于MVC体系架构的Web应用程序,主要针对表示层设计,提供了标记库、输入校验和国际化等一系列强大的用户交互功能。Spring是基于IoC(Inversion of Control,IoC)和AOP(Aspect Oriented Programming,AOP)的框架,具有良好的模块化效果,能有效组织系统的各个层次。而Hibernate则使用ORM(Object/Relation Mapping,ORM)思想实现数据库操作,是优秀的数据存取工具,提供了从Java类到数据表之间的映射,可以大大减少操作数据库的工作量。仍需一提的是,XFire是新一代的Java Web 服务引擎,支持协议广泛,易于和现有成熟框架整合应用,并可轻松实现在Java EE应用中Web Service[7-8]。

本文在研究了Java EE平台下的Strust2、Spring、Hibernate和XFire(简称SSHX)四个框架技术的基础上,设计得到一种可以分层部署的软件架构,即各个层次可以分别部署在不同的服务器上。与一般的SSH不同,该架构通过Spring与XFire整合的方式实现Web Service技术,并将该技术应用于层次间的相互调用之中,使软件层次不仅在逻辑上,而且在物理上也可以相互独立,从而使以上问题得到顺利解决。

1分层部署软件架构的设计

实现数据表示层、业务逻辑层和数据存取层物理独立的关键是确保分离后各个层次之间依然能够无障碍地连接与通信。Web Service可以在这方面提供相应的技术支持。Web Service是一个平立、松耦合、自包容、且基于可编程的Web的应用程序,可使用开放的XML标准来描述、、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序[9-11]。Web Service构建于通行的 Internet 标准协议之上,通过Web 进行客户端和服务器端通信,用其实现统一数据平台的接口,可使平台配置灵活、结构简单、且易于扩展[12-14]。

基于Web Service分层部署软架构如图2所示。

图2分层部署软件架构

Fig.2 Software architecture of layered deployment

在图2中,表示层、业务逻辑层和数据存取层分别部署在不同的服务器上,各层之间可根据需要通过内网使用Web Service进行通信。客户端与表示层之间的交互不变。设计黄总增加了数据共享服务器,专门为其它应用系统提供数据共享服务,提供的访问方式也是通过Web Service来最终实现。为了更好地实现数据保护,规定数据存取层服务器可以对数据库进行读和写操作,而数据共享服务器却只能对数据库进行读操作。

经过分析可知,该架构具有以下几个特点:

(1)灵活性

分层部署模式并费固定不变的,可以根据需要灵活处理。例如,如果表示层与业务逻辑层都比较小,就没有必要分开,则可将其并在一台服务器上,只要保证层次之间的接口不变即可。又例如业务逻辑层比较庞大,即可将其细分为业务逻辑层1、业务逻辑层2,…,业务逻辑层n,规定并它们的访问接口后就可以分别部署在不同的服务器中。

(2)透明性

由于Web Service具有良好的封装性,访问者能够且仅能看到该对象提供的功能列表(接口),内部的实现细节对其来说都是透明的。因此,只要接口不变,对任何一个层次进行升级维护时, 均不会影响到其它层次。

2应用实例―大学生党员信息系统的设计与实现

2.1 使用分层部署软件架构

某高校的大学生党员信息系统是一套基于B/S架构的网络数据库应用系统,实现目标是将党建工作从基层党支部的党员基础信息维护,到高层的党委组织部对信息的审核和统计分析等一整套日常工作管理流程纳入整个信息化系统,其核心功能包括:党员基本信息维护、党员参加培训班管理、党员网上学习与测试、党员级别管理、党员奖惩信息管理、阶段性统计汇总等。

经过深入细致的需求分析后发现,系统中并不都是对原始数据的简单的查询、录入、删除和修改操作,还将涉及另外一些功能,比如随机组卷、阅卷、培训班的分配、培训时间控制、党员情况汇总等功能。这些功能则需要对录入的原始数据进行较复杂的业务逻辑处理后返回用户界面或者存入数据库,其具体实现过程往往会用到许多不同功能的类和方法,操作起来也更为复杂。另外,系统还要求用户界面使用ExtJS、JQuery、Flash等先进的页面交互技术,提高页面的美观效果。

该高校现在当前存在有学生管理信息系统、教务管理信息系统等多个信息系统,而这些系统都已经了针对数据共享的Web Service。在此基础上,党员管理信息系统将需要从学生信息系统中获得学生的姓名、班级、专业等基本信息,还需要从教务信息系统中获得学生的学习成绩信息。此外,也要提供党员的党籍信息给其它系统访问。

基于以上分析,最终采用了如图2所示分层部署的软件架构,其系统逻辑总共分为6层,分别为:客户端、Web表示层、业务逻辑层、数据存取层、数据共享层和实体数据库层。具体实现时,由于表示层和数据存取层比较简单,可共用一台服务器。而数据共享层则负责从远程系统读取数据以及提供数据给其它系统调用,即需单独设置服务器。部署后的系统整体拓扑图如图3所示。

图3 系统的整体拓扑图

Fig.3 Overall system topology

2.2 系统类设计

根据已经设计的系统架构模型,系统的程序结构中至少有三种组件需要编写,分别是:实现表示层的Action组件、实现业务逻辑层的Service组件以及实现数据存取层和数据共享层DAO组件。这三种组件之间的相互调用由Spring动态注入完成,需要应用面向对象的多态性的特点,使用接口编程实现。Action类通常从Struts框架提供的ActionSupport中继承,因为ActionSupport中已经定义了一些通用的与用户交互的功能,如输入检验等。Dao组件通常继承Sping提供的HibernateDaoSupport类,简化操作数据库的编程方法。因此,得到的系统类图如图4所示,而由于篇幅原因,部分接口和类未在图中列出。

图4 系统类图

Fig.4 System’s class diagram

在图4中,IDangyanExDao为对外提供给其它系统获取本系统共享数据的接口。而IStudentDao和IScoreDao分别属于学生信息管理系统和教务管理系统中的接口,本系统不进行实现,其实现是在IStudentServiceImpl类中由Spring与XFire共同从远程的Web Service中获取并动态注入。

2.3 Web Service的实现

2.3.1 Web Service的

Web Service的是实现分层部署的关键,通过编程来获得实现是比较麻烦的。借助XFire与Spring的结合,可以简单容易地在Java EE环境中Web Service。需要一项服务时,首先要设计完成对外公开的接口,再针对这个接口将其实现。比如数据共享层服务器有党员信息查询服务,接口为IDangyuanExDao ,实现类为IDanyuanExDaoImpl,要这个服务,即需在Spring的核心配置文件applicationContext.xml做如下配置:

其中,serviceClass属性为对外的公共接口,serviceBean为该接口的真正的实现类,需要在Spring中配置为bean的形式,这个实现类是非公开的,可起到保护核心算法的作用。

2.3.2 Web Service的调用

通过Spring与XFire的结合,不仅利于对Web Service的,同样也利于对Web Service的调用。例如,业务逻辑层服务器要调用远程数据。具体实现为:首先,业务逻辑层将数据存储层的服务接口引入到程序中,根据Java的多态特性,直接使用接口对象进行编程,接口对象的实例化交给Spring的IoC来完成。Spring容器即会根据用户的配置从数据存储服务器获得相应的实例,并完成相应的数据读取功能。这个过程需要XFire的参与,具体的配置如下:

org.ws.IStudent http://127.0.0.1:8090/services/IStudent?wsdl

其中serviceClass还是公共接口,wsdlDocumentUrl为提供服务的地址。

2.3.3 复杂数据类型的传输

当调用一个Web Service后返回的数据类型为复杂数据类型(如列表,且每一个元素都不是基本数据类型),此时如果不做特殊处理,就可能会发生XFireRuntimeException异常报警。这是因为系统无法识别用户自定义的数据类型,需要通过XXX.aegis.xml(XXX代表使用了复杂数据类型的类或者接口的名字)来告诉系统具体的数据类型,该文件与其相关联的类或者接口均在同一路径下,具体配置如下:

以上配置说明findAll方法返回的结果集中每一个元素的数据类型为org.po.Student。

3结束语

通过对软件的分层部署,把逻辑上独立的层次部署到不同的服务中,有效地减轻了部署到单一应用程序服务器的负担。通过设置数据共享服务,既可以为不同软件系统提供一种方便的数据共享方式,又可以隐藏数据库服务器,较好地保护了数据的安全。应用实例表明这种架构方式是可行的。虽然本文使用Java EE平台下的SSHX框架实现了本文提出的软件分层部署架构,但架构使用的Web Service是通用的技术标准,对类似的网络数据库应用系统提供了一个可以复用的软件架构方式。

参考文献:

[1]庄亮,王丽芳,蒋泽军等平台下基于Facade模式的软件N层架构的设计与实现[J].微电子学与计算机,2006,23(7):75-77.

[2]李传煌,王伟明,施银燕.一种UML软件架构性能预测方法及其自动化研究[J].软件学报,2013,24(7):1512-1528

[3]王嫣,张志强.基于B/S 软件分层体系结构的研究[J].煤炭技术,2012,31(10):210-211.

[4]窦文琦,孙士学.基于分层架构的Web系统框架分析[J].电脑知识与技术,2013,9(24):5551-5552.

[5]夏汶钰.基于分层技术的计算机软件开发分析[J].中国新通信,2013(22):39-40.

[6]郭广军,朱昭君,王剑波.基于SSH架构的课程作业与成绩管理系统[J].微电子学与计算机,2010,27(8):157-160.

[7]刘通,张亚男.基于Xfire的分布式Java Web Services的应用[J].长春工业大学学报(自然科学版),2008,29(2):183-187.

[8]拜文娟,马光思.基于Xfire和Axis构建Web服务的研究与实践[J].计算机技术与发展,2010,20(8):120-123.

[9]江敏.基于Web Service和RBAC的煤炭企业党务管理信息系统的设计与实现[J].煤炭技术,2013,32(7):127-129.

[10]马春燕,朱怡安,陆伟.Web服务自动化测试技术[J].计算机科学,2012,39(2):162-169.

[11]陈任,谈辉,童茵等.基于 Web Service 的企业集团综合运营管理[J].计算机应用与软件, 2012,29(1):203-204.

[12]吴文辉,肖治,庭任毅.基于Web Service 的统一检索平台设计与实现[J].计算机应用与软件, 2012,29(7):186-188.

[13]周屹,邢传军.基于Web Service的智能公交导引服务系统研究[J].小型微型计算机系统,2012,33(11):2375-2378.

[14]谢素萍,赵子奇,刘沐. Web Service在高校预算管理系统中的应用[J].武汉大学学报(理学版),2012,58(S1):175-178.

上一篇:当政治与汉语相遇 下一篇:文化创意产业化背景下的实体书店新走向