面向服務的體系結構解析

: 面對不斷變化的需求,越來越多的人開始關注面向服務的體系結構(SOA),SOA抽象層次高,軟件元素之間鬆散耦合,系統開放性好,這些優勢使得它成爲未來一段時間重點研究方向。作者從自身理解的角度探討了面向服務的體系結構的原理。

關鍵詞: 業務 職能 業務敏捷  服務  面向服務

 

1.      軟件工程面臨業務需求不斷變化的問題,

軟件體系結構(下稱SA)的提出主要是爲了解決在軟件日益複雜趨勢下,如何提高軟件質量的問題.SA通過高層抽象,將人們的關注點從繁雜的細節中轉移到系統的總體體系結構上來,讓分析、設計人員從整體上有效把握軟件的重要的功能及非功能屬性。SA的複用也使得軟件的複用由原來簡單的代碼複用上升到軟件分析、設計的複用,複用的層次更高,粒度更大,這無論對於提高軟件質量,還是軟件分析、設計知識的傳承來說,都是大有裨益的。

隨着人們對IT的依賴程度加深,越來越多的業務都需要通過IT系統來完成,這使得IT系統與業務系統結合越來越緊密。一方面隨着業務範圍的擴大,軟件複雜度會增高;另一方面,業務不會是一成不變的,它總是隨着市場的需要在不斷改進,現在是快魚吃慢魚的時代,誰能夠適時、快速地響應市場的變化,誰就能在市場競爭中取得優勢。這種業務的快速變化和高質量變化適應市場需要,又稱爲業務敏捷。這就對我們的IT系統也提出了需求,如何去適應業務敏捷。

傳統SA更多地關注的是如何去解決一個複雜系統,在應對業務敏捷性方面探索較少,這使得大家經常對業務需求的變化比較無措:或者拒絕變化,或者重大更改甚至重新設計。在這種情況下,一種新型的SA—SOA,面向服務的體系結構應運而生。它提出將業務提煉成服務的思想,使軟件的體系結構更開放、更靈活。

2.面向服務的體系結構

目前關於SOA的爭論還比較多,下面這個定義概括了SOA 主要思想:一種應用程序體系結構,在這種體系結構中,所有功能都定義爲獨立的服務,這些服務帶有定義明確的可調用接口,可以以定義好的順序調用這些服務來形成業務流程。

我覺得SOA不僅是一種體系結構,也是一種設計思想,它是面向對象、面向組件方法學的進一步的發展,抽象程度更高,而且關注的是系統總體結構。

面向對象以細粒度的對象爲抽象元素,面向組件以組件爲抽象元素,而面向服務是以服務爲抽象元素。服務是什麼呢?服務是自包含的,具有定義良好的功能接口。

1)服務可以獨立完成一個功能,和其他服務耦合度低。這一特性也決定了整個SOA是鬆散的、開放式結構,你可以隨意添加服務,對現有系統不會造成任何不良影響。這好似一套積木玩具,它由許多固定形狀的積木塊組成,在沒有搭成某個模型之前,積木塊之間是沒有什麼必然聯繫的,它們僅僅是“一堆”積木塊,如果你發現某種形狀少了,沒問題,再去買一些,這對於原來的積木沒有任何影響,因爲合起來後它們仍然是“一堆”積木塊,不會發生什麼化學變化變成天外飛石。但如果你原來買的不是積木塊,而是一個用膠水、釘子固定好的模型,如果你以後發現你不喜歡了,想給它加點或者去掉東西可就不是那麼容易的事了,因爲它的組件間是“強耦合”的。

2)服務用標準的與軟件實現技術無關的語言描述,服務接口的實現遵循標準的協議,與具體軟件技術(編程語言或開發平臺)無關。這一點非常重要,它使得服務提供者和服務使用者都不要關心對方使用了什麼樣的軟件技術,這樣即使以後技術進步其中有一方用另一種軟件技術,服務仍然能夠正常運行。積木塊最關心的是它的形狀,你沒錢就買木頭的,有錢就買金子的,如果你只是關心你所搭建模型的樣式,那麼什麼材料對你來說都無所謂,只要形狀合適就可。

 Java Beans 視圖

                                          1

 

這個概念基於一種架構樣式,該樣式在三個主要參與者之間定義了交互模型:服務提供者,公佈服務描述並且實現服務;服務消費者,他既可以使用統一資源標記符(URI)來直接使用服務描述,也可以在服務註冊中心來查找服務描述並且綁定和調用服務;服務代理提供和維護服務註冊中心。

3.企業級應用中的SOA

SOA本身是定位在企業級的應用上的。企業運作本身是由多個業務職能部門相互配合而成,所以一項業務的完成會涉及到多個職能部門。企業的業務也是多種多樣,在信息化初期,我們往往針對某一項業務開發IT系統,由於針對性強,所以很難爲其他業務所利用,在原業務需求發生變化時,往往要重新建立。

SOA的思想就是站在企業全局的角度將企業的每個業務職能(業務流程中的功能點)變成相應的服務,進而用IT系統實現服務,而一個業務流程就是這些服務的順序組合。由於業務職能相對來說變化比較小,所以服務比較穩定,而業務流程往往需要隨需應變,將穩定與變化隔離開,我們就能夠很好地實現業務敏捷。

 

 SOA 層

                       2 SOA參考架構

2中顯示的是一個進行SOA實施後軟件系統層次架構圖,第一、二層是IT基礎設施,主要實現基礎服務,第四、五層主要是與我們業務相關的業務程序,直接與業務模型對應,主要是實現流程編排,即根據業務流程來調用相應的服務,可以看作是業務層。由於業務流程不一樣,所以會存在多個業務系統。第三層是這個架構的核心-服務層,這一層處於業務與IT系統之間,正是這一層將業務與IT基礎設施分開,只要服務的定義不變化,那麼業務和IT可以獨立地演變。在這樣的結構下,我們做業務系統就像搭積木一樣,積木塊(服務)是已經按標準做好的了,我們按照一定的樣式選取所要的積木塊搭建一個模型(業務系統),如果我們要換成另一個樣式那麼就把原來的模型拆成積木塊重搭,我們可以捨棄(但不一定是要扔到垃圾箱,你不用別人還可以用)一些積木塊,也可以再加入一些積木塊(可能是已經做好的,也可能還沒做,如果沒做我們可以按標準再做,這並不影響原有的積木塊),如果我們積木塊設計的形狀合理,那麼它可以在很多種樣式中反覆被利用。通過這樣的做法我們就能充分體會到搭積木的快樂,而不會陷入做積木塊的痛苦中。

積木塊設計地越好,它被重用的可能性就越高,我們需要做新積木塊的可能性就越小,所以SOA方法中最關鍵也就是如何發現“好”的服務,這些服務獨立的、相對穩定的基礎服務。而服務模型的建立是以業務模型爲基礎的,所以SOA方法不僅僅強調IT系統的敏捷性,他同樣強調業務模型本身是靈活的,能夠很好適應業務敏捷性。SOA實施時要求首先要對業務進行整理、優化。

綜上所述,SOA實質是將易變的業務流程(業務)與相對穩定的業務職能(服務)分開,認爲業務是服務的組合,通過服務將IT系統與業務系統之間進行解耦,同時也實現了業務系統之間形成鬆散結構,所以它能夠更好地適應業務變化,達到快速響應的目的。

 

參考文獻:

1.Ali Arsanjani, Ph.D.  基於服務的建模和架構

2.Olaf Zimmermann  面向服務的分析與設計原理

3.毛新生等 業務敏捷:SOA的本質(《程序員》2007 6月刊)

4.梅宏,申峻嶸 軟件體系結構研究進展(《軟件學報》軟件體系結構專刊)

 1SOA 架構樣式的概念模型
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章