目前看來大多數(shù)軟件的功能最終將作為服務(wù)來交付和使用。當(dāng)然,它們可以實(shí)現(xiàn)為緊密耦合的系統(tǒng),但從門戶、設(shè)備以及其它終端使用的觀點(diǎn)看,它們將使用一種面向服務(wù)的接口。我們已經(jīng)注意到有人提出體系架構(gòu)師和設(shè)計(jì)者應(yīng)該謹(jǐn)慎避免將所有功能都作為服務(wù)。我們認(rèn)為這是不正確和不適當(dāng)?shù)?。如果有了成熟的Web服務(wù)協(xié)議和技術(shù),再考查是否將所有功能實(shí)現(xiàn)為Web服務(wù)是否有效,這可能會更加有效,但這并不會減弱從服務(wù)的角度來設(shè)計(jì)所有功能的需求。服務(wù)是發(fā)布的主要構(gòu)造成分,應(yīng)該在每一重要的接口中使用。面向服務(wù)的體系結(jié)構(gòu)可以讓我們按照相關(guān)的服務(wù)來管理使用(發(fā)送、接收、使用,等等)服務(wù)。這將對我們?nèi)绾喂芾碥浖芷诋a(chǎn)生重大影響--從需求規(guī)格說明開始就作為服務(wù),服務(wù)的設(shè)計(jì),服務(wù)的獲取和外包,以及服務(wù)的評估等等。
隨著時(shí)間推移,功能被說明、發(fā)布或使用的抽象級別會逐漸越來越高。我們已經(jīng)經(jīng)歷了從模塊化、對象,到現(xiàn)在的服務(wù)的發(fā)展過程。然而,在許多方面,SOA的命名還是令人遺憾的。當(dāng)然,SOA也和體系結(jié)構(gòu)相關(guān),不可能將討論限制在體系結(jié)構(gòu)方面,因?yàn)橐恍┦挛?,如業(yè)務(wù)設(shè)計(jì)和發(fā)送過程也是重要的考慮因素。一個更有用的命名方法可能是面向服務(wù)(ServiceOrientation)或SO。實(shí)際上這與面向?qū)ο螅∣O) 和基于組件的開發(fā)(CBD)有許多相似之處:
? | 類似于對象和組件,服務(wù)代表了自然的建造單元塊,它可以讓我們按更熟悉的方式來組織功能。 | ||||||
? | 類似于對象和組件,服務(wù)是一個功能建造單元塊,它可以
| ||||||
? | 對象使用了抽象數(shù)據(jù)類型和數(shù)據(jù)抽象,服務(wù)可以通過方面或上下文環(huán)境提供類似級別的適應(yīng)性。 | ||||||
? | 對象和組件可以按照類或繼承行為的服務(wù)層次 來組織,服務(wù)可以單獨(dú)發(fā)布和使用,或者按層次或協(xié)作方式來使用。 |
對于許多組織來說,研究面向服務(wù)的體系結(jié)構(gòu)的起點(diǎn)是對Web 服務(wù)的考慮。然而Web服務(wù)不是內(nèi)在的面向服務(wù)的。一種Web服務(wù)只是提供一種符合Web服務(wù)協(xié)議的功能。在本文中,我們將要標(biāo)識一個結(jié)構(gòu)良好的服務(wù)所具有的特征,并為系統(tǒng)架構(gòu)師和設(shè)計(jì)者提供關(guān)于如何交付面向服務(wù)的應(yīng)用程序的指導(dǎo)。
環(huán)視業(yè)界,SOA作為術(shù)語或者縮略詞正廣泛地被使用,但這一術(shù)語在使用上還不很精確。例如, World Wide Web Consortium(W3C)將SOA定義為一套可以被調(diào)用的組件,用戶可以發(fā)布并發(fā)現(xiàn)其接口描述。在其它地方我們也可以看到相似的定義:從體系結(jié)構(gòu)的技術(shù)實(shí)現(xiàn)來看,它是非常有技術(shù)遠(yuǎn)景的。這有些奇怪,因?yàn)轶w系結(jié)構(gòu)這一術(shù)語一般地用于描述一種風(fēng)格或一套實(shí)踐—例如,設(shè)計(jì)和構(gòu)造事物的風(fēng)格,如喬治亞州的建筑物,新藝術(shù)主義裝飾品,或Sir Edwin Lutyens 和Gertrude Jekyll設(shè)計(jì)的花園。
CBDI認(rèn)為面向服務(wù)的體系結(jié)構(gòu)需要一種更加廣泛的定義。為了得到這一定義,讓我們先從一些現(xiàn)有的定義入手,并對W3C提供的定義與CBDI推薦的定義進(jìn)行比較。 我們首先看一下基本服務(wù)概念的定義。
Service服務(wù)
? | 能執(zhí)行一項(xiàng)任務(wù)的一個組件。一個WSDL服務(wù):一個端點(diǎn)(end points)的集合(W3C)。 |
? | 一種使用WSDL描述的功能(CBDI)。 |
一個服務(wù)定義
? | 根據(jù)一個經(jīng)過協(xié)商的合同(暗示或明確表示的),用戶的需求被滿足的一種方式,包括服務(wù)協(xié)議、提供的功能等等(CBDI)。 |
服務(wù)執(zhí)行
? | 一個功能運(yùn)行的實(shí)例過程(CBDI)。 |
Web服務(wù)
一個軟件系統(tǒng),設(shè)計(jì)為支持能通過網(wǎng)絡(luò)互操作的機(jī)器對機(jī)器的交互,它有一個用機(jī)器能夠處理的格式描述的接口(特別是WSDL)。其它的體系可以使用SOAP消息按照Web服務(wù)描述的方式與之交互,典型地是使用HTTP進(jìn)行傳輸,并用XML序列化和其它Web相關(guān)的標(biāo)準(zhǔn)聯(lián)接(W3C)。
? | 一個功能的程序接口,符合WSnn協(xié)議(CBDI)。 |
服務(wù)規(guī)定服務(wù)的生命周期作為可再利用的概念。由這些定義看出,和CBDI相比,W3C采用了較狹義的方法來定義服務(wù)和相關(guān)的概念。CBDI并沒有將所有的服務(wù)看作組件,也不完全認(rèn)為服務(wù)將執(zhí)行一項(xiàng)任務(wù)。此外CBDI推薦將類型、定義和實(shí)現(xiàn)作為單獨(dú)的內(nèi)容。然而實(shí)際上在SOA的定義中,CBDI與W3C相互補(bǔ)充。
面向服務(wù)的體系結(jié)構(gòu):
? | 一套可以被調(diào)用的組件,可以發(fā)布和發(fā)現(xiàn)它們的接口描述(W3C)。 |
CBDI基于兩種考慮而拒絕這一定義:第一,組件(或?qū)崿F(xiàn))經(jīng)常不是成套的;第二,W3C對體系結(jié)構(gòu)的定義只考慮了那些被實(shí)現(xiàn)和部署的組件,而沒有從建造體系結(jié)構(gòu)的科學(xué)、技巧或?qū)嵺`來考慮。 Cbdi推薦的SOA的常用定義為:
策略、實(shí)踐、框架,它們按與服務(wù)消費(fèi)者相關(guān)的粒度將應(yīng)用程序功能作為服務(wù)集提供給用戶使用??梢哉{(diào)用、發(fā)布、和發(fā)現(xiàn)服務(wù),并使用一種單一的基于標(biāo)準(zhǔn)的接口形式從具體的實(shí)現(xiàn)中抽象出來。 (CBDI)
CBDI將SOA定義為一種使用了特定的策略、實(shí)踐和框架的結(jié)構(gòu),按照特定的規(guī)范來交付服務(wù)。典型的例子包括特定的粒度,獨(dú)立于實(shí)現(xiàn),符合標(biāo)準(zhǔn)。這些定義強(qiáng)調(diào)了用web服務(wù)接口可以提供的服務(wù)形式。但是更高質(zhì)量的要求,如可重用性和獨(dú)立性于實(shí)現(xiàn),只能夠通過在設(shè)計(jì)和建造過程中使用一些技術(shù)來實(shí)現(xiàn),這些增加的目標(biāo)已經(jīng)超出了使用web服務(wù)所支持的基本的交互性。
很容易得出結(jié)論,轉(zhuǎn)移到面向服務(wù)(Service Orientation )實(shí)際上是隨著web服務(wù)開始的—大約三年多前。然而,Web服務(wù)僅僅是漫長道路的開始一步。服務(wù)的概念是組件思想不可分割的一部分,顯然,分布式體系結(jié)構(gòu)是早期的面向服務(wù)的體系結(jié)構(gòu)的嘗試。認(rèn)清web服務(wù)是更廣泛的SOA藍(lán)圖的一部分是很重要的。 Web服務(wù)是符合WSnn協(xié)議的功能的編程接口。這樣Web服務(wù)為我們提供了一定的體系結(jié)構(gòu)的特點(diǎn),尤其是平臺獨(dú)立性,松散耦合,自描述和服務(wù)發(fā)現(xiàn)功能。由于接口的形式化,它們可以支持服務(wù)提供者和消費(fèi)者之間的形式化的分離。
服務(wù)是一個重要概念。Web服務(wù)是一套協(xié)議,通過這些協(xié)議可以按技術(shù)獨(dú)立的標(biāo)準(zhǔn)形式來發(fā)布和發(fā)現(xiàn)服務(wù)。
雖然Web服務(wù)越來越多地用于SOA,但事實(shí)上Web服務(wù)并不是SOA的固有組件。SOA在這一方面潛在性更加廣泛,而不僅僅是定義服務(wù)實(shí)現(xiàn)、以及從提供者和消費(fèi)者的角度來定位服務(wù)質(zhì)量。CBD和組件技術(shù)之間有相同之處,例如,從技術(shù)角度看,COM和包裝了地址組件的UML組件,但是CBD或是基于組件的軟件工程(CBSE)是規(guī)則,通過這些規(guī)則可以確保正在建造的組件能和業(yè)務(wù)保持一致。但從那技術(shù)角度看,CBD,甚至基于組件的軟件工程(CBSE)是保證建造的組件與業(yè)務(wù)相一致的規(guī)則。同樣地,Web服務(wù)僅僅是實(shí)現(xiàn)而已。 SOA是方法,而不僅僅是一個UML組件包裝圖的服務(wù)對等物。
CBDI最近的報(bào)告中闡明了許多SOA的這些特征,和兩個DotCom公司發(fā)布的Web服務(wù)比較,他們使用Web服務(wù)替換通常的基于瀏覽器的訪問,可以讓用戶將提供的功能組合到他們自己的應(yīng)用程序。在一個例子,Web服務(wù)很明顯地成為有意義的業(yè)務(wù)服務(wù)—如支持服務(wù)消費(fèi)者逵價(jià)格、生成列表、或向購物車中增加物品。
相反,另一個組織的服務(wù)是相當(dāng)不同的。它實(shí)現(xiàn)了一個通用目的的API,只是簡單地通過Web服務(wù)來提供創(chuàng)建、讀取、更新和刪除(CRUD)數(shù)據(jù)庫的訪問。雖然這一實(shí)現(xiàn)根本沒有一點(diǎn)錯誤,但它要求用戶理解基礎(chǔ)的模型,并遵守業(yè)務(wù)規(guī)則,以保護(hù)數(shù)據(jù)的完整性。WSDL不描述業(yè)務(wù)或?qū)嶓w內(nèi)容。這是一個不使用SOA的Web服務(wù)的例子。
從技術(shù)的角度看,SOA不僅僅是一個服務(wù)體系結(jié)構(gòu),也包括策略、實(shí)踐和框架,通過這些可以保證服務(wù)被正確提供和消費(fèi)。
所以我們需要一個框架來理解什么構(gòu)成了一個好的服務(wù)。正如我們在以前的例子中看到的,如果我們改變了使用水平,我們需要某種面向服務(wù)的原則(Principles of Service of Service Orientation )來設(shè)置策略、測試基準(zhǔn)等等。
這里,我們可以辨別兩個明顯的集合:
? | 接口相關(guān)的原則—技術(shù)中性、標(biāo)準(zhǔn)化和可消費(fèi)性。 |
? | 設(shè)計(jì)原則—更多的涉及取得優(yōu)質(zhì)的服務(wù),滿足實(shí)際的業(yè)務(wù)需求,使得服務(wù)易于使用,內(nèi)在的可適應(yīng)性,以及易于管理。 |
有趣的是一些已經(jīng)建立起成熟的組件體系結(jié)構(gòu)的組織一定程度上也提到了第二個集合。然而根據(jù)經(jīng)驗(yàn),我們確定大多數(shù)組織已經(jīng)發(fā)現(xiàn)這個級別的規(guī)則難以滿足。雖然在一些核心應(yīng)用程序中為了廣泛的共享和重用而創(chuàng)建了高品質(zhì)的組件,但更一般的是按照短期的投資回收率,一直很難察覺到組件帶來的投資費(fèi)用。
然而將同樣的原則用于服務(wù)時(shí),需要更多地考慮需求,尤其對于那些不是為這一目的而設(shè)計(jì)的IT系統(tǒng)來說,業(yè)務(wù)和IT管理人員需要經(jīng)歷更加陡峭的學(xué)習(xí)曲線才能更好的理解IT系統(tǒng)的成本和收益。這里,我們必須清楚并不是所有的服務(wù)都需要這些特點(diǎn):雖然當(dāng)有多個消費(fèi)者使用服務(wù)時(shí)這一點(diǎn)很重要(尤其是例如當(dāng)需要SOA時(shí)的情況),需求規(guī)格說明要通用化,需要從實(shí)現(xiàn)中抽象出服務(wù)(如早期的dotcom案例研究),消費(fèi)者應(yīng)用程序的開發(fā)人員應(yīng)該不必知道底層的模型和規(guī)則。客戶端應(yīng)用程序的任務(wù)規(guī)格說明必須有精密的形式化的定義,也必須按照粒度的相關(guān)水平來提供服務(wù),要具有靈活性,并易于裝配到業(yè)務(wù)處理過程中。
表1顯示了良好的服務(wù)設(shè)計(jì)的原則,Web 服務(wù)或者SOA 都支持這些特點(diǎn)。
表1 Web 服務(wù)和SOA
Web服務(wù)支持的 | 技術(shù)中心的 | 終端平臺獨(dú)立 |
- | 標(biāo)準(zhǔn)化 | 基于標(biāo)準(zhǔn)的協(xié)議 |
- | 可消費(fèi)性 | 支持自動發(fā)現(xiàn)和使用 |
SOA支持 | 可重用 | 服務(wù)的使用,并非通過復(fù)制代碼/實(shí)現(xiàn)進(jìn)行重復(fù)使用。 |
- | 抽象的 | 將服務(wù)從實(shí)現(xiàn)中抽象出來 |
- | 發(fā)布 | 精確的,發(fā)布服務(wù)接口的功能規(guī)格說明,并非實(shí)現(xiàn) |
- | 形式化 | 服務(wù)提供者和消費(fèi)者的終端位置上任務(wù)的形式化合同。 |
- | 相關(guān)的 | 按用戶可識別的粒度提供的功能,并作為一個有意義的服務(wù) |
如果遵守表1中概括的原則,我們會得到一些有趣的好處:
? | 在業(yè)務(wù)和IT實(shí)現(xiàn)之間有真正的同步。多年來業(yè)務(wù)人員并不真正理解IT體系結(jié)構(gòu)。 使用良好設(shè)計(jì)的服務(wù),我們可以從根本上改善業(yè)務(wù)間的通信,不必進(jìn)行對齊,也不必認(rèn)真地考慮業(yè)務(wù)和IP過程的會聚。 |
? | 一個結(jié)構(gòu)良好的服務(wù)可以提供給我們業(yè)務(wù)使用相關(guān)的管理單元。將服務(wù)提供強(qiáng)制分離讓我們可以理解一個服務(wù)的生命周期費(fèi)用,以及它是如何在業(yè)務(wù)中使用的。 |
? | 當(dāng) 將服務(wù)從實(shí)現(xiàn)中抽象出來時(shí),其交付和合作模型可以有多種選擇方案。在可預(yù)見的將來的任意時(shí)候,沒有人會期待核心企業(yè)應(yīng)用程序?qū)渭兊赝ㄟ^從多個來源裝配 服務(wù)得到。 然而可以完全現(xiàn)實(shí)地認(rèn)為某些服務(wù)將會從外部來源中取得,因?yàn)檫@是更適當(dāng)?shù)孬@取它們的方法。如何,認(rèn)證服務(wù),第三方商品服務(wù)也是一個好例子,它可以交付一個 高級服務(wù), 這是由于其專業(yè)性,以及使用一個受信任的外部代理來改善認(rèn)證的優(yōu)點(diǎn)決定的。 |
如前所述,CBDI建議好的SOA是有關(guān)結(jié)構(gòu)、策略、實(shí)踐和框架的所有事物。這使得使處理事物成為一個實(shí)質(zhì)的考慮因素。
雖然一些組織使用組件也能取得服務(wù)的優(yōu)點(diǎn),但只有相對很少的組織在處理中嚴(yán)格做到提供與消費(fèi)分離。這一點(diǎn)在服務(wù)中很早地就實(shí)現(xiàn)了,因?yàn)槠浣涌趨f(xié)議的形式化,但我們需要承認(rèn)這種分離需要管理。例如,可以很容易地分離服務(wù)和消費(fèi)者的構(gòu)建處理過程,但如果消費(fèi)者處理由開發(fā)服務(wù)的同一團(tuán)隊(duì)開發(fā),則可以容易地按照反映底層實(shí)現(xiàn)的方式來測試服務(wù)。
在SOA中,確保要為提供者和消費(fèi)者至少實(shí)現(xiàn)兩種不同的并且單獨(dú)的處理過程,這一點(diǎn)很關(guān)鍵。
然而,目前用戶對無縫端到端業(yè)務(wù)處理過程的需求,這是使用Web服務(wù)的一個關(guān)鍵驅(qū)動因素,意味著在提供者和消費(fèi)者組織之間經(jīng)常會有清晰的分離,具有潛在的多對多關(guān)系,雖然其中每一方參與者都有不同的目的,但都需要使用相同的服務(wù)。我們推薦開發(fā)組織使用這樣的開發(fā)方式,即使當(dāng)提供和消費(fèi)的處理過程在一起時(shí)也這樣做,可以確保他們在正確地設(shè)計(jì)可以容納未來需求的服務(wù)。
對于消費(fèi)者,必須組織處理過程,使得只有服務(wù)接口起作用,并且不依賴于服務(wù)實(shí)現(xiàn)的知識。如果能做到這一點(diǎn),靈活性所帶來的益處自然會增加,因?yàn)榉?wù)設(shè)計(jì)者不能對消費(fèi)者行為做任何假設(shè)。不論消費(fèi)者如何使用服務(wù),服務(wù)設(shè)計(jì)者必須在消費(fèi)者可以使用服務(wù)的范圍內(nèi)提供形式化的說明和合同。消費(fèi)者開發(fā)人員只需要知道服務(wù)在哪里,服務(wù)的功能,以及如何使用服務(wù)。 接口實(shí)際上是的唯一一件對消費(fèi)者重要的事情,它定義了服務(wù)如何進(jìn)行交互。
相似的,雖然提供者有非常不同的一套關(guān)注點(diǎn),要求開發(fā)和交付的服務(wù)可以在完全分離的處理過程中使用服務(wù)消費(fèi)者。提供者注意的焦點(diǎn)因此再一次落在接口上—即描述和合同。
另一種觀點(diǎn)是考慮提供者和消費(fèi)者之間合作的本質(zhì)。乍一看 辦法的看一看到這個將回想自然的那合作之間提供者和消費(fèi)者。乍一看你可能會認(rèn)為提供者和消費(fèi)量所擁有的實(shí)現(xiàn)和規(guī)定之間有清晰的區(qū)別。 然而如果我們從合作的角度看待這些頂層的處理過程,我們將看到非常不同的情景。
我們擁有的是很多處理區(qū)域(依賴于服務(wù)的本質(zhì)),提供者和消費(fèi)者之間有深層的合作。潛在地,我們需要對軟件交付處理進(jìn)行重要的重建。雖然在基于服務(wù)的處理過程中有兩個主要的參與方,我們的結(jié)論是我們需要管理三個主要的處理區(qū)域。在經(jīng)過分解后,我們認(rèn)為以下是主要的頂層處理過程。
? | 交付服務(wù)實(shí)現(xiàn)的處理過程。
| ||||||||||
? | 服務(wù)的提供—將服務(wù)的生命周期作為一個可重用的產(chǎn)出品來看待。
| ||||||||||
? | 消費(fèi)處理過程。
|
采取這種觀點(diǎn)的益處是,處理的協(xié)作方面都主要包括在服務(wù)提供的處理區(qū)域中。服務(wù)提供的處理區(qū)域非常重要,這是因?yàn)閰f(xié)議的本質(zhì)對于處理需求具有非常重要的影響。 或許有兩種主要的模式可用于設(shè)計(jì)消費(fèi)者/提供者協(xié)作:
? | 協(xié)商—消費(fèi)者和提供者一起對服務(wù)達(dá)成協(xié)議 當(dāng)開發(fā)新的服務(wù)時(shí),消費(fèi)者和提供者有機(jī)會對服務(wù)的內(nèi)容以及如何工作達(dá)成協(xié)議。業(yè)界有很多參與方的業(yè)務(wù)會彼此相關(guān),服務(wù)也為眾多提供者所共同使用。業(yè)界需要標(biāo)準(zhǔn)化這些服務(wù)是必不可少的。 例子包括:
| ||||||||||
? | 示例—這就是它,采取或者放棄。協(xié)作場景中的一方可能只是簡單地規(guī)定需要使用的服務(wù)。 有時(shí)這種服務(wù)已經(jīng)存在,用戶僅需要選擇是否使用它。 例子包括:
|
我們考查的這個處理過程視圖是考慮所需要的體系結(jié)構(gòu)的類型和興趣范圍,責(zé)任和完整性這些問題的先決條件。對于SOA,在圖1中顯示了三種重要的體系結(jié)構(gòu)觀點(diǎn)。
? | 應(yīng)用程序體系結(jié)構(gòu)。這是一種面向業(yè)務(wù)的解決方案,消費(fèi)服務(wù)來自于一個或多個提供者,并將它們集成到業(yè)務(wù)處理過程中。 |
? | 服務(wù)體系結(jié)構(gòu)。這為實(shí)現(xiàn)和消費(fèi)應(yīng)用程序之間提供了一個橋梁,創(chuàng)建了服務(wù)集的一個邏輯視圖,我們可以使用這些服務(wù),通過通用的接口和管理體系結(jié)構(gòu)來調(diào)用它們。 |
? | 組件體系結(jié)構(gòu)。它描述了支持實(shí)現(xiàn)的應(yīng)用程序、業(yè)務(wù)對象和它們的實(shí)現(xiàn)的多種環(huán)境。 |
圖⒈三種體系結(jié)構(gòu)視圖
從消費(fèi)者或提供者的觀點(diǎn)來看待這些體系結(jié)構(gòu)。這種體系結(jié)構(gòu)的關(guān)鍵在于服務(wù)的消費(fèi)者不應(yīng)該關(guān)心服務(wù)的實(shí)現(xiàn)細(xì)節(jié),只關(guān)心服務(wù)提供的功能。體系結(jié)構(gòu)的實(shí)現(xiàn)可能會隨不同的提供者而有所變化,但它們?nèi)蕴峁┫嗤姆?wù)。相似的,提供者也不應(yīng)該關(guān)心使用服務(wù)的應(yīng)用程序。新的不可預(yù)見的應(yīng)用程序也將會重用相同的服務(wù)。
消費(fèi)者關(guān)注的是他們的應(yīng)用程序的體系結(jié)構(gòu),使用的服務(wù),而并非組件體系結(jié)構(gòu)的細(xì)節(jié)。他們對具有共同利益的通用業(yè)務(wù)對象的特定級別的細(xì)節(jié)感興趣,如提供者和消費(fèi)者需要共享一個訂單的共同視圖。 但是消費(fèi)者不需要知道訂單組件和數(shù)據(jù)庫的實(shí)現(xiàn)細(xì)節(jié)。
相似的,提供者關(guān)注的是組件體系結(jié)構(gòu),服務(wù)體系結(jié)構(gòu),而并非應(yīng)用程序體系結(jié)構(gòu)。此外,他們二者需要了解某些基礎(chǔ)應(yīng)用程序的信息,例如能設(shè)置任意的順序規(guī)則、前置和后置條件。但提供者不會對消費(fèi)應(yīng)用程序的每一細(xì)節(jié)感興趣。
SOA的核心是需要能夠?qū)⒎?wù)作為一階可交付對象來管理。這就是我們經(jīng)常強(qiáng)調(diào)的,服務(wù)的關(guān)鍵在于提供者和消費(fèi)者之間的通信。 0>因此我們需要的服務(wù)體系結(jié)構(gòu)要保證服務(wù)不會退化為接口的狀態(tài),相反他們有自己的標(biāo)識,可以單獨(dú)或按集合來管理。
CBDI開發(fā)的業(yè)務(wù)服務(wù)總線Business Service Bus (BSB) 概念的正好滿足這一要求。BSB 是一種某一特定業(yè)務(wù)領(lǐng)域的可用服務(wù)的邏輯視圖,例如人力資源或后后勤管理。 它能幫助我們解答如下問題:
? | 我們需要什么樣的服務(wù)? |
? | 我們能使用哪些服務(wù)? |
? | 哪些服務(wù)能進(jìn)同時(shí)操作? (共用的語意,業(yè)務(wù)規(guī)則) |
? | 有何種替代服務(wù)可以使用? |
? | 服務(wù)與服務(wù)版本間的相關(guān)性是什么? |
不是讓開發(fā)人員去發(fā)現(xiàn)單獨(dú)的服務(wù),并將其放入上下文中,相反,Business Service Bus 是開發(fā)人員的起點(diǎn),指導(dǎo)他們按照領(lǐng)域中一套一致的規(guī)則來開發(fā)。
BSB的目的是能根據(jù)bus 級別,而不是為單獨(dú)的服務(wù)來制定通用的規(guī)格說明、策略等。例如,一個bus上的服務(wù)將完全遵循相同的語義標(biāo)準(zhǔn),服從相同的安全策略,全部指向相同的領(lǐng)域全局模型。它簡化了一些通用的、低級的業(yè)務(wù)基礎(chǔ)服務(wù)的實(shí)現(xiàn),這些服務(wù)可以聚集到同一bus的其它高級業(yè)務(wù)服務(wù)中(例如,它們都可以使用相同的產(chǎn)品代碼驗(yàn)證服務(wù))。每一業(yè)務(wù)領(lǐng)域都開發(fā)一個詞匯表和一個代表處理過程和對象的業(yè)務(wù)模型。
服務(wù)體系結(jié)構(gòu)的關(guān)鍵問題在于:“發(fā)布到業(yè)務(wù)服務(wù)Bus中的服務(wù)范圍是什么?”一個簡單的回答是:“某種業(yè)務(wù)級別的抽象”。然而這種回答太空泛,解釋很多—最好是一些啟發(fā)式的,以確保服務(wù)是最小公分母,能達(dá)到業(yè)務(wù)標(biāo)準(zhǔn),面向消費(fèi)者,達(dá)成協(xié)議的,對業(yè)務(wù)處理具有意義。關(guān)鍵的一點(diǎn)就是,有一個聚集和合作的過程,并且其發(fā)生應(yīng)該獨(dú)立于實(shí)現(xiàn)組件,如圖2所示。通過分隔實(shí)現(xiàn),可以取得一定水平的靈活性,可以調(diào)整已經(jīng)提供的服務(wù)而不用修改底層組件。 原則上,需要用抽象級別來保證服務(wù)位于與消費(fèi)者相關(guān)或相適于某一級別。這些級別可能是以下的一個或多個:
? | 業(yè)務(wù)服務(wù) |
? | 面向消費(fèi)者的服務(wù) |
? | 由提供者和消費(fèi)者兩者協(xié)商的服務(wù) |
? | 將低級的基于實(shí)現(xiàn)的服務(wù)組合某些對業(yè)務(wù)有意義的事物中 |
? | 粗粒度的 |
? | 適用于外部使用的 |
? | 兼容以前的連接設(shè)計(jì) |
圖⒉抽象的級別
實(shí)現(xiàn)分離的關(guān)鍵在于定義一個虛擬平臺,它等價(jià)于許多相關(guān)的真實(shí)平臺。虛擬平臺的目標(biāo)是盡可能完整的分離服務(wù)和實(shí)現(xiàn),允許建造在各種實(shí)現(xiàn)平臺之上的組件提供不依賴于實(shí)現(xiàn)的服務(wù)。
虛擬的SOA平臺由一個包含開發(fā)和實(shí)現(xiàn)平臺的計(jì)劃藍(lán)圖組成。這一藍(lán)圖為應(yīng)用程序的開發(fā)和實(shí)現(xiàn)提供指導(dǎo),確保發(fā)布的服務(wù)能遵循相同的構(gòu)建原則,這些原則與服務(wù)的管理和消費(fèi)者視圖相關(guān)。
當(dāng)許多不同的應(yīng)用程序能共享相同的結(jié)構(gòu),結(jié)構(gòu)的各部分具有相同的關(guān)系時(shí),我們就會具有一種稱之公共體系結(jié)構(gòu)的結(jié)構(gòu)。這種結(jié)構(gòu)可能會以多種方式實(shí)現(xiàn):它或許是一個公共的技術(shù)環(huán)境,一套策略、框架或者是實(shí)踐。 一個虛擬平臺的示例平臺組件包括:
? | 主機(jī)環(huán)境 |
? | 消費(fèi)者環(huán)境 |
? | 中間件 |
? | 集成和裝配環(huán)境 |
? | 開發(fā)環(huán)境 |
? | 資產(chǎn)管理 |
? | 發(fā)布&發(fā)現(xiàn) |
? | Service 服務(wù)級別管理 |
? | 安全性基礎(chǔ)結(jié)構(gòu) |
? | 監(jiān)視&度量 |
? | 診斷&錯誤處理 |
? | 消費(fèi)者/預(yù)訂者管理 |
? | Web服務(wù)協(xié)議 |
? | 身份管理 |
? | 認(rèn)證 |
? | 部署&版本化管理 |
對于SOA來說,最適宜的實(shí)現(xiàn)體系結(jié)構(gòu)是基于組件的體系結(jié)構(gòu)。很多人都熟悉處理和實(shí)體組件的概念,也了解組件體系結(jié)構(gòu)的固有的穩(wěn)定性和靈活性,它在業(yè)務(wù)實(shí)體和組件實(shí)現(xiàn)之間提供了一個一對一的映射。 企業(yè)SOA(ESOA)同時(shí)帶來了兩個主線程—Web 服務(wù)和CBD(或者CBSE)。結(jié)果是,一個企業(yè)SOA既可應(yīng)用于外部可用的Web 服務(wù),也可以應(yīng)用于專為內(nèi)部使用而建造或指定的核心業(yè)務(wù)組件服務(wù)。更深入地探討ESOA已超出了本文的范圍。有關(guān)企業(yè)SOA更多的主題有一份5部分的報(bào)告“CBDI Report Series”。
SOA的目標(biāo)是實(shí)現(xiàn)世界范圍內(nèi)的協(xié)作服務(wù)網(wǎng)絡(luò),可以在ServiceBus發(fā)布和調(diào)用這些服務(wù)。采用SOA是實(shí)現(xiàn)業(yè)務(wù)靈活性和Web服務(wù)承諾的IT靈活性的本質(zhì)要求。這些優(yōu)點(diǎn)不僅只是從技術(shù)角度和采用Web服務(wù)協(xié)議才會體現(xiàn)出來,它們也需要創(chuàng)建面向服務(wù)的環(huán)境,這一環(huán)境要基于本文提到的以下關(guān)鍵原則:
? | 服務(wù)是一個重要的概念。Web服務(wù)是一套協(xié)議,可以通過這些協(xié)議按照技術(shù)中性的標(biāo)準(zhǔn)形式來發(fā)布、發(fā)現(xiàn)和使用服務(wù)。 |
? | 從技術(shù)的角度看,SOA不僅僅是一個服務(wù)體系結(jié)構(gòu),也包括策略、實(shí)踐和框架,通過這些可以保證服務(wù)被正確提供和消費(fèi)。 |
? | 在SOA中,確保要為提供者和消費(fèi)者至少實(shí)現(xiàn)兩種不同的并且分離的處理過程,這一點(diǎn)很關(guān)鍵。 |
? | 不是讓開發(fā)人員去發(fā)現(xiàn)單獨(dú)的服務(wù),并將其放入上下文中,相反,Business Service Bus 是開發(fā)人員的起點(diǎn),指導(dǎo)他們按照領(lǐng)域中聚合的一套規(guī)則來開發(fā)。 |
此外,CBDII除了提供有關(guān)移植到Web服務(wù)和SOA所需要的規(guī)劃和管理,它們也提供了Web Services Roadmap ,一套可以在 http://roadmap.cbdiforum.com/ 免費(fèi)使用的資源。
關(guān)于作者
DavidSprott,CBDI的CEO和主分析員,是一位軟件業(yè)界的富有經(jīng)驗(yàn)的人,擅長高級應(yīng)用程序交付的著名的評論員和分析員。自1997年以來,他創(chuàng)辦并領(lǐng)導(dǎo)了CBDI,一個獨(dú)立的調(diào)查研究機(jī),為業(yè)界提供有關(guān)業(yè)務(wù)軟件創(chuàng)建、重用和管理方面的關(guān)注焦點(diǎn)。 David 的聯(lián)系郵箱是david.sprott@cbdiforum.com。
LawrenceWilkes CBDI的技術(shù)指導(dǎo)和主分析員,是一位積極的評論員,講師和作者,擅長Web服務(wù)、面向服務(wù)的體系結(jié)構(gòu)、基于組件的開發(fā)和應(yīng)用程序集成方法。Lawrence有25年的IT從業(yè)經(jīng)驗(yàn),從事過多種行業(yè)的終端用戶組織,以及軟件供應(yīng)商和顧問。 Lawrence的聯(lián)系郵箱是lawrence.wilkes@cbdiforum.com。