SOA and Web services 新手入門[轉(zhuǎn)]
Posted on 2006-09-20 11:39 家有小貓's Java Blog 閱讀(354) 評論(0) 編輯 收藏 所屬分類: SOA什么是面向服務(wù)的體系結(jié)構(gòu)(SOA)?
面向服務(wù)的體系結(jié)構(gòu)(service-oriented architecture,SOA)是一個組件模型,它將應(yīng)用程序的不同功能單元(稱為服務(wù))通過這些服務(wù)之間定義良好的接口和契約聯(lián)系起來。接口是采用中立的方式進(jìn)行定義的,它應(yīng)該獨(dú)立于實(shí)現(xiàn)服務(wù)的硬件平臺、操作系統(tǒng)和編程語言。這使得構(gòu)建在各種這樣的系統(tǒng)中的服務(wù)可以以一種統(tǒng)一和通用的方式進(jìn)行交互。
這種具有中立的接口定義(沒有強(qiáng)制綁定到特定的實(shí)現(xiàn)上)的特征稱為服務(wù)之間的松耦合。 松耦合系統(tǒng)的好處有兩點(diǎn),一點(diǎn)是它的靈活性,另一點(diǎn)是,當(dāng)組成整個應(yīng)用程序的每個服務(wù)的內(nèi)部結(jié)構(gòu)和實(shí)現(xiàn)逐漸地發(fā)生改變時,它能夠繼續(xù)存在。而另一方面,緊 耦合意味著應(yīng)用程序的不同組件之間的接口與其功能和結(jié)構(gòu)是緊密相連的,因而當(dāng)需要對部分或整個應(yīng)用程序進(jìn)行某種形式的更改時,它們就顯得非常脆弱。
對松耦合的系統(tǒng)的需要來源于業(yè)務(wù)應(yīng)用程序需要根據(jù)業(yè)務(wù)的需要變得更加靈活,以適應(yīng)不斷變化的環(huán)境,比如經(jīng)常改變的政策、業(yè)務(wù)級別、業(yè)務(wù)重點(diǎn)、合作伙伴關(guān)系、行業(yè)地位以及其他與業(yè)務(wù)有關(guān)的因素,這些因素甚至?xí)绊憳I(yè)務(wù)的性質(zhì)。我們稱能夠靈活地適應(yīng)環(huán)境變化的業(yè)務(wù)為按需(On demand)業(yè)務(wù),在按需業(yè)務(wù)中,一旦需要,就可以對完成或執(zhí)行任務(wù)的方式進(jìn)行必要的更改。
雖 然面向服務(wù)的體系結(jié)構(gòu)不是一個新鮮事物,但它卻是更傳統(tǒng)的面向?qū)ο蟮哪P偷奶娲P停嫦驅(qū)ο蟮哪P褪蔷o耦合的,已經(jīng)存在二十多年了。雖然基于 SOA 的系統(tǒng)并不排除使用面向?qū)ο蟮脑O(shè)計來構(gòu)建單個服務(wù),但是其整體設(shè)計卻是面向服務(wù)的。由于它考慮到了系統(tǒng)內(nèi)的對象,所以雖然 SOA 是基于對象的,但是作為一個整體,它卻不是面向?qū)ο?/i>的。不同之處在于接口本身。SOA 系統(tǒng)原型的一個典型例子是通用對象請求代理體系結(jié)構(gòu)(Common Object Request Broker Architecture,CORBA),它已經(jīng)出現(xiàn)很長時間了,其定義的概念與 SOA 相似。
然而,現(xiàn)在的 SOA 已經(jīng)有所不同了,因為它依賴于一些更新的進(jìn)展,這些進(jìn)展是以可擴(kuò)展標(biāo)記語言(eXtensible Markup Language,XML)為基礎(chǔ)的。通過使用基于 XML 的語言(稱為 Web 服務(wù)描述語言(Web Services Definition Language,WSDL))來描述接口,服務(wù)已經(jīng)轉(zhuǎn)到更動態(tài)且更靈活的接口系統(tǒng)中,非以前 CORBA 中的接口描述語言(Interface Definition Language,IDL)可比了。
Web 服務(wù)并不是實(shí)現(xiàn) SOA 的惟一方式。前面剛講的 CORBA 是另一種方式,這樣就有了面向消息的中間件(Message-Oriented Middleware)系統(tǒng),比如 IBM 的 MQseries。但是為了建立體系結(jié)構(gòu)模型,您所需要的并不只是服務(wù)描述。您需要定義整個應(yīng)用程序如何在服務(wù)之間執(zhí)行其工作流。您尤其需要找到業(yè)務(wù)的操 作和業(yè)務(wù)中所使用的軟件的操作之間的轉(zhuǎn)換點(diǎn)。因此,SOA 應(yīng)該能夠?qū)I(yè)務(wù)的商業(yè)流程與它們的技術(shù)流程聯(lián)系起來,并且映射這兩者之間的關(guān)系。例如,給供應(yīng)商付款的操作是商業(yè)流程,而更新您的零件數(shù)據(jù)庫,以包括進(jìn)新 供應(yīng)的貨物卻是技術(shù)流程。因而,工作流還可以在 SOA 的設(shè)計中扮演重要的角色。
此外,動態(tài)業(yè)務(wù)的工作流不僅可以包括部門之間的操作,甚至還可以包括與不為您控制的外部合作伙伴進(jìn)行的操作。因此,為了提高效率,您需要定義應(yīng)該如何得知服務(wù)之間的關(guān)系的策略,這種策略常常采用服務(wù)級協(xié)定和操作策略的形式。
最后,所有這些都必須處于一個信任和可靠的環(huán)境之中,以同預(yù)期的一樣根據(jù)約定的條款來執(zhí)行流程。因此,安全、信任和可靠的消息傳遞應(yīng)該在任何 SOA 中都起著重要的作用。
我可以用面向服務(wù)的體系結(jié)構(gòu)做什么?
對 SOA 的需要來源于需要使業(yè)務(wù) IT 系統(tǒng)變得更加靈活,以適應(yīng)業(yè)務(wù)中的改變。通過允許強(qiáng)定義的關(guān)系和依然靈活的特定實(shí)現(xiàn),IT 系統(tǒng)既可以利用現(xiàn)有系統(tǒng)的功能,又可以準(zhǔn)備在以后做一些改變來滿足它們之間交互的需要。
下 面舉一個具體的例子。一個服裝零售組織擁有 500 家國際連鎖店,它們常常需要更改設(shè)計來趕上時尚的潮流。這可能意味著不僅需要更改樣式和顏色,甚至還可能需要更換布料、制造商和可交付的產(chǎn)品。如果零售商 和制造商之間的系統(tǒng)不兼容,那么從一個供應(yīng)商到另一個供應(yīng)商的更換可能就是一個非常復(fù)雜的軟件流程。通過利用 WSDL 接口在操作方面的靈活性,每個公司都可以將它們的現(xiàn)有系統(tǒng)保持現(xiàn)狀,而僅僅匹配 WSDL 接口并制訂新的服務(wù)級協(xié)定,這樣就不必完全重構(gòu)它們的軟件系統(tǒng)了。這是業(yè)務(wù)的水平改變,也就是說,它們改變的是合作伙伴,而所有的業(yè)務(wù)操作基本上都保持不變。這里,業(yè)務(wù)接口可以作少許改變,而內(nèi)部操作卻不需要改變,之所以這樣做,僅僅是為了能夠與外部合作伙伴一起工作。
另一種形式是內(nèi)部改變, 在這種改變中,零售組織現(xiàn)在決定它還將把連鎖零售商店內(nèi)的一些地方出租給專賣流行衣服的小商店,這可以看作是采用店中店(store-in-store) 的業(yè)務(wù)模型。這里,雖然公司的大多數(shù)業(yè)務(wù)操作都保持不變,但是它們現(xiàn)在需要新的內(nèi)部軟件來處理這樣的出租安排。盡管在內(nèi)部軟件系統(tǒng)可以承受全面的檢修,但 是它們需要在這樣做的同時不會對與現(xiàn)有的供應(yīng)商系統(tǒng)的交互產(chǎn)生大的影響。在這種情況下,SOA 模型保持原封不動,而內(nèi)部實(shí)現(xiàn)卻發(fā)生了變化。雖然可以將新的方面添加到 SOA 模型中來加入新的出租安排的職責(zé),但是正常的零售管理系統(tǒng)繼續(xù)如往常一樣。
為了延續(xù)內(nèi)部改變的觀念,IT 經(jīng)理可能會發(fā)現(xiàn),軟件的新配置還可以以另外的一種方式加以使用,比如出租粘貼海報的地方以供廣告之用。這里,新的業(yè)務(wù)提議是通過在新的設(shè)計中重用靈活的 SOA 模型得出的。這是來自 SOA 模型的新成果,并且還是一個新的機(jī)會,而這樣的新機(jī)會在以前可能是不會有的。
垂 直改變也是可能的,在這種改變中,零售商從銷售他們自己的服裝完全轉(zhuǎn)變到專門通過店中店模型出租地方。如果垂直改變完全從最底層開始的話,就會帶來 SOA 模型結(jié)構(gòu)的顯著改變,與之一起改變的還可能有新的系統(tǒng)、軟件、流程以及關(guān)系。在這種情況下,SOA 模型的好處是它從業(yè)務(wù)操作和流程的角度考慮問題而不是從應(yīng)用程序和程序的角度考慮問題,這使得業(yè)務(wù)管理可以根據(jù)業(yè)務(wù)的操作清楚地確定什么需要添加、修改或 刪除。然后可以將軟件系統(tǒng)構(gòu)造為適合業(yè)務(wù)處理的方式,而不是在許多現(xiàn)有的軟件平臺上常常看到的其他方式。
正如您可以看到的,在這里,改變和 SOA 系統(tǒng)適應(yīng)改變的能力是最重要的部分。對于開發(fā)人員來說,這樣的改變無論是在他們工作的范圍之內(nèi)還是在他們工作的范圍之外都有可能發(fā)生,這取決于是否有改變 需要知道接口是如何定義的以及它們相互之間如何進(jìn)行交互。與開發(fā)人員不同的是,架構(gòu)師的作用就是引起對 SOA 模型大的改變。這種分工,就是讓開發(fā)人員集中精力于創(chuàng)建作為服務(wù)定義的功能單元,而讓架構(gòu)師和建模人員集中精力于如何將這些單元適當(dāng)?shù)亟M織在一起,它已經(jīng) 有十多年的歷史了,通常用統(tǒng)一建模語言(Universal Modeling Language,UML),并且描述成模型驅(qū)動的體系結(jié)構(gòu)(Model-Driven Architecture,MDA)。
構(gòu)成 SOA 的技術(shù)是什么?
SOA 本身是應(yīng)該如何將軟件組織在一起的抽象概念。它依賴于用 XML 和 Web 服務(wù)實(shí)現(xiàn)并以軟件的形式存在的更加具體的觀念和技術(shù)。此外,它還需要安全性、策略管理、可靠消息傳遞以及會計系統(tǒng)的支持,從而有效地工作。您還可以通過分 布式事務(wù)處理和分布式軟件狀態(tài)管理來進(jìn)一步地改善它。
SOA 服務(wù)和 Web 服務(wù)之間的區(qū)別在于設(shè)計。SOA 概念并沒有確切地定義服務(wù)具體如何交互,而僅僅定義了服務(wù)如何相互理解以及如何交互。其中的區(qū)別也就是定義如何執(zhí)行流程的戰(zhàn)略與如何執(zhí)行流程的戰(zhàn)術(shù)之間的 區(qū)別。而另一方面,Web 服務(wù)在需要交互的服務(wù)之間如何傳遞消息有具體的指導(dǎo)原則;從戰(zhàn)術(shù)上實(shí)現(xiàn) SOA 模型是通過 HTTP 傳遞的 SOAP 消息中最常見的 SOA 模型。因而,從本質(zhì)上講,Web 是實(shí)現(xiàn) SOA 的具體方式之一。
盡 管我們覺得 Web 服務(wù)是實(shí)現(xiàn) SOA 的最好方式,但是 SOA 并不局限于 Web 服務(wù)。其他使用 WSDL 直接實(shí)現(xiàn)服務(wù)接口并且通過 XML 消息進(jìn)行通信的協(xié)議也可以包括在 SOA 之中。正如在別處指出的,CORBA 和 IBM 的 MQ 系統(tǒng)通過使用能夠處理 WSDL 的新特征也可以參與到 SOA 中來。如果兩個服務(wù)需要交換數(shù)據(jù),那么它們還會需要使用相同的消息傳遞協(xié)議,但是數(shù)據(jù)接口允許相同的信息交換。
既為了建立所有這些信息的適當(dāng)控制,又為了應(yīng)用安全性、策略、可靠性以及會計方面的要求,在 SOA 體系結(jié)構(gòu)的框架中加入了一個新的軟件對象。這個對象就是企業(yè)服務(wù)總線(Enterprise Service Bus,ESB), 它使用許多可能的消息傳遞協(xié)議來負(fù)責(zé)適當(dāng)?shù)目刂啤⒘魃踔吝€可能是服務(wù)之間所有消息的傳輸。雖然 ESB 并不是絕對必需的,但它卻是在 SOA 中正確管理您的業(yè)務(wù)流程至關(guān)重要的組件。ESB 本身可以是單個引擎,甚至還可以是由許多同級和下級 ESB 組成的分布式系統(tǒng),這些 ESB 一起工作,以保持 SOA 系統(tǒng)的運(yùn)行。在概念上,它是從早期比如消息隊列和分布式事務(wù)計算這些計算機(jī)科學(xué)概念所建立的存儲轉(zhuǎn)發(fā)機(jī)制發(fā)展而來的。
從 開發(fā)人員的角度來說,他們使用的工具必須知道 SOA 的能力,并允許開發(fā)人員有效地使用 SOA 對象。這將設(shè)計 SOA 模型、開發(fā)服務(wù)和服務(wù)對象以及測試 SOA 應(yīng)用程序這些過程包括進(jìn)來并組成一個整體。因而,開發(fā)人員的工作必須為面向服務(wù)的應(yīng)用程序設(shè)計/開發(fā)(Service-Oriented Application Design/Development,SOAD)做好準(zhǔn)備。
SOA 與其他技術(shù)的關(guān)系如何?
SOA 可以與許多其他技術(shù)結(jié)合在一起使用,然而,組件的封裝和聚合在其中扮演著重要的角色。如前所述,SOA 可以是一個簡單對象、復(fù)雜對象、對象的集合、包含許多對象的流程、包含其他流程的流程,甚至還可以是輸出單一結(jié)果的應(yīng)用程序的整體集合。在服務(wù)之外,它可 以看作是單個實(shí)體,但是在其自身中,它可以具有任何級別的復(fù)雜性(如果必要的話)。出于性能方面的考慮,大多數(shù) SOA 服務(wù)并沒有下降到單一對象的粒度,并且更適合于大中型組件。
除了可能離不開 XML 和 WSDL 之外,SOA 并不是特定于語言的。可以用任何編程語言來實(shí)現(xiàn)服務(wù),只要這種編程語言可以生成服務(wù)并且可以與 WSDL 結(jié)合在一起使用就可以了。SOAP 本身并不是絕對需要的,但它是通用的消息傳遞系統(tǒng)。因此,可以使用幾乎任何一種編程語言和支持 WSDL 的平臺來實(shí)現(xiàn) SOA 中的成員服務(wù)。
基 于通用對象請求代理體系結(jié)構(gòu)(Common Object Broker Request Architecture,CORBA)的應(yīng)用程序有許多組件必須連接到 SOA 中。雖然 CORBA 中的接口描述語言(Interface Description Language,IDL)在概念上類似于 WSDL,但它不是嚴(yán)格的,因而首先需要將其映射到 WSDL。另外,需要使用更高級的 SOA 協(xié)議(比如用于流程和策略管理的協(xié)議),而不是 CORBA 中的類似的概念。請記住,這是 CORBA 組件(表示為服務(wù))需要與 SOA 服務(wù)交互的情況;在 CORBA 模型中,所有的獨(dú)立子集仍然可以像以前一樣工作。
由對象管理組 (Object Management Group)提出并在許多 IBM Rational 產(chǎn)品中得以實(shí)現(xiàn)的模型驅(qū)動體系結(jié)構(gòu)在一個更抽象的層次上與 SOA 的概念具有很強(qiáng)的相關(guān)性。MDA 基于這樣的概念,任何軟件流程都可以定義為模型甚至是元模型(即模型的模型),然后可以將這些模型和元模型轉(zhuǎn)換成應(yīng)用程序的實(shí)際組件。因此,MDA 創(chuàng)建了一個模型,這個模型先編譯成軟件應(yīng)用程序,而軟件應(yīng)用程序接著又編譯成可執(zhí)行程序,這樣就可以在平臺上運(yùn)行了。MDA 并不區(qū)分服務(wù)和對象這兩個概念,但是它確實(shí)允許模型由其他子集模型本身組成,這類似于 BPEL(SOA 的一個核心組件)中的流程聚合的概念。
SOA 和 Web 服務(wù)是獨(dú)立于編程語言的,但 Java 是主要的開發(fā)語言之一。可以使用定義良好的 Java 接口以及各種協(xié)議豐富的 Java 實(shí)現(xiàn)為正在構(gòu)建這個模型的開發(fā)人員提供了優(yōu)勢。Java 在此擔(dān)當(dāng)了開發(fā)每個服務(wù)的功能、管理數(shù)據(jù)對象和與其他在邏輯上封裝在服務(wù)內(nèi)的對象進(jìn)行交互的角色。
SOA 與 Web 的另一個重要的關(guān)系是自主計算和網(wǎng)格計算的概念。自主計算的概念應(yīng)用于管理分布式服務(wù)體系結(jié)構(gòu)的范圍,具體來說,就是幫助維護(hù)策略和服務(wù)級協(xié)議以及 SOA 系統(tǒng)的總穩(wěn)定性。
另 外,網(wǎng)格計算可以以兩個級別與 SOA 系統(tǒng)一起使用。網(wǎng)格是分布式計算的一種形式,它利用分布式特性和服務(wù)之間的交互來為 SOA 應(yīng)用程序提供計算支持。在這種情況下,網(wǎng)格起到了框架的作用,其中實(shí)現(xiàn)了一些或所有單獨(dú)的服務(wù)。因此,SOA 應(yīng)用程序可以是網(wǎng)格服務(wù)的消費(fèi)者。
在 另一方面,網(wǎng)格本身也可以構(gòu)建在 SOA 之上。在這種情況下,每個操作系統(tǒng)服務(wù)都是構(gòu)成整個 SOA 應(yīng)用程序的成員,而 SOA 應(yīng)用程序就是網(wǎng)格本身。因此,單獨(dú)的網(wǎng)格組件既可以使用 Web 服務(wù)進(jìn)行通信,又可以以 SOA 的方式進(jìn)行交互。總而言之,網(wǎng)格系統(tǒng)可以是 SOA 本身,也可以提供服務(wù)來在其上構(gòu)建應(yīng)用程序級 SOA 模型。
我可以如何構(gòu)建SOA系統(tǒng)?
利用 SOA 的好處不僅是一個軟件開發(fā)流程,而且還是一個業(yè)務(wù)開發(fā)流程。采用 SOA 有四個層次,您的實(shí)現(xiàn)可以跨越從創(chuàng)建特定的軟件服務(wù)到將您的業(yè)務(wù)模型全面轉(zhuǎn)換到按需系統(tǒng)的過程。要獲得進(jìn)一步的信息,您應(yīng)該閱讀這一部分的末尾列出的文章 “The Four levels of SOA Adoption” 。
第一個層次是最簡單的,因為它只需創(chuàng)建單獨(dú)的服務(wù)。在這一部分列出的 “SOA 新手入門 ” 中對此進(jìn)行了詳細(xì)解釋,并且提供了更多的資源。
在第二個層次中,您不僅可以創(chuàng)建服務(wù),而且可以開始將業(yè)務(wù)功能集成到 SOA 中。這涉及多個層次的集成,其中包括應(yīng)用程序集成、信息集成、流程集成和整個系統(tǒng)集成。 Migrating to a Service-Oriented Architecture 是一篇重要的文章,介紹了這個層次中的問題。
第三個層次涉及將您的企業(yè) IT 基礎(chǔ)設(shè)施轉(zhuǎn)換到 SOA 模型,而采用 SOA 的第四個層次集中于轉(zhuǎn)換您的業(yè)務(wù)模型,以使之成為按需就緒的模型。
從 IT 專業(yè)人員的角度來看(與業(yè)務(wù)層相比),要創(chuàng)建 SOA 應(yīng)用程序,您通常將經(jīng)歷四個階段:構(gòu)建、部署、使用和管理。在構(gòu)建階段中,您可以定義業(yè)務(wù)模型或流程、軟件模型和 SOA 模型。之后,您就可以創(chuàng)建一組服務(wù),這組服務(wù)可以與已發(fā)布的通用接口一起重用。
在部署階段,您提取創(chuàng)建的服務(wù),并把它們放在一個可執(zhí)行、可管理的環(huán)境之中。在使用階段,您根據(jù)前面所講的 SOA 和軟件模型來裝配應(yīng)用程序,并且測試其軟件質(zhì)量以及非功能性需求,比如性能、可伸縮性等等。應(yīng)用程序現(xiàn)在已經(jīng)準(zhǔn)備完畢并且可用于用戶。最后的管理階段是一個長期的過程,在這個階段中,您可以監(jiān)控并管理安全性和使用,以及在許多與您可能已經(jīng)為 SOA 制訂好的服務(wù)級協(xié)定或策略相對應(yīng)的方面比較其性能。
這些是 SOA 的生命周期的概念階段。為了使對應(yīng)于這些階段的實(shí)際工作角色具體化,有許多角色需要加入到 SOA 應(yīng)用程序的創(chuàng)建之中。這些角色可能從事相同的工作,也可能跨多個團(tuán)隊成員甚至多個團(tuán)隊。在 Rational Unified Process ( RUP )中所劃分的角色非常好地表達(dá)了角色概念。
RUP 角色包括項目經(jīng)理、分析員、架構(gòu)師、建模人員、開發(fā)人員、測試人員以及部署和操作人員。 SOA 幾乎完全照搬了這種角色劃分方法,惟一不同之處在于, SOA 建模人員角色的工作是提取概念性軟件模型,并且根據(jù) IT 基礎(chǔ)設(shè)施的 SOA 模型和資源來對其進(jìn)行測試。開發(fā)人員角色還可以包括二級角色像裝配人員(在使用階段),裝配人員的角色是提取單獨(dú)的服務(wù),并且根據(jù)定義好的模型構(gòu)建實(shí)際的 SOA 應(yīng)用程序。不管是顯式的還是隱式的,這些角色都存在于支持 SOA 的企業(yè)之中。
個人體會:
??? SOA 的松耦合特性能夠適應(yīng)業(yè)務(wù)需求的靈活性,當(dāng)服務(wù)內(nèi)部結(jié)構(gòu)及實(shí)現(xiàn)發(fā)生改變時它能夠繼續(xù)存在從而降低了軟件二次開發(fā)的成本。 SOA 就好比是一個服務(wù)中介將不同系統(tǒng)、不同平臺上的操作通過它聯(lián)系起來,而實(shí)現(xiàn)各種服務(wù)和數(shù)據(jù)的交互,滿足市場快速變化的需求.