下面是來自IBM的關(guān)于SOA的一篇好文,以前念書的時(shí)候看過,不是特別理解,今天翻出來再看看感覺真的講的很不錯(cuò)。很多人對SOA的理解更多的只是在聽說的程度,因此聽得很多,但卻實(shí)際并不是很了解到底什么是SOA,所以希望借這篇文章跟大家分享對SOA的理解和作為自己重新加深理解的學(xué)習(xí)筆記,同時(shí)能大家一起討論一下。
相信大家看了這篇文章后能對SOA有個(gè)更清晰的看法。
來自Min Luo, Mark Endrei, Philippe Comte,Pal Krogdahl, Jenny Ang, Tony Newling
, International Technical Support Organization, Raleigh Center
2004 年 6 月 01 日
在這一節(jié)中,我們簡要地描述了面向服務(wù)的體系結(jié)構(gòu)的發(fā)展。然后,我們探究了面向組件的開發(fā)與面向服務(wù)的體系結(jié)構(gòu)之間的關(guān)系,并且說明了如何將組件作為實(shí)現(xiàn)服務(wù)的基礎(chǔ)設(shè)施。
第一部分:新方法的商業(yè)驅(qū)動(dòng)力
雖然 IT 經(jīng)理一直面臨著削減成本和最大限度地利用現(xiàn)有技術(shù)的難題,但是與此同時(shí),他們還必須不斷地努力,以期更好地服務(wù)客戶,更快地響應(yīng)企業(yè)戰(zhàn)略重點(diǎn),從而贏得更大的競爭力。
在所有這些壓力之下,有兩個(gè)基本的主題:異構(gòu)和改變。現(xiàn)在,大多數(shù)企業(yè)都有各種各樣的系統(tǒng)、應(yīng)用程序以及不同時(shí)期和技術(shù)的體系結(jié)構(gòu)。集成來自多個(gè)廠商跨不同平臺的產(chǎn)品簡直就像一場噩夢。但是我們也不能單單使用一家廠商的產(chǎn)品,因?yàn)楦淖儜?yīng)用程序套件和支持基礎(chǔ)設(shè)施是如此之難。
在當(dāng)今 IT 經(jīng)理面臨的問題之中,改變是第二個(gè)主題。全球化和電子商務(wù)加快了改變的步伐。全球化帶來了激烈的競爭,產(chǎn)品周期縮短了,每個(gè)公司都想贏得超過競爭對手的優(yōu)勢。在競爭產(chǎn)品和可以從 Internet 上獲得的大量產(chǎn)品信息的推動(dòng)下,客戶要求更快速地進(jìn)行改變。因而,在改進(jìn)產(chǎn)品和服務(wù)方面展開的競爭進(jìn)一步加劇了。
為了滿足客戶提出的越來越多的新要求,技術(shù)方面的改進(jìn)也在不斷地加快。企業(yè)必須快速地適應(yīng)這種改變,否則就難以生存,更別提在這個(gè)動(dòng)蕩不安競爭激烈的環(huán)境中取得成功了,而 IT 基礎(chǔ)設(shè)施必須支持企業(yè)提高適應(yīng)能力。
因此,企業(yè)組織正在從上世紀(jì)八十年代或更早的時(shí)期的相互隔離的垂直業(yè)務(wù)部門,到上世紀(jì)八十年代和九十年代關(guān)注業(yè)務(wù)流程的水平結(jié)構(gòu),向新的生態(tài)系統(tǒng)業(yè)務(wù)范例發(fā)展。重點(diǎn)是擴(kuò)展供應(yīng)鏈,支持客戶和合作伙伴訪問業(yè)務(wù)服務(wù)。第 19 頁的圖 2-1 展示了企業(yè)的這種發(fā)展。
圖 2-1 企業(yè)的發(fā)展
我如何使我的 IT 環(huán)境更靈活且更快地響應(yīng)不斷改變的業(yè)務(wù)需求呢? 我們?nèi)绾问惯@些異構(gòu)系統(tǒng)和應(yīng)用程序盡可能無縫地進(jìn)行通信呢?我們?nèi)绾芜_(dá)到企業(yè)目標(biāo)而不使企業(yè)走向破產(chǎn)的深淵呢?
IT 響應(yīng)者/支持者是隨著企業(yè)的這種發(fā)展而并行發(fā)展的,如圖 2-2 所示。現(xiàn)在,許多 IT 經(jīng)理和專業(yè)人員都同樣相信,我們真的快找到了一種滿意的答案——面向服務(wù)的體系結(jié)構(gòu)。
圖 2-2 體系結(jié)構(gòu)的發(fā)展
圖 2-2 體系結(jié)構(gòu)的發(fā)展
為了減少異構(gòu)性、互操作性和不斷改變的要求的問題,這樣的體系結(jié)構(gòu)應(yīng)該提供平臺來構(gòu)建具有下列特征的應(yīng)用程序服務(wù):
基于這樣的面向服務(wù)的體系結(jié)構(gòu),服務(wù)使用者甚至不必關(guān)心與之通信的特定服務(wù),因?yàn)榈讓踊A(chǔ)設(shè)施或服務(wù)“總線”將代表使用者做出適當(dāng)?shù)倪x擇。基礎(chǔ)設(shè)施對請求者隱藏了盡可能多的技術(shù)。特別地,來自不同實(shí)現(xiàn)技術(shù)(如 J2EE 或 .NET)的技術(shù)規(guī)范不應(yīng)該影響 SOA 用戶。如果已經(jīng)存在一個(gè)服務(wù)實(shí)現(xiàn),我們就還應(yīng)該重新考慮用一個(gè)“更好”的服務(wù)實(shí)現(xiàn)來代替,新的服務(wù)實(shí)現(xiàn)必須具有更好的服務(wù)質(zhì)量。
第二部分:作為解決方案的面向服務(wù)體系結(jié)構(gòu)
自從“軟件危機(jī)”促進(jìn)軟件工程的開創(chuàng)以來,IT 界一直在努力尋求解決上述問題的方案。在過去幾年里,下面簡要概述的核心技術(shù)進(jìn)展使我們走到了今天。我們將簡要討論這些核心技術(shù),而我們重點(diǎn)關(guān)注的將是這些技術(shù)如何幫助解決 IT 問題。
面向?qū)ο蟮姆治龊驮O(shè)計(jì)
在“Applying UML and Patterns - An Introduction to Object-Oriented Analysis and Design”中,Larman 將面向?qū)ο蟮姆治龊驮O(shè)計(jì)的本質(zhì)描述為“從對象(物體、概念或?qū)嶓w)的角度考慮問題域和邏輯解決方案”。在“Object-Oriented SoftwareEngineering: A Use Case Driven Approach”中,Jacobson 等將這些對象定義為“特點(diǎn)在于具有許多操作和狀態(tài)(記憶這些操作的影響)的物體”。
在面向?qū)ο蟮姆治鲋校@樣的對象是用問題域來標(biāo)識和描述的,而在面向?qū)ο蟮脑O(shè)計(jì)中,它們轉(zhuǎn)變成邏輯軟件對象,這些對象最終將用面向?qū)ο蟮木幊陶Z言進(jìn)行實(shí)現(xiàn)。
通過面向?qū)ο蟮姆治龊驮O(shè)計(jì),可以封裝對象(或?qū)ο蠼M)的某些方面,以簡化復(fù)雜業(yè)務(wù)場景的分析。為了降低復(fù)雜性,也可以抽象對象的某些特征,這樣就可以只捕獲重要或本質(zhì)的方面。
基于組件的設(shè)計(jì)并不是一種新技術(shù)。它是從對象范例中自然發(fā)展而來的。在面向?qū)ο蟮姆治龊驮O(shè)計(jì)的早期,細(xì)粒度的對象被標(biāo)榜為提供“重用”的機(jī)制,但是這樣的對象的粒度級別太低了,沒有適當(dāng)?shù)臉?biāo)準(zhǔn)可以用來使重用廣泛應(yīng)用于實(shí)踐之中。在應(yīng)用程序開發(fā)和系統(tǒng)集成中,粗粒度組件越來越成為重用的目標(biāo)。這些粗粒度對象通過內(nèi)聚一些更細(xì)粒度的對象來提供定義良好的功能。通過這種方式,還可以將打包的解決方案套件封裝成這樣的“組件”。
一旦組織在更高層次上實(shí)現(xiàn)了基于完全獨(dú)立的功能組件的完備體系結(jié)構(gòu),就可以將支持企業(yè)的應(yīng)用程序劃分成一組粒度越來越大的組件。可以將組件看作是打包、管理和公開服務(wù)的機(jī)制。它們可以共同使用一組技術(shù):實(shí)現(xiàn)企業(yè)級用況的大粒度企業(yè)組件可以通過更新的面向?qū)ο蟮能浖_發(fā)與遺留系統(tǒng)相結(jié)合來實(shí)現(xiàn)
面向服務(wù)的設(shè)計(jì)
在“Component-Based Development for Enterprise Systems”中,Allen 涉及了服務(wù)的概念,“它是將組件描述成提供相關(guān)服務(wù)的物理黑盒封裝的可執(zhí)行代碼單元。它的服務(wù)只能通過一致的已發(fā)布接口(它包括交互標(biāo)準(zhǔn))進(jìn)行訪問。組件必須能夠連接到其他組件(通過通信接口)以構(gòu)成一個(gè)更大的組”。服務(wù)通常實(shí)現(xiàn)為粗粒度的可發(fā)現(xiàn)軟件實(shí)體,它作為單個(gè)實(shí)例存在,并且通過松散耦合的基于消息通信模型來與應(yīng)用程序和其他服務(wù)交互。第 22 頁的圖 2-3 展示了重要的面向服務(wù)術(shù)語:
-
服務(wù):邏輯實(shí)體,由一個(gè)或多個(gè)已發(fā)布接口定義的契約。
-
服務(wù)提供者:實(shí)現(xiàn)服務(wù)規(guī)范軟件實(shí)體。
-
服務(wù)使用者(或請求者):調(diào)用服務(wù)提供者的軟件實(shí)體。傳統(tǒng)上,它稱為“客戶端”。服務(wù)使用者可以是終端用戶應(yīng)用程序或另一個(gè)服務(wù)。
-
服務(wù)定位器:一種特殊類型的服務(wù)提供者,它作為一個(gè)注冊中心,允許查找服務(wù)提供者接口和服務(wù)位置。
-
服務(wù)代理:一種特殊類型的服務(wù)提供者,它可以將服務(wù)請求傳送到一個(gè)或多個(gè)其他的服務(wù)提供者。
圖 2-3 面向服務(wù)的術(shù)語
基于接口的設(shè)計(jì)
在組件和服務(wù)開發(fā)中,都需要進(jìn)行接口設(shè)計(jì),這樣軟件實(shí)體就可以實(shí)現(xiàn)和公開其定義的關(guān)鍵部分。因此,在基于組件和面向服務(wù)的系統(tǒng)中,“接口”的概念對于成功的設(shè)計(jì)非常關(guān)鍵。下面是一些與接口有關(guān)的重要定義:
-
接口:定義一組公共方法簽名,它按照邏輯分組但是沒有提供實(shí)現(xiàn)。接口定義服務(wù)的請求者和提供者之間的契約。接口的任何實(shí)現(xiàn)都必須提供所有的方法。
-
已發(fā)布接口:一種可唯一識別和可訪問的接口,客戶端可以通過注冊中心來發(fā)現(xiàn)它。
-
公共接口:一種可訪問的接口,可供客戶端使用,但是它沒有發(fā)布,因而需要關(guān)于客戶端部分的靜態(tài)知識。
-
雙接口:通常是成對開發(fā)的接口,這樣,一個(gè)接口就依賴于另一個(gè)接口;例如,客戶端必須實(shí)現(xiàn)一個(gè)接口來調(diào)用請求者,因?yàn)樵摽蛻舳私涌谔峁┝四承┗卣{(diào)機(jī)制。
第 23 頁的圖 2-4 定義了客戶關(guān)系管理 (CRM) 服務(wù)的 UML 定義,它表示為一個(gè) UML 組件,實(shí)現(xiàn)接口 AccountManagement、ContactManagement 和 SystemsManagement。在這些接口中只有頭兩個(gè)接口是已發(fā)布接口,不過,后者是公共接口。注意,SystemsManagement 接口和 ManagementService 接口構(gòu)成了雙接口。CRMservice 可以實(shí)現(xiàn)許多這樣的接口,但是它以多種方式行為的能力取決于客戶端在行為的實(shí)現(xiàn)方面是否允許有大的靈活性。甚至有可能給特定類型的客戶端提供不同或附加的服務(wù)。在一些運(yùn)行時(shí)環(huán)境中,這樣的功能也用于在單個(gè)組件或服務(wù)上支持相同接口的不同版本。
圖 2-4 已實(shí)現(xiàn)的服務(wù)
分層應(yīng)用程序體系結(jié)構(gòu)
如前所述,面向?qū)ο蟮募夹g(shù)和語言是實(shí)現(xiàn)組件的極好方式。雖然組件是實(shí)現(xiàn)服務(wù)的最好方法,但是您必須理解的一點(diǎn)是,好的基于組件的應(yīng)用程序未必就構(gòu)成好的面向服務(wù)的應(yīng)用程序。一旦理解了服務(wù)在應(yīng)用程序體系結(jié)構(gòu)中所起的作用,組件開發(fā)人員就很有可能會(huì)利用現(xiàn)有的組件。進(jìn)行這種轉(zhuǎn)變的關(guān)鍵是認(rèn)識到面向服務(wù)的方法意味著附加的應(yīng)用程序體系結(jié)構(gòu)層。第 24 頁中的圖 2-5 演示了如何將技術(shù)層應(yīng)用于程序體系結(jié)構(gòu)以提供粒度更粗的實(shí)現(xiàn)(它更靠近應(yīng)用程序的使用者)。為稱呼系統(tǒng)的這一部分而創(chuàng)造的術(shù)語是“應(yīng)用程序邊界”,它反映了服務(wù)是公開系統(tǒng)的外部視圖的極好方法的事實(shí)(通過內(nèi)部重用并結(jié)合使用傳統(tǒng)組件設(shè)計(jì))。
圖 2-5 應(yīng)用程序?qū)崿F(xiàn)層:服務(wù)、組件、對象
第三部分:近距離審視面向服務(wù)的體系結(jié)構(gòu)
面向服務(wù)的體系結(jié)構(gòu)提供了一種方法,通過這種方法,可以構(gòu)建分布式系統(tǒng)來將應(yīng)用程序功能作為服務(wù)提供給終端用戶應(yīng)用程序或其他服務(wù)。其組成元素可以分成功能元素和服務(wù)質(zhì)量元素。第 25 頁的圖 2-6 展示了體系結(jié)構(gòu)堆棧以及在一個(gè)面向服務(wù)的體系結(jié)構(gòu)可能觀察到的元素。
注意:面向服務(wù)的體系結(jié)構(gòu)堆棧可能是一個(gè)容易引起爭議的問題,因?yàn)楦鞣矫娴闹С终咭呀?jīng)提出了幾種不同的堆棧。我們的堆棧不是作為服務(wù)堆棧提出的。我們之所以在此提出它,是因?yàn)槲覀兿胍罱ㄒ粋€(gè)有用的框架,在本書的剩余章節(jié)中,我們將通過這個(gè)框架來組織對 SOA 的討論。
圖 2-6 面向服務(wù)的體系結(jié)構(gòu)的元素
體系結(jié)構(gòu)堆棧分成兩半,左邊的一半集中于體系結(jié)構(gòu)的功能性方面,而右邊的一半集中于體系結(jié)構(gòu)的服務(wù)質(zhì)量方面。這些元素詳細(xì)描述如下:
功能性方面包括:
-
傳輸是一種機(jī)制,用于將來自服務(wù)使用者的服務(wù)請求傳送給服務(wù)提供者,并且將來自服務(wù)提供者的響應(yīng)傳送給服務(wù)使用者。
-
服務(wù)通信協(xié)議是一種經(jīng)過協(xié)商的機(jī)制,通過這種機(jī)制,服務(wù)提供者和服務(wù)使用者可以就將要請求的內(nèi)容和將要返回的內(nèi)容進(jìn)行溝通。
-
服務(wù)描述是一種經(jīng)過協(xié)商的模式,用于描述服務(wù)是什么、應(yīng)該如何調(diào)用服務(wù)以及成功地調(diào)用服務(wù)需要什么數(shù)據(jù)。
-
服務(wù)描述實(shí)際可供使用的服務(wù)。
-
業(yè)務(wù)流程是一個(gè)服務(wù)的集合,可以按照特定的順序并使用一組特定的規(guī)則進(jìn)行調(diào)用,以滿足業(yè)務(wù)要求。注意,可以將業(yè)務(wù)流程本身看作是服務(wù),這樣就產(chǎn)生了業(yè)務(wù)流程可以由不同粒度的服務(wù)組成的觀念。
-
服務(wù)注冊中心是一個(gè)服務(wù)和數(shù)據(jù)描述的存儲庫,服務(wù)提供者可以通過服務(wù)注冊中心發(fā)布它們的服務(wù),而服務(wù)使用者可以通過服務(wù)注冊中心發(fā)現(xiàn)或查找可用的服務(wù)。服務(wù)注冊中心可以給需要集中式存儲庫的服務(wù)提供其他的功能。
服務(wù)質(zhì)量方面包括:
-
策略是一組條件和規(guī)則,在這些條件和規(guī)則之下,服務(wù)提供者可以使服務(wù)可用于使用者。策略既有功能性方面,也有與服務(wù)質(zhì)量有關(guān)的方面;因此,我們在功能和服務(wù)質(zhì)量兩個(gè)區(qū)中都有策略功能。
-
安全性是規(guī)則集,可以應(yīng)用于調(diào)用服務(wù)的服務(wù)使用者的身份驗(yàn)證、授權(quán)和訪問控制。
-
傳輸是屬性集,可以應(yīng)用于一組服務(wù),以提供一致的結(jié)果。例如,如果要使用一組服務(wù)來完成一項(xiàng)業(yè)務(wù)功能,則所有的服務(wù)必須都完成,或者沒有一個(gè)完成。
-
管理是屬性集,可以應(yīng)用于管理提供的服務(wù)或使用的服務(wù)。
SOA 協(xié)作
圖 2-7 展示了面向服務(wù)的體系結(jié)構(gòu)中的協(xié)作。這些協(xié)作遵循“查找、綁定和調(diào)用”范例,其中,服務(wù)使用者執(zhí)行動(dòng)態(tài)服務(wù)定位,方法是查詢服務(wù)注冊中心來查找與其標(biāo)準(zhǔn)匹配的服務(wù)。如果服務(wù)存在,注冊中心就給使用者提供接口契約和服務(wù)的端點(diǎn)地址。下圖展示了面向服務(wù)的體系結(jié)構(gòu)中協(xié)作支持“查找、綁定和調(diào)用”范例的實(shí)體。
圖 2-7 面向服務(wù)的體系結(jié)構(gòu)中的協(xié)作
面向服務(wù)的體系結(jié)構(gòu)中的角色包括:
-
服務(wù)使用者:服務(wù)使用者是一個(gè)應(yīng)用程序、一個(gè)軟件模塊或需要一個(gè)服務(wù)的另一個(gè)服務(wù)。它發(fā)起對注冊中心中的服務(wù)的查詢,通過傳輸綁定服務(wù),并且執(zhí)行服務(wù)功能。服務(wù)使用者根據(jù)接口契約來執(zhí)行服務(wù)。
-
服務(wù)提供者:服務(wù)提供者是一個(gè)可通過網(wǎng)絡(luò)尋址的實(shí)體,它接受和執(zhí)行來自使用者的請求。它將自己的服務(wù)和接口契約發(fā)布到服務(wù)注冊中心,以便服務(wù)使用者可以發(fā)現(xiàn)和訪問該服務(wù)。
-
服務(wù)注冊中心:服務(wù)注冊中心是服務(wù)發(fā)現(xiàn)的支持者。它包含一個(gè)可用服務(wù)的存儲庫,并允許感興趣的服務(wù)使用者查找服務(wù)提供者接口。
面向服務(wù)的體系結(jié)構(gòu)中的每個(gè)實(shí)體都扮演著服務(wù)提供者、使用者和注冊中心這三種角色中的某一種(或多種)。面向服務(wù)的體系結(jié)構(gòu)中的操作包括:
-
發(fā)布:為了使服務(wù)可訪問,需要發(fā)布服務(wù)描述以使服務(wù)使用者可以發(fā)現(xiàn)和調(diào)用它。
-
發(fā)現(xiàn):服務(wù)請求者定位服務(wù),方法是查詢服務(wù)注冊中心來找到滿足其標(biāo)準(zhǔn)的服務(wù)。
-
綁定和調(diào)用:在檢索完服務(wù)描述之后,服務(wù)使用者繼續(xù)根據(jù)服務(wù)描述中的信息來調(diào)用服務(wù)。
面向服務(wù)的體系結(jié)構(gòu)中的構(gòu)件包括:
-
服務(wù):可以通過已發(fā)布接口使用服務(wù),并且允許服務(wù)使用者調(diào)用服務(wù)。
-
服務(wù)描述:服務(wù)描述指定服務(wù)使用者與服務(wù)提供者交互的方式。它指定來自服務(wù)的請求和響應(yīng)的格式。服務(wù)描述可以指定一組前提條件、后置條件和/或服務(wù)質(zhì)量 (QoS) 級別。
除了動(dòng)態(tài)服務(wù)發(fā)現(xiàn)和服務(wù)接口契約的定義之外,面向服務(wù)的體系結(jié)構(gòu)還具有以下特征:
-
服務(wù)是自包含和模塊化的。
-
服務(wù)支持互操作性。
-
服務(wù)是松散耦合的。
-
服務(wù)是位置透明的。
-
服務(wù)是由組件組成的組合模塊。
這些特征也是滿足電子商務(wù)按需操作環(huán)境的要求的主要特征,如第 301 頁“e-business on demand and Service-oriented architecture”所定義的。
最后,我們需要說明的是,面向服務(wù)的體系結(jié)構(gòu)并不是一個(gè)新的概念。如圖 2-8 所示,面向服務(wù)的體系結(jié)構(gòu)所涉及的技術(shù)至少包括 CORBA、DCOM 和 J2EE。面向服務(wù)的體系結(jié)構(gòu)的早期采用者還曾成功地基于消息傳遞系統(tǒng)(如 IBM WebSphere MQ)創(chuàng)建過他們自己的面向服務(wù)企業(yè)體系結(jié)構(gòu)。最近,SOA 的活動(dòng)舞臺已經(jīng)擴(kuò)展到包括 World Wide Web (WWW) 和 Web 服務(wù)。
圖 2-8 面向服務(wù)的體系結(jié)構(gòu)的不同實(shí)現(xiàn)
SOA 范圍中的服務(wù)
在面向服務(wù)的體系結(jié)構(gòu)中,映射到業(yè)務(wù)功能的服務(wù)是在業(yè)務(wù)流程分析的過程中確定的。服務(wù)可以是細(xì)粒度的,也可以是粗粒度的,這取決于業(yè)務(wù)流程。每個(gè)服務(wù)都有定義良好的接口,通過該接口就可以發(fā)現(xiàn)、發(fā)布和調(diào)用服務(wù)。 企業(yè)可以選擇將自己的服務(wù)向外發(fā)布到業(yè)務(wù)合作伙伴,也可以選擇在組織內(nèi)部發(fā)布服務(wù)。服務(wù)還可以由其他服務(wù)組合而成。
服務(wù)與組件
服務(wù)是粗粒度的處理單元,它使用和產(chǎn)生由值傳送的對象集。它與編程語言術(shù)語中的對象不同。相反,它可能更接近于業(yè)務(wù)事務(wù)(如 CICS 或 IMS 事務(wù))的概念而不是遠(yuǎn)程 CORBA 對象的概念。
服務(wù)是由一些組件組成的,這些組件一起工作,共同提供服務(wù)所請求的業(yè)務(wù)功能。因此,相比之下,組件比服務(wù)的粒度更細(xì)。另外,雖然服務(wù)映射到業(yè)務(wù)功能,但是組件通常映射到業(yè)務(wù)實(shí)體和操作它們的業(yè)務(wù)規(guī)則。作為一個(gè)示例,讓我們看一看 WS-I 供應(yīng)鏈管理(WS-I Supply Chain Management)樣本的定購單(PurchaseOrder)組件模型,如圖 2-9 所示。
圖 2-9 定購單組件模型
在基于組件的設(shè)計(jì)中,可以創(chuàng)建組件來嚴(yán)格匹配業(yè)務(wù)實(shí)體(如顧客(Customer)、定購單(Purchase Order)、定購項(xiàng)(Order Item)),并且封裝匹配這些實(shí)體所期望的行為的行為。
例如,定購單(Purchase Order)組件提供獲取關(guān)于已定購的產(chǎn)品列表和定購的總額的信息的功能;定購項(xiàng)(Order Item)組件提供獲取關(guān)于已定購的產(chǎn)品的數(shù)量和價(jià)格的信息的功能。每個(gè)組件的實(shí)現(xiàn)都封裝在接口的后面。因此,定購單(Purchase Order)組件的用戶不知道定購單(Purchase Order)表的模式、計(jì)算稅金的算法、以及定單總額中的回扣和/或折扣。
在面向服務(wù)的設(shè)計(jì)中,不能基于業(yè)務(wù)實(shí)體設(shè)計(jì)服務(wù)。相反,每個(gè)服務(wù)都是管理一組業(yè)務(wù)實(shí)體中的操作的完整單元。例如,顧客服務(wù)將響應(yīng)來自任何其他系統(tǒng)或需要訪問顧客信息的服務(wù)的請求。顧客服務(wù)可以處理更新顧客信息的請求;添加、更新、刪除投資組合;以及查詢顧客的定單歷史。顧客服務(wù)擁有所有與它管理的顧客有關(guān)的數(shù)據(jù),并且能夠代表調(diào)用方進(jìn)行其他服務(wù)查詢,以提供統(tǒng)一的顧客服務(wù)視圖。這意味著服務(wù)是一個(gè)管理器對象,它創(chuàng)建和管理它的一組組件。
第四部分:面向服務(wù)的體系結(jié)構(gòu)所帶來的好處
如前所述,企業(yè)正在處理兩個(gè)問題:迅速地改變的能力和降低成本的要求。為了保持競爭力,企業(yè)必須快速地適應(yīng)內(nèi)部因素(如兼并和重組)或外部因素(如競爭能力和顧客要求)。需要經(jīng)濟(jì)而靈活的 IT 基礎(chǔ)設(shè)施來支持企業(yè)。
我們可以認(rèn)識到,采用面向服務(wù)的體系結(jié)構(gòu)將給我們帶來幾方面的好處,有助于我們在今天這個(gè)動(dòng)蕩的商業(yè)環(huán)境中取得成功:
利用現(xiàn)有的資產(chǎn)。
SOA 提供了一個(gè)抽象層,通過這個(gè)抽象層,企業(yè)可以繼續(xù)利用它在 IT 方面的投資,方法是將這些現(xiàn)有的資產(chǎn)包裝成提供企業(yè)功能的服務(wù)。組織可以繼續(xù)從現(xiàn)有的資源中獲取價(jià)值,而不必重新從頭開始構(gòu)建。
更易于集成和管理復(fù)雜性。
在面向服務(wù)的體系結(jié)構(gòu)中,集成點(diǎn)是規(guī)范而不是實(shí)現(xiàn)。這提供了實(shí)現(xiàn)透明性,并將基礎(chǔ)設(shè)施和實(shí)現(xiàn)發(fā)生的改變所帶來的影響降到最低限度。通過提供針對基于完全不同的系統(tǒng)構(gòu)建的現(xiàn)有資源和資產(chǎn)的服務(wù)規(guī)范,集成變得更加易于管理,因?yàn)閺?fù)雜性是隔離的。當(dāng)更多的企業(yè)一起協(xié)作提供價(jià)值鏈時(shí),這會(huì)變得更加重要。
更快的響應(yīng)和上市速度。
從現(xiàn)有的服務(wù)中組合新的服務(wù)的能力為需要靈活地響應(yīng)苛刻的商業(yè)要求的組織提供了獨(dú)特的優(yōu)勢。通過利用現(xiàn)有的組件和服務(wù),可以減少完成軟件開發(fā)生命周期(包括收集需求、進(jìn)行設(shè)計(jì)、開發(fā)和測試)所需的時(shí)間。這使得可以快速地開發(fā)新的業(yè)務(wù)服務(wù),并允許組織迅速地對改變做出響應(yīng)和減少上市準(zhǔn)備時(shí)間。
減少成本和增加重用。
通過以松散耦合的方式公開的業(yè)務(wù)服務(wù),企業(yè)可以根據(jù)業(yè)務(wù)要求更輕松地使用和組合服務(wù)。這意味資源副本的減少、以及重用和降低成本的可能性的增加。
說到做到
通過 SOA,企業(yè)可以未雨綢繆,為未來做好充分的準(zhǔn)備。SOA 業(yè)務(wù)流程是由一系列業(yè)務(wù)服務(wù)組成的,可以更輕松地創(chuàng)建、修改和管理它來滿足不同時(shí)期的需要。
SOA 提供了靈活性和響應(yīng)能力,這對于企業(yè)的生存和發(fā)展來說是至關(guān)重要的。但是面向服務(wù)的體系結(jié)構(gòu)決不是靈丹妙藥,而遷移到 SOA 也并非一件可以輕而易舉就完成的事情。請別指望一個(gè)晚上就將整個(gè)企業(yè)系統(tǒng)遷移到面向服務(wù)的體系結(jié)構(gòu),我們推薦的方法是,在業(yè)務(wù)要求出現(xiàn)或露出苗頭時(shí)遷移企業(yè)功能的適當(dāng)部分。