戴建國,梁 斌,趙慶展,郭 理,趙 欣
(石河子大學信息科學與技術學院,新疆石河子832000)
面向服務的體系架構是一種異構系統間共享信息的軟件設計方式[1],其目的是為了解決異構平臺軟件系統之間的集成問題。在國外很多大的軟件廠商如IBM、BEA等提供SOA的解決方案和中間件產品。國內的SOA應用還處在概念宣傳和試用階段[2],但很多應用SOA的需求都已出現。
SOA的首要目標是業務敏捷性,通過建設靈活的IT幫助業務快速應變[3]。其實施從軟件到企業的管理方式都會發生相應的變化。所以SOA實質是一種業務架構,是企業為了適應市場的快速變化而采用的戰略性業務架構[4],而不是能夠買來的技術,而且沒有現成的工具能夠立即生成SOA的解決方案[5]。
由于SOA的本質是抽象于具體架構之上的一種思想,而不是一種具體的架構實現,所以只有圍繞著松散耦合、粗粒度、服務位置和傳輸協議透明這些SOA的核心思想去思考和構建軟件系統,并能夠真正實現,才是實現了SOA[6]。同時,SOA一般也不是從頭構建的系統,而是通過對現有系統資源不斷整合得到。本文從一個簡單的Web系統開始,隨著需求的變化不斷重構系統的架構,并給出各個階段系統的架構方案,從而最終自然演化成為面向服務架構,并使用開源的ESB總線實現了設計方案。

兵團社會經濟信息系統最初需求是開發一個簡單的B/S結構系統,可以方便用戶查詢,十幾個表,需求較為簡單,系統總體結構如圖1所示,普通用戶客戶端和系統管理客戶端通過瀏覽器進行。系統采用了簡單的三層架構,采用jsp作為顯示層,應用層采用servlet,訪問數據庫的數據層采用jdbc連接,數據操作使用sql語句,由于sql語句與具體數據庫產品相關,所以系統與具體的數據庫產品是緊耦合的,系統架構圖如圖2所示。當前系統是一個非常普通的Web應用。
隨著開發的進行,各個子課題對于社會經濟數據庫的要求發生了變化,增加了很多數據,而且數據還有可能持續發生變化,數據訪問層頻繁發生修改,很容易出錯,需要降低各層之間緊耦合狀態,分離出服務層。系統改為采用常見的SSH(Struts+Spring+Hibernate)搭配,系統訪問模式和整體架構不發生變化,各層采用相應的開發框架,界面層采用Struts2框架,數據訪問層采用Hibernate框架,Spring作為應用框架,主要提供對象工廠和事務管理功能,以最大程度的使各層解耦,并簡化事務管理。此時系統的架構沒有變化,只是三層架構采用了相應的開發框架,增加了系統的靈活性和健壯性,具體如圖3所示。

圖3 SSH開發框架圖
在開發過程中,數據的管理方式被考慮進來,調查發現數據來源比較復雜,需要從其他地方獲取數據并進行人工核實和篩選,數據量比較大,單靠通過管理員以后臺方式管理數據很麻煩,建立數據管理客戶端軟件非常有必要,這樣系統就采用了兩種管理模式:一種是C/S客戶端管理;一種是使用瀏覽器進行后臺管理,系統演變成了B/S和C/S的混合架構模式。如圖4所示是混合模式的架構圖,其中新增了C/S結構。兩種管理模式對數據庫的訪問方式如圖5所示。

當前系統已經可以滿足訪問和維護的要求,但是存在一個問題:服務器端和客戶端軟件除了界面層和應用層不一樣,實體層(實體類、Hibernate配置文件、Hibernate映射文件)必須保持一模一樣,數據訪問層代碼也基本相同,這樣不但出現大量的代碼冗余,系統升級和維護時必須同時維護兩處相同的代碼,很不方便而且容易出錯。系統改變為將數據訪問邏輯置于服務器端,客戶端以遠程方法調用的方式進行訪問,這樣客戶端和服務器端只需要保持相同的數據訪問接口。由于客戶端和服務端都使用java開發,所以可以采用rmi技術實現[7]。系統演化成如圖6的方式。
服務器端生成服務代理,客戶端通過遠程方法調用(Rmi)服務器端的方法,這樣數據訪問邏輯只需要在服務器端生成一次,客戶端不需要相應的實體類和Hibernate配置文件,系統維護和升級都很方便。
兵團社會經濟信息系統需要為其余各個子課題提供數據服務,如農情系統,水資源監測等,而各子課題是平臺異構的,有的使用.net,有的使用vb。為了讓各子系統使用社會經濟數據,系統結構進一步發生變化,將數據的獲取以Web服務的方式發布,其余子課題獲取服務。系統演化成為如圖7所示結構。

圖6 改進后的混合架構開發架構圖
由于各個子系統之間有相關性,比如農情信息系統會需要水資源與水災害的數據和分析結果。這樣發生了子系統之間的相互調用,由于平臺異構,各子系統如果要調用對方的操作,只能以服務的方式進行,所以最終各個子課題都會發布與調用服務,既是服務的消費者也是服務的提供者。這就是點對點的Web服務集成,具體如圖8所示。
點對點的Web服務集成相當于一種“私下交易”,這種“私下交易”的缺點是服務的消費者必須知道服務提供者的位置,這樣就使得消費者與提供者之間緊耦合,服務提供者發布一項服務就需要通知所有的消費者,如果服務提供者的地點或者服務接口發生了更改,所有消費者必須改動并且重新編譯。并且,如果服務發生故障不能使用,也沒有失效備援機制和安全管理機制,整個系統缺乏對服務的統一管理。

圖7 提供Web服務的開發架構圖

圖8 點對點web服務集成
為了改變服務提供者和服務消費者的緊耦合現象,方便各子系統發布、發現和調用服務,需要一個基礎設施的支持,即企業服務總線(ESB)。ESB相當于服務中介,其職責是使消費者能夠調用供應者提供的服務[8],能夠對服務進行管理,使得服務提供者對于服務消費者透明,消費者無需知道是誰為它提供服務,當然也可以明確選擇某幾個提供者,服務提供者發生了更改無需通知消費者,消費者可以處于“幸福的無知狀態”,這樣使得服務提供者和消費者之間完全解耦。這就是面向服務架構,采用ESB后的系統架構如圖9所示。
采用ESB的好處不僅僅是提供了松耦合的架構,而且還可以提供如下功能[9]:
(1)負載均衡,如果有多個服務提供者可以對同一個服務請求提供服務,則可以根據負載均衡的原則選擇服務提供者。
(2)安全管理,提供統一的安全標準和規則。
(3)服務聚合,可以對小的服務進行聚合而成大的服務,也就是服務的編排。可以選擇聚合方式和粒度,靈活的根據適應外界的規則變化對信息系統提出的新要求。
(4)監控功能,主動觀察總線的服務性能、分析某項服務調用的高峰期、服務調用是否完整等。

圖9 面向服務的系統架構圖
SOA思想本身并沒有規定在以面向服務思想為指導的應用程序的構造過程中必須使用的實現技術。而在現實當中,使用最多的用于實現SOA的技術,莫過于Web服務。Web服務是一套開放標準,它可以指導建立分布式應用平臺,使得運行在不同操作系統和不同程序語言實現的功能模塊,能夠通過它提供的中立的接口描述,有效地進行分工協作[10]。Web服務技術和以前的分布式計算技術比較,具有更好的可靠性、可擴展性、易用性和協議開放性[11]。
系統服務的發布采用了Spring+XFire的框架創建和描述服務,以登錄操作為例,下面是描述服務的service-servlet.xml文件部分內容。

服務總線很多,開源和商業的都有很多應用,在實際項目中采用了開源的總線系統,Apache的Synapse作為項目的服務總線,Synapse采用輕量級的XML和Web服務為中心的消息模型。它本身并不創建服務,只是提供服務的注冊和路由等管理。下面是登錄服務發布的部分內容。

服務發布完畢后,在客戶端就可以編寫程序進行服務的調用。客戶端首先創建RPCServiceClient類型的對象,并初始化其擁有的Option對象類型的屬性,最后調用RPCServiceClient的invokeBlocking方法,該方法會調用服務提供者的相應方法,最終將調用結果返回。

為了不斷適應需求的變化,為異構的軟件系統提供互操作,兵團社會經濟信息系統的軟件架構最終演化為面向服務的架構。企業服務總線的建立,使得該架構為集成更多的軟件系統提供了基礎設施上的支持。各異構的子系統都可以在總線上發布或查找服務,從而實現系統集成的目標。
采用基于SOA企業應用集成方式能有效解決系統集成的問題,克服傳統集成方式耦合度高、安全性和靈活性差、集成成本過高等缺點[12],甚至完成傳統集成方式無法完成的集成問題。但SOA并不能一蹴而就,是為了集成異構系統而不斷演化的結果。通過兵團社會經濟信息系統的不斷演化從而最終實現面向服務架構,展現了SOA的實現過程,并在該過程中表現了SOA如何通過不斷降低系統之間的耦合和依賴,實現異構系統的快速集成,從而達到業務的敏捷性。
[1] 陳朋,李光耀.基于面向服務體系結構SOA的軟件開發[J].河南科技大學學報:自然科學版,2006,27(5):29-31.
[2] 常政.SOA中國企業應用現狀調查[J].程序員,2007(6):68-69.
[3] 毛新生.此SOA非彼SOA[J].程序員,2007(6):48-51.
[4] 尹紅麗,王永明.面向服務的體系結構主要實現技術比較研究[J].計算機科學,2009,36(1):282-285.
[5] David C,Tyler J.JavaWeb Services[M].New York:O’Reilly Press,2002.
[6] 王滿紅,陳榮華.SOA概念、技術與設計[M].北京:機械工業出版社,2007.
[7] 葉乃文.Java2基礎知識[M].北京:機械工業出版社,2005.
[8] 梁愛虎.SOA應用詳解[M].北京:電子工業出版社,2007.
[9] 楊彩,劉曉霞,賈松浩.基于SOAP的異構系統集成的研究與應用[J].計算機應用與軟件,2008,25(4):79-81.
[10] 倪志剛,王銘孜,黃兆勤.SOA權威指南:通過BEA Aqualogic Service Bus實現[M].北京:電子工業出版社,2008.
[11] NicolaiM J.SOA實踐指南[M].程樺,譯.北京:電子工業出版社,2008.
[12] 張海軍,史維峰,劉偉.基于SOA企業應用集成框架研究與實現[J].計算機工程與設計,2008,29(8):2085-2088.