摘要:針對當今企業業務敏捷性變化的需求,提出了面向服務的搭建式開發技術解決方法。重點介紹了面向服務架構的理論概念和相關特點以及面向服務的搭建式開發技術平臺的基本架構。通過在面向服務的應用構造中引入業務端搭建的方法允許業務用戶自主構造面向服務的應用,從而能夠有效地滿足業務用戶的個性化需求,以及實現對敏捷業務需求的快速響應。最后以建設武警黃金地勘信息系統為實例展示搭建平臺的使用。
關鍵詞:面向服務架構; 搭建平臺; 服務; 業務敏捷性
中圖分類號:TP39文獻標志碼:A
文章編號:1001-3695(2008)06-1717-03
隨著Internet在企業級應用上的不斷發展,軟件的規模越來越大,復雜性也越來越高,尤其是當面對Web服務時代軟件開發出現的新問題時,傳統軟件開發技術和方法越來越凸顯出不足。企業要求其信息系統快速響應各方面變化來支持自身行為的敏捷,本文把企業對信息系統的這種需求歸納并認為是企業對信息系統的敏捷性方面的需求[1]。敏捷的信息系統是提供給企業生成、發展并擴大競爭優勢的一種能力,企業需要具有敏捷性的信息系統支持其在難以預測的、持續且快速變化的競爭環境中獲得生存和發展。
面對變化的需求,軟件開發方法應以動態和靈活作為應對策略。因此,軟件開發的關鍵問題就是如何改善開發方法,使軟件開發跟上變化的需求,使開發的軟件具有更強的適應變更能力[2]。傳統軟件開發技術在Internet時代的不足以及現實中最困擾軟件開發的難題——“需求總是在改變”等問題的存在,使如何低代價、高效地構造應用系統成為信息技術研究中所面臨的重大挑戰之一。當前,應對這種挑戰的一種新趨勢是計算機專業人員專注于Internet環境下基礎設施的開發,本文把滿足及適應快速多變的業務需求的工作以簡單的資源配置的方式留給業務用戶去完成。把這種應用構造的方式稱為面向服務的搭建式開發技術。
可以這樣理解面向服務的搭建式開發技術:面向服務的搭建式開發技術是指能夠即時地組合既有的不同服務資源或者迅速地搭建出滿足用戶個性化需求的應用。相對于一般的面向服務的應用構造,本文所討論的面向服務的應用的搭建式開發技術特別強調了兩個特征,即按需和即時。其中,按需是指可以較低的代價構造面向服務的應用來滿足個性化及多變的業務需求;即時是指可以較快的速度完成面向服務的應用的搭建以及時響應用戶需求。
1面向服務的架構
1.1SOA的概念
SOA(service-oriented architecture,面向服務的架構)是一種新的面向服務架構的編程模型,號稱“下一代軟件架構”[3,4]。1996年,Gartner最早提出SOA的思想;到2002年12月,Gartner又提出了SOA是現代應用開發領域最重要的課題,并預計到2008年,SOA將成為占有絕對優勢的軟件工程實踐方法[5]。雖然不同廠商或個人對SOA有著不同的理解,但仍可以知道SOA的幾個關鍵特性:一種粗粒度、松耦合服務架構,服務之間通過簡單、精確定義接口進行通信,不涉及底層編程接口和通信模型。SOA的目標在于讓IT變得更有彈性,以更快地響應業務單位的需求[6]。本文總結后把面向服務的體系結構定義為:SOA是一種松散耦合的應用程序體系結構。在這種體系結構中,所有功能被定義為獨立的服務(service),每個服務具有明確可調用的接口(interface);服務之間互相通信,可以是簡單的數據傳遞,也可以定義好的順序來調用多個服務以進行服務組合,從而形成業務流程。在SOA體系結構中,業務功能、由底層功能組成的業務事務以及系統服務功能被構建成服務,所有的服務都是互相獨立的。外部組件只能通過服務描述來獲知服務所提供的功能,服務的具體實現方式是外部不可見的。服務只能通過接口被調用,接口定義了調用服務所必需的參數和結構的類型[7]。
1.2SOA基本結構
SOA是設計和構建松散耦合軟件解決方案的方法,它能夠以程序化的、可訪問的、軟件服務的形式公開業務功能,以使其他應用程序可以通過已發布的和可發現的接口來使用這些服務。SOA描述了服務提供者、服務請求者和服務器代理者三種角色,分別承擔了不同的任務。在這三種角色上又有三個操作:發布、查找、綁定以及它們之間的關系[8,9]。圖1展示了面向服務結構中協作支持查找、綁定和調用關系的實體。
面向服務體系結構中的角色包括以下幾部分:
a)服務請求者。它是一個應用程序、一個軟件模塊或需要一個服務的另一個服務。它發起對注冊中心中的服務的查詢,通過傳輸綁定服務并且執行服務功能。服務請求者根據接口契約來執行服務。
b)服務提供者。它是一個可通過網絡尋址的實體,接收和執行來自請求者的請求。它將自己的服務和接口契約發布到服務注冊中心,以便服務請求者可以發現和訪問該服務。
c)服務注冊中心。它是服務發現的支持者。它包含一個可用服務的存儲庫,并允許感興趣的服務請求者查找服務提供者接口。
面向服務體系結構中的每個實體都扮演著服務提供者、請求者和注冊中心這三種角色中的某一種(或多種)。面向服務體系結構中的操作包括:(a)發布。為使服務可訪問,需要發布服務描述使服務請求者可以發現和調用它。(b)發現。服務請求者定位服務,方法是查詢服務注冊中心找到滿足標準的服務。(c)綁定和調用。在檢索完服務描述之后,服務請求者繼續根據服務描述中的信息來調用服務。
除了動態服務發現和服務接口契約的定義外,面向服務體系結構還具有以下特征:服務是自包含和模塊化的;服務支持互操作性;服務是松耦合的;服務是位置透明的;服務是由組件組成的組合模塊。
1.3松耦合
服務間的松耦合是指具有中立的接口定義,沒有強制綁定到特定實現上的服務特征。簡單地說,就是服務提供者和服務使用者可以用定義良好的接口來獨立開發。服務提供者可以更改服務的接口、數據或者消息版本,而不會對服務使用者造成任何影響,從而將服務使用者與服務提供者在服務實現和服務使用方面分離開來。
服務請求者到服務提供者的綁定與服務之間的松耦合關系意味著,服務請求者不知道提供者實現的技術細節,如程序設計語言、部署平臺等。服務請求者往往通過消息調用操作,請求消息和響應——而不是通過使用API和文件格式。這個松耦合使會話一端的軟件可以在不影響另一端的情況下發生改變,前提是消息模式保持不變。在一個極端的情況下,服務提供者可以將以前基于遺留代碼(如COBOL)的實現完全用基于Java語言的新代碼取代,同時又不對服務請求者造成任何影響。這種情況是真實的,只要新代碼支持相同的消息模式。
松耦合是SOA中的關鍵概念之一,也是SOA的一個顯著特點。松耦合的優點是靈活,當組成整個應用程序的一個服務的內部結構和實現發生變化時,不影響其繼續存在。緊耦合是應用程序不同服務的接口與其功能結構是緊密相連的。但是一般來說,松耦合方式的缺點是松耦合方式效率不如緊耦合。
1.4服務粒度
服務粒度指的是服務所公開功能的范圍,它包括細粒度和粗粒度[10]。細粒度服務是那些能夠提供少量商業流程可用性的服務,如基本的數據訪問服務等。細粒度服務實現最小的功能,同時消耗并返回最小量的數據。細粒度服務可以用Web服務來實現,也可以利用基于RMI(remote method invocation).NET或者CORBA的分布式對象來實現。細粒度服務的優點是可在粒度級實施嚴格的安全和訪問策略,實現和單元測試都很簡單且相互獨立,細粒度的接口主要用于企業內部。粗粒度服務比細粒度服務實現更多的功能,并消耗不同數量的結構化數據或者消息。它們返回類似的數據或者消息,可能還含有內嵌的上下文。粗粒度服務不需要通過網絡多次調用來提供有意義的業務功能。
2搭建式開發技術
通過在面向服務的應用構造中引入搭建式開發技術的思路允許業務用戶自主地構造面向服務的應用,從而能夠有效地滿足業務用戶的個性化需求以及實現對業務敏捷性變化的快速響應。業務用戶實質上就是這樣的一類用戶,他們不是軟件專業人員(對面向服務的計算技術了解甚少,甚至不了解),但他們需要利用相應的計算機應用軟件來完成他們的任務或滿足他們的需求,并因此需要基于這些應用軟件表示他們的業務邏輯。搭建式開發技術提供一種可支持不斷演變的業務需求而具有靈活性的設計軟件系統的新思路。如此,傳統手工的、緩慢的、需要軟件人員參與的開發過程可以在一定程度上被自動化,進而可以實現將以往IT技術驅動的應用系統構造向業務驅動的應用系統構造的轉變。以此為基礎,從實現方法的角度來看,搭建式開發技術方面的相關工作主要是設計一些同時包含業務資源視圖和配置手段的基本元素,從而可以一方面讓業務人員可以直接利用它們進行業務級別的描述;另一方面可以同時得出對應的軟件層次內容,這種基本元素就成為搭建構件。
2.1搭建平臺框架
搭建式開發平臺框架是一個基于SOA的輕量級應用程序框架,它是統一負責業務邏輯處理的開發框架,相當于.NET分層結構中服務層和領域層的功能的結合。它的目的是使應用服務組件的開發完全面向service,對于特定的業務需求,可以按照面向服務的理念將其分解為互相獨立的較小的service邏輯;然后在搭建平臺框架上對這些較小的service進行開發。由于框架已經提供了service的維護及調用等機制,這些工作都不需要在特定service中出現,從而使服務組件的開發更加快速,而且組件質量和可維護性都很好。由于在搭建平臺框架中的service組件是可配置的,可以靈活地將現有的service進行重組以形成具有不同功能的服務組件,這樣,所開發的應用系統就具有了較好的松散耦合性。所有service的發布和調用都是符合Web service標準的,所以說,基于搭建平臺框架所開發的service具有平臺獨立性,并且是完全支持分布式調用的。基于搭建平臺框架的分布式應用體系結構如圖2[11]所示。
1)用戶界面組件。大部分的解決方案都需要為用戶提供與應用程序互動的方式。用戶界面的實現是通過HTML網頁、控件或任何其他呈現和格式化用戶數據的技術,以及擷取和驗證用戶所提供數據的技術而達成。2)用戶處理組件。在許多情況下,用戶都會根據可預測的處理序與系統互動。為了同步化及協調這些用戶互動作業,利用個別的用戶處理序組件驅動整個處理流程會很有效。如此一來,處理流程和狀態管理邏輯就不會采用硬式編碼的方式寫在用戶界面項目內,而相同的基本用戶互動“引擎”也可由多個用戶界面重復使用。3)業務工作流程。在用戶處理序收集了所需的數據后,這些數據便會用來執行業務處理流程。許多業務處理流程都包括多個步驟,必須以正確且經過協調的順序執行。完成這些處理流程的時間并不確定,所以必須管理所需的工作和執行這些工作所需的數據。業務工作流程會定義及協調長期執行且包括多個步驟的業務處理流程。
4)業務組件。不論業務處理流程是由單一步驟或經過協調的工作流程所組成,應用程序都可能需要業務規則及執行業務工作的組件。業務組件會實現應用程序的業務邏輯。
5)服務代理程序。當業務組件需要使用外部服務所提供的功能時,可能需要提供程序代碼以管理與該特定服務通信的語義,可能需要使用服務代理程序處理與信差服務的交談。服務代理程序會將呼叫各種服務的方法與應用程序分隔開來并提供額外的服務,如在服務所顯露的數據格式與應用程序需要的格式之間進行基本的對應。
6)服務界面。如果要將業務邏輯顯露為服務,則必須建立服務界面,以支持不同客戶所需的通信合約(信息通信、格式、通信協議、安全性、例外等),以描述服務所提供的功能和呼叫該服務所需的通信語義。
7)數據存取邏輯組件。大部分的應用程序和服務都需要在業務處理流程中存取數據存放區。將存取數據的必要邏輯分隔為不同層級的數據存取邏輯組件是有其必要性的,這樣做可以集中數據存取功能,并簡化其設定及維護工作。
8)業務項目組件。大部分的應用程序都需要在組件之間傳遞數據。
9)供安全性操作管理和通信的組件。應用程序會利用平臺的功能來提供安全性、例外管理和通信。應用程序還必須支持大范圍的操作性技術,包括系統管理、一般管理和部署等。
2.2搭建式開發技術優勢
今天,最終用戶希望坐下來就能夠直接使用應用程序,而無須花費他們大量的時間來閱讀用戶說明手冊。從現有軟件開發工具環境情況來看,這無疑增加了開發人員的工作難度。直接從應用軟件的需求出發,借助可視化的搭建技術,建立起完整應用軟件的代碼自動生成和可視化界面的自動生成等正好可以彌補這方面的不足。基于搭建式開發方式大大縮短了開發時間,節約了80%以上的開發成本,提高了60%以上的工作效率,對開發人員的要求大大降低。更重要的是讓業務用戶從關心技術、實現細節功能,轉向關心業務。采用“零編程搭建式”開發方式使用戶只要著眼于專業流程分析,而不需花更多的時間投入于開發工具的研究中[12]。搭建式開發平臺的系統底層功能庫可以提供足夠強大的功能構件,二次開發用戶基于這些功能構件就可搭建出面向專業的應用系統。實現業務用戶以“拖拽”方式描述業務需求,高速度、低成本地即時構造業務應用。搭建式開發技術本著面向業務用戶的原則,支持按需搭建與即時生成。在信息化應用建構過程中,打破了計算機專家、領域專家、業務設計者、業務執行者之間的協作屏障,以業務驅動的形式支持即時的服務構建。
搭建式開發技術提供了統一的界面風格組件,最大限度地支持用戶在開發用戶界面工程過程中的自動化,大大減少了軟件開發過程中冗余的操作,從而提高軟件開發人員的效率[13]。
3實例研究
本文以武警黃金地勘信息系統的建設為例來介紹面向服務的搭建式開發技術平臺的應用。在完成了武警黃金地勘信息系統的需求分析后,進行系統的整體和各個功能業務模塊的設計,然后從總體上進行分析,進而制訂構建系統的服務樹。接下來就可以按照設計的服務采用本文提出的搭建式開發技術平臺進行搭建。
3.1構建系統的服務樹
對于系統的每一個業務功能都是一個業務邏輯的集合,而筆者要做的是用面向服務的設計理念將系統的功能進行細化并以服務樹的形式予以呈現。下面以地勘項目管理功能模塊為例來說明服務樹的構建過程,如圖3所示,其他功能模塊的服務樹構建與此類似。
通過對以上服務樹的構建使本系統增加了業務流程的靈活性和重用性。可以將任何一個具有復雜業務邏輯的服務拆分細化使之由更加原子化的服務組合而形成服務樹,這樣的好處是使較為原子化的服務能夠成為另外服務樹的組成元素,從而自然實現了服務的重用。隨之而來的是服務組合也更加方便快捷,對于新的業務功能,只要將現有的服務進行重組,組成新的業務功能服務樹即可;而對于系統中沒有的服務,則可以予以添加,之后加入系統服務樹集合供此新業務功能以及其他的服務共同使用。
3.2搭建系統
武警黃金地勘信息系統是在搭建式技術平臺框架基礎上采用.NET技術開發的基于SOA的應用系統。搭建式技術平臺框架所提供的一些服務功能使本系統不必再考慮一些系統開發所必需的功能,如服務裝載、服務發布以及持久層管理等。這樣,就可以把精力盡量集中在系統復雜的業務邏輯的開發上,從而在系統開發的可重用性,可維護性以及開發進度等方面都有了較為可靠的保證。從圖4中可以看出,搭建平臺為系統的開發提供了工作流、GIS和用于界面組織的表單工具。事實上,使用集成了這些技術的搭建平臺來開發地勘系統是非常快速簡單的過程。
4結束語
使用面向服務的搭建式開發技術,使搭積木式的組裝軟件的夢想得以實現,軟件的開發和維護變得簡單,客戶可以隨時獲取適應商業環境變化和IT技術變化的信息化方案,真正實現隨需應變。軟件生產將通過面向服務的構件搭建的方式實現,從而實現了軟件的有效復用,避免從代碼級做起的重復開發帶來的低效率和低質量。本文在基于SOA的搭建技術方面進行了一定的探索,對于SOA的軟件設計理念的應用和發展具有重要的指導意義。
參考文獻:
[1]張志亮.面向敏捷企業的軟件體系結構研究:AMBA的設計與實現[D].廣州:中山大學,2004.
[2]劉紹華.面向服務協作的模型驅動敏捷開發技術研究[D].北京:中國科學院軟件研究所,2006.
[3]ZIMMERMANN O,KROGDAHL P,GEE C. An interdisciplinary modeling approach for SOA projects[EB/OL].(2004-06-02).http://www.ibm.com/developer-works/library/ws-soadl/?ca=dnt-522.
[4]NEWCOMER E,LOMOW G.Understanding SOA with Web services[M].[S.l.]:Addison Wesley Professional, 2004:122-130.
[5]朱振杰.SOA的關鍵技術的研究與應用實現[D].成都:電子科技大學,2006.
[6]王偉,趙雁南,徐華,等.基于面向服務架構的分布式開放控制系統[J].高技術通訊,2007,17(1):1-5.
[7]剛冬梅.面向服務的綜合信息服務系統的設計與實現[D].北京:北京工業大學,2004.
[8]張霞.地理信息服務組合與空間分析服務研究[D].武漢:武漢大學,2004.
[9]張毓鯤.支持面向服務體系結構(SOA)的中間件平臺研究與實現[D].上海:華東師范大學,2006.
[10]王兵.基于面向服務架構的應用系統開發與集成研究[D].成都:四川大學,2005.
[11]張大明.面向服務的企業分布式應用體系結構研究[D].阜新:遼寧工程技術大學,2005.
[12]FAYAD M, SCHMIDT D.Object-oriented application frameworks[J].Communications of the ACM,1997,40(10):32-38.
[13]徐龍杰.基于模型的用戶界面代碼自動生成[D].濟南:山東大學,2004.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文