對于面向同步和異步應用的,基于請求
/
響應模式的分布式計算來說,
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
),這些現有的應用通過標準接口來提供功能。
Figure 1. Supply chain application. Click on thumbnail to view full-sized image.
服務架構
為了實現
SOA
,企業需要一個服務架構,圖
2
顯示了一個例子:
Figure 2. A sample service architecture. Click on thumbnail to view full-sized image.
在圖
2
中,
服務消費者(
service consumer
)可以通過發送消息來調用服務。這些消息由一個服務總線(
service bus
)轉換后發送給適當的服務實現。這種服務架構可以提供一個業務規則引擎(
business rules engine
),該引擎容許業務規則被合并在一個服務里或多個服務里。這種架構也提供了一個服務管理基礎(
service management infrastructure
),用來管理服務,類似審核,列表(
billing
),日志等功能。此外,該架構給企業提供了靈活的業務流程,更好地處理控制請求(
regulatory requirement
),例如
Sarbanes Oxley
(
SOX
),并且可以在不影響其他服務的情況下更改某項服務。
SOA
基礎結構
要運行,管理
SOA
應用程序,企業需要
SOA
基礎,這是
SOA
平臺的一個部分。
SOA
基礎必須支持所有的相關標準,和需要的運行時容器。圖
3
所示的是一個典型的
SOA
基礎結構。接下來的章節將逐一討論該結構的每個部分。
Figure 3. A typical SOA infrastructure. Click on thumbnail to view full-sized image.
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
)提出,像
W
安全
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
以借助現有的應用來組合產生新服務的敏捷方式,提供給企業更好的靈活性來構建應用程序和業務流程。
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