天天看點

SOA與Web服務(二)

雖然Web服務不是實作SOA的惟一形式,但是毫無疑問,它是最成功、最流行的形式。它們是體系結構與實作的關系,好比HTTP是一種标準,而IIS或者Apache是實作了這個協定的軟體一樣。

從面向對象、面向元件到SOA

曆史總是呈螺旋狀前進,在開發領域也不例外:從最開始的面向機器的開發,到面向過程的開發,到面向對象的開發,到面向元件的開發,再到現在要談的SOA。這些技術之間是繼承并發展的關系。

是什麼促使它們按照這種方向發展呢?其一是更加面向人,而不是機器,采用更加類似人處理事物時所采用的方式,簡單地說是友好性;其次是更加開放,而不是專用;第三是在軟體系統中各個子產品耦合度更加松散,而不是更緊密。

從面向機器到面向過程與面向對象,最大程度地展現了面向人的思維方式的特點。程式員得以在問題域求解問題本身,而不是在機器域求解這個問題。這使得開發人員可以在更高的抽象級别上考慮問題,進而解決複雜的問題。面向元件本身并不是新技術,隻不過其發展受到影響的一個重要原因是對象的粒度太細,不能提供其最初承諾的重用性,是以開發人員在内部内聚一些更細粒度的對象來提供定義良好的功能,以此來提高可重用性。

在元件技術都沒有被廣大的程式員吸收消化的情況下,為什麼還要轉到面向服務呢?這就涉及到後面的兩個因素。各種現存元件系統并不是開放的,互相之間不能無縫地調用,而且這種轉換效率低下,各種轉換方式也是專用的,各個組織有自己不同的方案。從本質上講,SOA的一個重要方面是要解決異構性,然後是更松散的耦合度。這将帶來更大的靈活性和适應性,适應動态變化的應用場景。

“服務是将元件描述成提供相關服務的實體黑盒封裝的可執行代碼單元。它的服務隻能通過一緻的已釋出接口(包括互動标準)進行通路。元件必須能夠連接配接到其他元件(通過通信接口)以構成一個更大的元件。服務通常實作為粗粒度的可發現的軟體實體,它作為單個執行個體存在,并且通過松散耦合的基于消息通信模型來與應用程式和其他服務互動。

開發者眼中的SOA

要了解一種新的技術,人們總會問兩個問題:“組成這些模型的各個部分是什麼?這些部分之間是怎樣互動的?”。我們可以用分層模型來幫助讀者了解。在分層模型中,模型的各部分以層來表述,而各部分的關系則以下層為上層提供的接口來表述,層層抽象。

圖1是一種被廣泛認可的體系結構。

SOA與Web服務(二)

左邊各層代表功能結構。其中:

● 傳輸(Transport)是一種機制,用于将來自服務使用者的服務請求傳送給服務提供者,并且将來自服務提供者的響應傳送給服務使用者。它隻是傳輸消息的機制。

● 服務通信協定(Service Communication Protocol)是一種協商的機制,通過這種機制,服務提供者和服務使用者可以就将要請求的内容和将要傳回的内容進行溝通。

● 服務描述(Service Description)是一種标準的模式,用于描述服務是什麼、應該如何調用服務以及成功地調用服務需要什麼資料。

● 服務(Service)當然是指實際可供使用的服務實體。

● 業務流程(Business Process)是一個服務的集合,可以按照特定的順序并使用一組特定的規則進行調用,以滿足業務要求。可以将業務流程本身看做是服務,這樣就産生了業務流程可以由不同粒度的服務組成的觀念。

● 服務注冊中心(Service Registry)是一個服務和資料描述的存儲庫,服務提供者可以通過服務注冊中心釋出它們的服務,而服務使用者可以通過服務注冊中心發現或查找可用的服務。服務注冊中心可以給需要集中式存儲庫的服務提供其他的功能。

圖中右邊部分代表服務品質部分。這些是貫穿每一層的。

● 政策(Policy)是一組條件和規則,在這些條件和規則之下,服務提供者可以使服務對于使用者可用。政策是功能與服務品質之間的紐帶,是以功能和服務品質兩個區都涉及政策。

● 安全性(Security)是規則集,可以應用于調用服務的服務使用者的身份驗證、授權和通路控制。

● 事務(Transaction)是屬性集,可以應用于一組服務,以提供一緻的結果。例如,如果要使用一組服務來完成一項業務功能,則所有的服務都必須完成,或者沒有一個完成。

● 管理(Management)是屬性集,可以應用于管理提供的服務或使用的服務。

如何實作Web服務?

那麼Web服務是如何實作這個架構的?

傳輸,往往采用HTTP、SMTP或者其他更優化的協定。用得廣泛的是HTTP,現實的情況是大多數組織的安全政策都隻開放80端口。

通信協定,往往采用SOAP(Simple Object Access Protocol),即簡單對象通路協定,它用XML的形式規定了消息該如何編碼。頂層元素是envelope,其他包括可選的header,必需的body,還定義了一些屬性。

服務描述,采用WSDL(Web Services Description Language)。它是一個開放的标準,由W3C制定,主要規定擴充的資料類型、消息、端口、綁定、實作等,它規定了一個服務可以如何被調用。另一個正在制訂的标準是 Web 服務尋址(WS-Addressing),它定義了如何在分布式體系結構中惟一地進行 Web 服務尋址和辨別 Web 服務,最終通過WSDL起作用(即向服務描述檔案中增加了幾個元素)。另一個流行的規範是 Web服務調用架構(Web Services Invocation Framework),在這種架構中,可以定義任何類型元件的WSDL接口,即使它們沒有使用相同的消息傳遞協定。

服務,可以用任何語言開發,是實作具體接口的軟體實體。

業務流程依不同的場合而不同,說明了組合服務的順序。

服務的注冊與發現用UDDI(Universal Description, Discovery and Integration) 實作。它用于規定Web服務的注冊與釋出機制。Web 服務檢查語言(Web Services Inspection Language)是 UDDI 在不使用注冊中心的情況下采用的一種可選機制。

用于 Web 服務的安全性協定是從 Web 服務安全性(WS-Security)規範開始的,該規範為安全通信定義了基于令牌的體系結構。

在安全性模型之外的是特定于應用程式的規範,其中包括 Web 服務的業務流程執行語言(Business Process Execution Language for Web Services,BPEL4WS),它定義了進行協同分布式事務處理的工作流操作、Web服務事務(WS-Transaction)以及Web 服務協調(WS-Coordination)等。

用于 Web 服務的規範正處在不斷制訂的過程中,很多相關規範正在由各種标準組織(如W3C、IETFASIS)以及行業聯盟(如Web服務互操作性組,Web Services Interoperability Group,WS-I)制定。筆者的建議是經常關注這些組織的首頁,以獲得最新的資訊。

未來的趨勢與展望

Web服務提供了簡單優美的通信與整合方案,它應該可以成為分布式計算的基礎平台。我們主要介紹它在最近流行的網格計算中的基礎作用。

看完上文的介紹後,讀者或許已經形成了一個基本的印象,即在SOA架構下,一切都是服務。Web服務以其松耦合、平台無關、現有的衆多工具、大型企業的支援等優勢,成為網格計算首選的基礎平台。當今,網格計算與Web服務間的界限已經越來越模糊。

不久前,Globus Alliance新提出了WSRF(Web Services Resource Framework)規範,以增強以前廣泛使用的OGSA(Open Grid Services Architecture)。這個規範将Web服務進行了擴充。在Web服務領域(以及社群),無狀态被認為是一個好的工程實踐,是以Web服務被設計成沒有狀态的、而網格要處理的是廣泛分布的,異構的各種資源,資源卻是有狀态的。好比一個人造衛星,它時刻都有其空間位置和方向等。 WSRF是以而定義了“狀态”,稱一個可以通過某個Web服務通路的資源為WS-Resource。這意味着網格計算與Web服務的綁定将更加緊密,最終有可能使得Web服務成為分布式計算的基礎平台标準。

總之,種種迹象表明,SOA會成為下一個主要的程式設計模型。在這個模型中,占中心地位的将是Web服務,各種資源将通過它來整合與內建,為使用者和企業帶來更多的回報。  

■ 清華大學作業系統與中間件技術研究中心 王彪(計算機世界報 2005年06月20日 第23期 B12)

引用: http://www2.ccw.com.cn/05/0523/b/0523b14_9.asp