對于面向同步和異步應(yīng)用的,基于請求 / 響應(yīng)模式的分布式計(jì)算來說, SOA 是一場革命。一個(gè)應(yīng)用程序的業(yè)務(wù)邏輯( business logic )或某些單獨(dú)的功能被模塊化并作為服務(wù)呈現(xiàn)給消費(fèi)者或客戶端。這些服務(wù)的關(guān)鍵是他們的松耦合特性。例如,服務(wù)的接口和實(shí)現(xiàn)相獨(dú)立。應(yīng)用開發(fā)人員或者系統(tǒng)集成者可以通過組合一個(gè)或多個(gè)服務(wù)來構(gòu)建應(yīng)用,而無須理解服務(wù)的底層實(shí)現(xiàn)。舉例來說,一個(gè)服務(wù)可以用。 NET J2EE 來實(shí)現(xiàn),而使用該服務(wù)的應(yīng)用程序可以在不同的平臺(tái)之上,使用的語言也可以不同。

   SOA 有以下特性

   SOA 服務(wù)具有平臺(tái)獨(dú)立的自我描述 XML 文檔。 Web 服務(wù)描述語言( WSDL , Web Services Description Language )是用于描述服務(wù)的標(biāo)準(zhǔn)語言。

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

  在一個(gè)企業(yè)內(nèi)部, SOA 服務(wù)通過一個(gè)扮演目錄列表( directory listing )角色的登記處( Registry )來進(jìn)行維護(hù)。應(yīng)用程序在登記處( Registry )尋找并調(diào)用某項(xiàng)服務(wù)。統(tǒng)一描述,定義和集成( UDDI , Universal Description Definition and Integration )是服務(wù)登記的標(biāo)準(zhǔn)。

  每項(xiàng) SOA 服務(wù)都有一個(gè)與之相關(guān)的服務(wù)品質(zhì)( QoS quality of service )。 QoS 的一些關(guān)鍵元素有安全需求(例如認(rèn)證和授權(quán)),可靠通信(譯注:可靠消息是指,確保消息“僅且僅僅”發(fā)送一次,從而過濾重復(fù)信息。),以及誰能調(diào)用服務(wù)的策略。

  為什么選擇 SOA ?

  不同種類的操作系統(tǒng),應(yīng)用軟件,系統(tǒng)軟件和應(yīng)用基礎(chǔ)結(jié)構(gòu)( application infrastructure )相互交織,這便是 IT 企業(yè)的現(xiàn)狀。一些現(xiàn)存的應(yīng)用程序被用來處理當(dāng)前的業(yè)務(wù)流程( business processes ),因此從頭建立一個(gè)新的基礎(chǔ)環(huán)境是不可能的。企業(yè)應(yīng)該能對業(yè)務(wù)的變化做出快速的反應(yīng),利用對現(xiàn)有的應(yīng)用程序和應(yīng)用基礎(chǔ)結(jié)構(gòu)( application infrastructure )的投資來解決新的業(yè)務(wù)需求,為客戶,商業(yè)伙伴以及供應(yīng)商提供新的互動(dòng)渠道,并呈現(xiàn)一個(gè)可以支持有機(jī)業(yè)務(wù)( organic business )的構(gòu)架。 SOA 憑借其松耦合的特性,使得企業(yè)可以按照模塊化的方式來添加新服務(wù)或更新現(xiàn)有服務(wù),以解決新的業(yè)務(wù)需要,提供選擇從而可以通過不同的渠道提供服務(wù),并可以把企業(yè)現(xiàn)有的或已有的應(yīng)用作為服務(wù), 從而保護(hù)了現(xiàn)有的 IT 基礎(chǔ)建設(shè)投資。

  如圖 1 的例子所示,一個(gè)使用 SOA 的企業(yè),可以使用一組現(xiàn)有的應(yīng)用來創(chuàng)建一個(gè)供應(yīng)鏈復(fù)合應(yīng)用( supply chain composite application ),這些現(xiàn)有的應(yīng)用通過標(biāo)準(zhǔn)接口來提供功能。

1.JPG 
 
Figure 1. Supply chain application. Click on thumbnail to view full-sized image.

  服務(wù)架構(gòu)

  為了實(shí)現(xiàn) SOA ,企業(yè)需要一個(gè)服務(wù)架構(gòu),圖 2 顯示了一個(gè)例子:

  1.JPG
Figure 2. A sample service architecture. Click on thumbnail to view full-sized image.

  在圖 2 中, 服務(wù)消費(fèi)者( service consumer )可以通過發(fā)送消息來調(diào)用服務(wù)。這些消息由一個(gè)服務(wù)總線( service bus )轉(zhuǎn)換后發(fā)送給適當(dāng)?shù)姆?wù)實(shí)現(xiàn)。這種服務(wù)架構(gòu)可以提供一個(gè)業(yè)務(wù)規(guī)則引擎( business rules engine ),該引擎容許業(yè)務(wù)規(guī)則被合并在一個(gè)服務(wù)里或多個(gè)服務(wù)里。這種架構(gòu)也提供了一個(gè)服務(wù)管理基礎(chǔ)( service management infrastructure ),用來管理服務(wù),類似審核,列表( billing ),日志等功能。此外,該架構(gòu)給企業(yè)提供了靈活的業(yè)務(wù)流程,更好地處理控制請求( regulatory requirement ),例如 Sarbanes Oxley SOX ),并且可以在不影響其他服務(wù)的情況下更改某項(xiàng)服務(wù)。

   SOA 基礎(chǔ)結(jié)構(gòu)

  要運(yùn)行,管理 SOA 應(yīng)用程序,企業(yè)需要 SOA 基礎(chǔ),這是 SOA 平臺(tái)的一個(gè)部分。 SOA 基礎(chǔ)必須支持所有的相關(guān)標(biāo)準(zhǔn),和需要的運(yùn)行時(shí)容器。圖 3 所示的是一個(gè)典型的 SOA 基礎(chǔ)結(jié)構(gòu)。接下來的章節(jié)將逐一討論該結(jié)構(gòu)的每個(gè)部分。

2.JPG
  
Figure 3. A typical SOA infrastructure. Click on thumbnail to view full-sized image.

   SOAP , WSDL , UDDI

   WSDL UDDI SOAP SOA 基礎(chǔ)的基礎(chǔ)部件。 WSDL 用來描述服務(wù); UDDI 用來注冊和查找服務(wù);而 SOAP ,作為傳輸層,用來在消費(fèi)者和服務(wù)提供者之間傳送消息。 SOAP Web 服務(wù)的默認(rèn)機(jī)制,其他的技術(shù)為可以服務(wù)實(shí)現(xiàn)其他類型的綁定。一個(gè)消費(fèi)者可以在 UDDI 注冊表( registry )查找服務(wù),取得服務(wù)的 WSDL 描述,然后通過 SOAP 來調(diào)用服務(wù)。

   WS-I Basic Profile

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

   J2EE .Net

  盡管 J2EE 和。 NET 平臺(tái)是開發(fā) SOA 應(yīng)用程序常用的平臺(tái),但 SOA 不僅限于此。像 J2EE 這類平臺(tái),不僅為開發(fā)者自然而然地參與到 SOA 中來提供了一個(gè)平臺(tái),還通過他們內(nèi)在的特性,將可擴(kuò)展性,可靠性,可用性以及性能引入了 SOA 世界。新的規(guī)范,例如 JAXB Java API for XML Binding ),用于將 XML 文檔定位到 Java 類; JAXR Java API for XML Registry )用來規(guī)范對 UDDI 注冊表( registry )的操作; XML-RPC Java API for XML-based Remote Procedure Call )在 J2EE1.4 中用來調(diào)用遠(yuǎn)程服務(wù),這使得開發(fā)和部署可移植于標(biāo)準(zhǔn) J2EE 容器的 Web 服務(wù)變得容易,與此同時(shí),實(shí)現(xiàn)了跨平臺(tái)(如。 NET )的服務(wù)互用。

  服務(wù)品質(zhì)

  在企業(yè)中,關(guān)鍵任務(wù)系統(tǒng)( mission-critical system ,譯注:關(guān)鍵任務(wù)系統(tǒng)是指如果一個(gè)系統(tǒng)的可靠性對于一個(gè)組織是至關(guān)重要的,那么該系統(tǒng)就是該企業(yè)的關(guān)鍵任務(wù)系統(tǒng)。比如,電話系統(tǒng)對于一個(gè)電話促銷企業(yè)來說就是關(guān)鍵任務(wù)系統(tǒng),而文字處理系統(tǒng)就不那么關(guān)鍵了。)用來解決高級(jí)需求,例如安全性,可靠性,事物。當(dāng)一個(gè)企業(yè)開始采用服務(wù)架構(gòu)作為工具來進(jìn)行開發(fā)和部署應(yīng)用的時(shí)候,基本的 Web 服務(wù)規(guī)范,像 WSDL SOAP ,以及 UDDI 就不能滿足這些高級(jí)需求。正如前面所提到的,這些需求也稱作服務(wù)品質(zhì)( QoS quality of services )。與 QoS 相關(guān)的眾多規(guī)范已經(jīng)由一些標(biāo)準(zhǔn)化組織( standards bodies )提出,像 W3C World Wide Web Consortium )和 OASIS the Organization for the Advancement of Structured Information Standards )。下面的部分將會(huì)討論一些 QoS 服務(wù)和相關(guān)標(biāo)準(zhǔn)。

  安全

   Web 服務(wù)安全規(guī)范用來保證消息的安全性。該規(guī)范主要包括認(rèn)證交換, 消息完整性和消息保密。該規(guī)范吸引人的地方在于它借助現(xiàn)有的安全標(biāo)準(zhǔn),例如, SAML as Security Assertion Markup Language )來實(shí)現(xiàn) web 服務(wù)消息的安全。 OASIS 正致力于 Web 服務(wù)安全規(guī)范的制定。

  可靠

  在典型的 SOA 環(huán)境中,服務(wù)消費(fèi)者和服務(wù)提供者之間會(huì)有幾種不同的文檔在進(jìn)行交換。具有諸如“僅且僅僅傳送一次”( once-and-only-once delivery ),“最多傳送一次”( at-most-once delivery ),“重復(fù)消息過濾”( duplicate message elimination ),“保證消息傳送”( guaranteed message delivery )等特性消息的發(fā)送和確認(rèn),在關(guān)鍵任務(wù)系統(tǒng)( mission-critical systems )中變得十分重要。 WS-Reliability WS-ReliableMessaging 是兩個(gè)用來解決此類問題的標(biāo)準(zhǔn)。這些標(biāo)準(zhǔn)現(xiàn)在都由 OASIS 負(fù)責(zé)。

  策略

  服務(wù)提供者有時(shí)候會(huì)要求服務(wù)消費(fèi)者與某種策略通信。比如,服務(wù)提供商可能會(huì)要求消費(fèi)者提供 Kerberos 安全標(biāo)示,才能取得某項(xiàng)服務(wù)。這些要求被定義為策略斷言( policy assertions )。一項(xiàng)策略可能會(huì)包含多個(gè)斷言。 WS-Policy 用來標(biāo)準(zhǔn)化服務(wù)消費(fèi)者和服務(wù)提供者之間的策略通信。

  控制

  當(dāng)企業(yè)著手于服務(wù)架構(gòu)時(shí),服務(wù)可以用來整合數(shù)據(jù)倉庫( silos of data ),應(yīng)用程序,以及組件。整合應(yīng)用意味著例如異步通信,并行處理,數(shù)據(jù)轉(zhuǎn)換,以及校正等進(jìn)程請求必須被標(biāo)準(zhǔn)化。在 SOA 中,進(jìn)程是使用一組離散的服務(wù)創(chuàng)建的。 BPEL4WS 或者 WSBPEL Web Service Business Process Execution Language )是用來控制這些服務(wù)的語言。 WSBPEL 目前也由 OASIS 負(fù)責(zé)。

  管理

  隨著企業(yè)服務(wù)的增長,所使用的服務(wù)和業(yè)務(wù)進(jìn)程的數(shù)量也隨之增加,一個(gè)用來讓系統(tǒng)管理員管理所有運(yùn)行在多相環(huán)境下的服務(wù)的管理系統(tǒng)就顯得尤為重要。 WSDM Web Services for Distributed Management )規(guī)定了任何根據(jù) WSDM 實(shí)現(xiàn)的服務(wù)都可以由一個(gè) WSDM 適應(yīng)( WSDM-compliant )的管理方案來管理。

  其它的 qos 特性,比如合作方之間的溝通和通訊,多個(gè)服務(wù)之間的事務(wù)處理,都在 WS-Coordination WS-Transaction 標(biāo)準(zhǔn)中描述, 這些都是 OASIS 的工作。

   SOA 不是 Web 服務(wù)

  在理解 SOA Web 服務(wù)的關(guān)系上,經(jīng)常發(fā)生混淆。根據(jù) 2003 4 月的 Gartner 報(bào)道, Yefim V. Natis 就這個(gè)問題是這樣解釋的:“ Web 服務(wù)是技術(shù)規(guī)范,而 SOA 是設(shè)計(jì)原則。特別是 Web 服務(wù)中的 WSDL ,是一個(gè) SOA 配套的接口定義標(biāo)準(zhǔn):這是 Web 服務(wù)和 SOA 的根本聯(lián)系?!睆谋举|(zhì)上來說, SOA 是一種架構(gòu)模式,而 Web 服務(wù)是利用一組標(biāo)準(zhǔn)實(shí)現(xiàn)的服務(wù)。 Web 服務(wù)是實(shí)現(xiàn) SOA 的方式之一。用 Web 服務(wù)來實(shí)現(xiàn) SOA 的好處是你可以實(shí)現(xiàn)一個(gè)中立平臺(tái),來獲得服務(wù),而且隨著越來越多的軟件商支持越來越多的 Web 服務(wù)規(guī)范,你會(huì)取得更好的通用性。

   SOA 的優(yōu)勢

   SOA 的概念并非什么新東西, SOA 不同于現(xiàn)有的分布式技術(shù)之處在于大多數(shù)軟件商接受它并有可以實(shí)現(xiàn) SOA 的平臺(tái)或應(yīng)用程序。 SOA 伴隨著無處不在的標(biāo)準(zhǔn),為企業(yè)的現(xiàn)有資產(chǎn)或投資帶來了更好的重用性。 SOA 能夠在最新的和現(xiàn)有的應(yīng)用之上創(chuàng)建應(yīng)用; SOA 能夠使客戶或服務(wù)消費(fèi)者免予服務(wù)實(shí)現(xiàn)的改變所帶來的影響; SOA 能夠升級(jí)單個(gè)服務(wù)或服務(wù)消費(fèi)者而無需重寫整個(gè)應(yīng)用,也無需保留已經(jīng)不再適用于新需求的現(xiàn)有系統(tǒng)。總而言之, SOA 以借助現(xiàn)有的應(yīng)用來組合產(chǎn)生新服務(wù)的敏捷方式,提供給企業(yè)更好的靈活性來構(gòu)建應(yīng)用程序和業(yè)務(wù)流程。

   About the author

   Raghu R. Kodali is consulting product manager and SOA evangelist for Oracle Application Server. Kodali leads next-generation SOA initiatives and J2EE feature sets for Oracle Application Server , with particular expertise in EJB J2EE deployment Web services , and BPEL. Prior to product management , Kodali held presales and technical marketing positions in Oracle Asia-Pacific , based in Singapore. Prior to Oracle , he worked as software developer with National Computer Systems Singapore. He holds a master's degree in computer science and is a frequent speaker at technology conferences. Kodali maintains an active blog at Loosely Coupled Corner