【轉】SOA、WebService、UDDI、WSDL、SOAP、MSMQ概念

面向服務的體系結構(Service-Oriented Architecture,SOA)是一個組件模型,它將應用程序的不同功能單元(稱爲服務)通過這些服務之間定義良好的接口和契約聯繫起來。接口是採用 中立的方式進行定義的,它應該獨立於實現服務的硬件平臺、操作系統和編程語言。這使得構建在各種這樣的系統中的服務可以一種統一和通用的方式進行交互。

 

這 種具有中立的接口定義(沒有強制綁定到特定的實現上)的特徵稱爲服務之間的鬆耦合。鬆耦合系統的好處有兩點,一點是它的靈活性,另一點是,當組成整個應用 程序的每個服務的內部結構和實現逐漸地發生改變時,它能夠繼續存在。而另一方面,緊耦合意味着應用程序的不同組件之間的接口與其功能和結構是緊密相連的, 因而當需要對部分或整個應用程序進行某種形式的更改時,它們就顯得非常脆弱。

對鬆耦合的系統的需要來源於業務應用程序需要根據業務的需要變 得更加靈活,以適應不斷變化的環境,比如經常改變的政策、業務級別、業務重點、合作伙伴關係、行業地位以及其他與業務有關的因素,這些因素甚至會影響業務 的性質。我們稱能夠靈活地適應環境變化的業務爲按需(On demand)業務,在按需業務中,一旦需要,就可以對完成或執行任務的方式進行必要的更改。

雖 然面向服務的體系結構不是一個新鮮事物,但它卻是更傳統的面向對象的模型的替代模型,面向對象的模型是緊耦合的,已經存在二十多年了。雖然基於 SOA 的系統並不排除使用面向對象的設計來構建單個服務,但是其整體設計卻是面向服務的。由於它考慮到了系統內的對象,所以雖然 SOA 是基於對象的,但是作爲一個整體,它卻不是面向對象的。不同之處在於接口本身。SOA 系統原型的一個典型例子是通用對象請求代理體系結構(Common Object Request Broker Architecture,CORBA),它已經出現很長時間了,其定義的概念與 SOA 相似。

然而,現在的 SOA 已經有所不同了,因爲它依賴於一些更新的進展,這些進展是以可擴展標記語言(eXtensible Markup Language,XML)爲基礎的。通過使用基於 XML 的語言(稱爲 Web 服務描述語言(Web Services Definition Language,WSDL))來描述接口,服務已經轉到更動態且更靈活的接口系統中,非以前 CORBA 中的接口描述語言(Interface Definition Language,IDL)可比了。

Web 服務並不是實現 SOA 的惟一方式。前面剛講的 CORBA 是另一種方式,這樣就有了面向消息的中間件(Message-Oriented Middleware)系統,比如 IBM 的 MQseries。但是爲了建立體系結構模型,您所需要的並不只是服務描述。您需要定義整個應用程序如何在服務之間執行其工作流。您尤其需要找到業務的操 作和業務中所使用的軟件的操作之間的轉換點。因此,SOA 應該能夠將業務的商業流程與它們的技術流程聯繫起來,並且映射這兩者之間的關係。例如,給供應商付款的操作是商業流程,而更新您的零件數據庫,以包括進新供應的貨物卻是技術流程。因而,工作流還可以在 SOA 的設計中扮演重要的角色。

此外,動態業務的工作流不僅可以包括部門之間的操作,甚至還可以包括與不爲您控制的外部合作伙伴進行的操作。因此,爲了提高效率,您需要定義應該如何得知服務之間的關係的策略,這種策略常常採用服務級協定和操作策略的形式。

最後,所有這些都必須處於一個信任和可靠的環境之中,以同預期的一樣根據約定的條款來執行流程。因此,安全、信任和可靠的消息傳遞應該在任何 SOA 中都起着重要的作用。

我可以用面向服務的體系結構做什麼?

對 SOA 的需要來源於需要使業務 IT 系統變得更加靈活,以適應業務中的改變。通過允許強定義的關係和依然靈活的特定實現,IT 系統既可以利用現有系統的功能,又可以準備在以後做一些改變來滿足它們之間交互的需要。

下 面舉一個具體的例子。一個服裝零售組織擁有 500 家國際連鎖店,它們常常需要更改設計來趕上時尚的潮流。這可能意味着不僅需要更改樣式和顏色,甚至還可能需要更換布料、製造商和可交付的產品。如果零售商 和製造商之間的系統不兼容,那麼從一個供應商到另一個供應商的更換可能就是一個非常複雜的軟件流程。通過利用 WSDL 接口在操作方面的靈活性,每個公司都可以將它們的現有系統保持現狀,而僅僅匹配 WSDL 接口並制訂新的服務級協定,這樣就不必完全重構它們的軟件系統了。這是業務的水平改變,也就是說,它們改變的是合作伙伴,而所有的業務操作基本上都保持不 變。這裏,業務接口可以作少許改變,而內部操作卻不需要改變,之所以這樣做,僅僅是爲了能夠與外部合作伙伴一起工作。

另一種形式是內部改 變,在這種改變中,零售組織現在決定它還將把連鎖零售商店內的一些地方出租給專賣流行衣服的小商店,這可以看作是採用店中店(store-in- store)的業務模型。這裏,雖然公司的大多數業務操作都保持不變,但是它們現在需要新的內部軟件來處理這樣的出租安排。儘管在內部軟件系統可以承受全 面的檢修,但是它們需要在這樣做的同時不會對與現有的供應商系統的交互產生大的影響。在這種情況下,SOA 模型保持原封不動,而內部實現卻發生了變化。雖然可以將新的方面添加到 SOA 模型中來加入新的出租安排的職責,但是正常的零售管理系統繼續如往常一樣。

爲 了延續內部改變的觀念,IT 經理可能會發現,軟件的新配置還可以以另外的一種方式加以使用,比如出租粘貼海報的地方以供廣告之用。這裏,新的業務提議是通過在新的設計中重用靈活的 SOA 模型得出的。這是來自 SOA 模型的新成果,並且還是一個新的機會,而這樣的新機會在以前可能是不會有的。

垂直改變也是可能的, 在這種改變中,零售商從銷售他們自己的服裝完全轉變到專門通過店中店模型出租地方。如果垂直改變完全從最底層開始的話,就會帶來 SOA 模型結構的顯著改變,與之一起改變的還可能有新的系統、軟件、流程以及關係。在這種情況下,SOA 模型的好處是它從業務操作和流程的角度考慮問題而不是從應用程序和程序的角度考慮問題,這使得業務管理可以根據業務的操作清楚地確定什麼需要添加、修改或 刪除。然後可以將軟件系統構造爲適合業務處理的方式,而不是在許多現有的軟件平臺上常常看到的其他方式。

正如您可以看到的,在這裏,改變和 SOA 系統適應改變的能力是最重要的部分。對於開發人員來說,這樣的改變無論是在他們工作的範圍之內還是在他們工作的範圍之外都有可能發生,這取決於是否有改變 需要知道接口是如何定義的以及它們相互之間如何進行交互。與開發人員不同的是,架構師的作用就是引起對 SOA 模型大的改變。這種分工,就是讓開發人員集中精力於創建作爲服務定義的功能單元,而讓架構師和建模人員集中精力於如何將這些單元適當地組織在一起,它已經 有十多年的歷史了,通常用統一建模語言(Universal Modeling Language,UML),並且描述成模型驅動的體系結構(Model-Driven Architecture,MDA)。

對於面向同 步和異步應用的,基於請求/響應模式的分佈式計算來說,SOA是一場革命。一個應用程序的業務邏輯(business logic)或某些單獨的功能被模塊化並作爲服務呈現給消費者或客戶端。這些服務的關鍵是他們的鬆耦合特性。例如,服務的接口和實現相獨立。應用開發人員 或者系統集成者可以通過組合一個或多個服務來構建應用,而無須理解服務的底層實現。舉例來說,一個服務可以用。NET或J2EE來實現,而使用該服務的應 用程序可以在不同的平臺之上,使用的語言也可以不同。

SOA有以下特性

SOA服務具有平臺獨立的自我描述XML文檔。Web服務描述語言(WSDL, Web Services Description Language)是用於描述服務的標準語言。

SOA 服務用消息進行通信,該消息通常使用XML Schema來定義(也叫做XSD, XML Schema Definition)。消費者和提供者或消費者和服務之間的通信多見於不知道提供者的環境中。服務間的通訊也可以看作企業內部處理的關鍵商業文檔。

在 一個企業內部,SOA服務通過一個扮演目錄列表(directory listing)角色的登記處(Registry)來進行維護。應用程序在登記處(Registry)尋找並調用某項服務。統一描述,定義和集成 (UDDI, Universal Description, Definition, and Integration)是服務登記的標準。

每項SOA服務都有一個與之相關的服務品質(QoS, quality of service)。QoS的一些關鍵元素有安全需求(例如認證和授權),可靠通信(譯註:可靠消息是指,確保消息“僅且僅僅”發送一次,從而過濾重複信息。),以及誰能調用服務的策略。

爲什麼選擇SOA?

不 同種類的操作系統,應用軟件,系統軟件和應用基礎結構(application infrastructure)相互交織,這便是IT企業的現狀。一些現存的應用程序被用來處理當前的業務流程(business processes),因此從頭建立一個新的基礎環境是不可能的。企業應該能對業務的變化做出快速的反應,利用對現有的應用程序和應用基礎結構 (application infrastructure)的投資來解決新的業務需求,爲客戶,商業夥伴以及供應商提供新的互動渠道,並呈現一個可以支持有機業務(organic business)的構架。SOA憑藉其鬆耦合的特性,使得企業可以按照模塊化的方式來添加新服務或更新現有服務,以解決新的業務需要,提供選擇從而可以 通過不同的渠道提供服務,並可以把企業現有的或已有的應用作爲服務, 從而保護了現有的IT基礎建設投資。

如圖1的例子所示,一個使用SOA的企業,可以使用一組現有的應用來創建一個供應鏈複合應用(supply chain composite application),這些現有的應用通過標準接口來提供功能。

服務架構

爲了實現SOA,企業需要一個服務架構,圖2顯示了一個例子:

在 圖2中, 服務消費者(service consumer)可以通過發送消息來調用服務。這些消息由一個服務總線(service bus)轉換後發送給適當的服務實現。這種服務架構可以提供一個業務規則引擎(business rules engine),該引擎容許業務規則被合併在一個服務裏或多個服務裏。這種架構也提供了一個服務管理基礎(service management infrastructure),用來管理服務,類似審覈,列表(billing),日誌等功能。此外,該架構給企業提供了靈活的業務流程,更好地處理控 制請求(regulatory requirement),例如Sarbanes Oxley(SOX),並且可以在不影響其他服務的情況下更改某項服務。

SOA基礎結構

要運行,管理SOA應用程序,企業需要SOA基礎,這是SOA平臺的一個部分。SOA基礎必須支持所有的相關標準,和需要的運行時容器。圖3所示的是一個典型的SOA基礎結構。

SOAP, WSDL, UDDI

WSDL,UDDI 和SOAP是SOA基礎的基礎部件。WSDL用來描述服務;UDDI用來註冊和查找服務;而SOAP,作爲傳輸層,用來在消費者和服務提供者之間傳送消 息。SOAP是Web服務的默認機制,其他的技術爲可以服務實現其他類型的綁定。一個消費者可以在UDDI註冊表(registry)查找服務,取得服務 的WSDL描述,然後通過SOAP來調用服務。

WS-I Basic Profile

WS-I Basic Profile,由Web服務互用性組織(Web Services Interoperability Organization)提供,是SOA服務測試與互用性所需要的核心構件。服務提供者可以使用Basic Profile測試程序來測試服務在不同平臺和技術上的互用性。

J2EE 和 .Net

盡 管J2EE和。NET平臺是開發SOA應用程序常用的平臺,但SOA不僅限於此。像J2EE這類平臺,不僅爲開發者自然而然地參與到SOA中來提供了一個 平臺,還通過他們內在的特性,將可擴展性,可靠性,可用性以及性能引入了SOA世界。新的規範,例如 JAXB(Java API for XML Binding),用於將XML文檔定位到Java類;JAXR(Java API for XML Registry)用來規範對UDDI註冊表(registry)的操作;XML-RPC(Java API for XML-based Remote Procedure Call)在J2EE1.4中用來調用遠程服務,這使得開發和部署可移植於標準J2EE容器的Web服務變得容易,與此同時,實現了跨平臺(如。NET) 的服務互用。

服務品質

在企業中,關鍵任務系統(mission-critical system,譯註:關鍵任務系統是指如果一個系統的可靠性對於一個組織是至關重要的,那麼該系統就是該企業的關鍵任務系統。比如,電話系統對於一個電話 促銷企業來說就是關鍵任務系統,而文字處理系統就不那麼關鍵了。)用來解決高級需求,例如安全性,可靠性,事物。當一個企業開始採用服務架構作爲工具來進 行開發和部署應用的時候,基本的Web服務規範,像WSDL,SOAP,以及UDDI就不能滿足這些高級需求。正如前面所提到的,這些需求也稱作服務品質 (QoS,quality of services)。與QoS相關的衆多規範已經由一些標準化組織(standards bodies)提出,像W3C(World Wide Web Consortium)和OASIS(the Organization for the Advancement of Structured Information Standards)。下面的部分將會討論一些QoS服務和相關標準。

安全

Web服務安全規範用來保證消息的安全性。該規範 主要包括認證交換, 消息完整性和消息保密。該規範吸引人的地方在於它藉助現有的安全標準,例如,SAML(as Security Assertion Markup Language)來實現web服務消息的安全。OASIS正致力於Web服務安全規範的制定。

可靠

在 典型的SOA 環境中,服務消費者和服務提供者之間會有幾種不同的文檔在進行交換。具有諸如“僅且僅僅傳送一次”( once-and-only-once delivery),“最多傳送一次”( at-most-once delivery),“重複消息過濾”(duplicate message elimination),“保證消息傳送”(guaranteed message delivery)等特性消息的發送和確認,在關鍵任務系統(mission-critical systems)中變得十分重要。WS-Reliability 和 WS-ReliableMessaging是兩個用來解決此類問題的標準。這些標準現在都由OASIS負責。

策略

服務提供者 有時候會要求服務消費者與某種策略通信。比如,服務提供商可能會要求消費者提供Kerberos安全標示,才能取得某項服務。這些要求被定義爲策略斷言 (policy assertions)。一項策略可能會包含多個斷言。WS-Policy用來標準化服務消費者和服務提供者之間的策略通信。

控制

當 企業着手於服務架構時,服務可以用來整合數據倉庫(silos of data),應用程序,以及組件。整合應用意味着例如異步通信,並行處理,數據轉換,以及校正等進程請求必須被標準化。在SOA中,進程是使用一組離散的 服務創建的。BPEL4WS 或者 WSBPEL(Web Service Business Process Execution Language)是用來控制這些服務的語言。WSBPEL目前也由OASIS負責。

管理

隨着企業服務的增長,所使用的服務 和業務進程的數量也隨之增加,一個用來讓系統管理員管理所有運行在多相環境下的服務的管理系統就顯得尤爲重要。WSDM(Web Services for Distributed Management)規定了任何根據WSDM實現的服務都可以由一個WSDM適應(WSDM-compliant)的管理方案來管理。

其它的qos特性,比如合作方之間的溝通和通訊,多個服務之間的事務處理,都在WS-Coordination 和 WS-Transaction 標準中描述, 這些都是OASIS 的工作。

SOA 不是Web服務

在 理解SOA和Web服務的關係上,經常發生混淆。根據2003年4月的Gartner報道,Yefim V. Natis就這個問題是這樣解釋的:“Web服務是技術規範,而SOA是設計原則。特別是Web服務中的WSDL,是一個SOA配套的接口定義標準:這是 Web服務和SOA的根本聯繫。”從本質上來說,SOA是一種架構模式,而Web服務是利用一組標準實現的服務。Web服務是實現SOA的方式之一。用 Web服務來實現SOA的好處是你可以實現一箇中立平臺,來獲得服務,而且隨着越來越多的軟件商支持越來越多的Web服務規範,你會取得更好的通用性。

SOA的優勢

SOA 的概念並非什麼新東西,SOA不同於現有的分佈式技術之處在於大多數軟件商接受它並有可以實現SOA的平臺或應用程序。SOA伴隨着無處不在的標準,爲企 業的現有資產或投資帶來了更好的重用性。SOA能夠在最新的和現有的應用之上創建應用;SOA能夠使客戶或服務消費者免予服務實現的改變所帶來的影 響;SOA能夠升級單個服務或服務消費者而無需重寫整個應用,也無需保留已經不再適用於新需求的現有系統。總而言之,SOA以藉助現有的應用來組合產生新 服務的敏捷方式,提供給企業更好的靈活性來構建應用程序和業務流程。 

MSMQ

Message Queue,微軟消息隊列)是在多個不同的應用之間實現相互通信的一種異步傳輸模式,相互通信的應用可以分佈於同一臺機器上,也可以分佈於相連的網絡空間中的任一位置。它的實現原理是:消息的發送者把自己想要發送的信息放入一個容器中(我們稱之爲Message),然後把它保存至一個系統公用空間的消息隊列(Message Queue)中;本地或者是異地的消息接收程序再從該隊列中取出發給它的消息進行處理。 
在消息傳遞機制中,有兩個比較重要的概念。一個是消息,一個是隊列。消息是由通信的雙方所需要傳遞的信息,它可以是各式各樣的媒體,如文本、聲音、圖象等等。消息最終的理解方式,爲消息傳遞的雙方事先商定,這樣做的好處是,一是相當於對數據進 行了簡單的加密,二則採用自己定義的格式可以節省通信的傳遞量。消息可以含有發送和接收者的標識,這樣只有指定的用戶才能看到只傳遞給他的信息和返回是否 操作成功的回執。消息也可以含有時間戳,以便於接收方對某些與時間相關的應用進行處理。消息還可以含有到期時間,它表明如果在指定時間內消息還未到達則作 廢,這主要應用與時間性關聯較爲緊密的應用。 
消息隊列是發送和接收消息的公用存儲空間,它可以存在於內存中或者是物理文件中。消息可以以兩 種方式發送,即快遞方式(express)和可恢復模式(recoverable),它們的區別在於,快遞方式爲了消息的快速傳遞,把消息放置於內存中, 而不放於物理磁盤上,以獲取較高的處理能力;可恢復模式在傳送過程的每一步驟中,都把消息寫入物理磁盤中,以得到較好的故障恢復能力。消息隊列可以放置在 發送方、接收方所在的機器上,也可以單獨放置在另外一臺機器上。正是由於消息隊列在放置方式上的靈活性,形成了消息傳送機制的可靠性。當保存消息隊列的機 器發生故障而重新啓動以後,以可恢復模式發送的消息可以恢復到故障發生之前的狀態,而以快遞方式發送的消息則丟失了。另一方面,採用消息傳遞機制,發送方 必要再擔心接收方是否啓動、是否發生故障等等非必要因素,只要消息成功發送出去,就可以認爲處理完成,而實際上對方可能甚至未曾開機,或者實際完成交易時 可能已經是第二天了。 
採用MSMQ帶來的好處是:由於是異步通信,無論是發送方還是接收方都不用等待對方返回成功消 息,就可以執行餘下的代碼,因而大大地提高了事物處理的能力;當信息傳送過程中,信息發送機制具有一定功能的故障恢復能力;MSMQ的消息傳遞機制使得消 息通信的雙方具有不同的物理平臺成爲可能。 
在微軟的.net平臺上利用其提供的MSMQ功能,可以輕鬆創建或者刪除消息隊列、發送或者接收消息、甚至於對消息隊列進行管理。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章