李啟銳 王尉玲
摘 要:為了解決邏輯分層軟件架構中存在數據共享困難和服務器負擔過重的問題,提出一種可以分層部署的架構方式。該方式通過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 Systems 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的參與,具體的配置如下:
其中serviceClass還是公共接口,wsdlDocumentUrl為提供服務的地址。
2.3.3 復雜數據類型的傳輸
當調用一個Web Service后返回的數據類型為復雜數據類型(如列表,且每一個元素都不是基本數據類型),此時如果不做特殊處理,就可能會發生XFireRuntimeException異常報警。這是因為系統無法識別用戶自定義的數據類型,需要通過XXX.aegis.xml(XXX代表使用了復雜數據類型的類或者接口的名字)來告訴系統具體的數據類型,該文件與其相關聯的類或者接口均在同一路徑下,具體配置如下:
以上配置說明findAll方法返回的結果集中每一個元素的數據類型為org.po.Student。
3結束語
通過對軟件的分層部署,把邏輯上獨立的層次部署到不同的服務中,有效地減輕了部署到單一應用程序服務器的負擔。通過設置數據共享服務,既可以為不同軟件系統提供一種方便的數據共享方式,又可以隱藏數據庫服務器,較好地保護了數據的安全。應用實例表明這種架構方式是可行的。雖然本文使用Java EE平臺下的SSHX框架實現了本文提出的軟件分層部署架構,但架構使用的Web Service是通用的技術標準,對類似的網絡數據庫應用系統提供了一個可以復用的軟件架構方式。
參考文獻:
[1]莊亮,王麗芳,蔣澤軍等..Net平臺下基于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.