對于面向同步和異步應(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)接口來提供功能。
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è)例子:

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è)部分。
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