SOA入门及了解
面向服務(wù)的體系結(jié)構(gòu),是一個(gè)組件模型,它將應(yīng)用程序的不同功能單元(稱為服務(wù))通過(guò)這些服務(wù)之間定義良好的接口和契約聯(lián)系起來(lái)。接口是采用中立的方式進(jìn)行定義的,它應(yīng)該獨(dú)立于實(shí)現(xiàn)服務(wù)的硬件平臺(tái)、操作系統(tǒng)和編程語(yǔ)言。這使得構(gòu)建在各種這樣的系統(tǒng)中的服務(wù)可以以一種統(tǒng)一和通用的方式進(jìn)行交互。
簡(jiǎn)介
這種具有中立的接口定義(沒有強(qiáng)制綁定到特定的實(shí)現(xiàn)上)的特征稱為服務(wù)之間的松耦合。松耦合系統(tǒng)的好處有兩點(diǎn),一點(diǎn)是它的靈活性,另一點(diǎn)是,當(dāng)組成整個(gè)應(yīng)用程序的每個(gè)服務(wù)的內(nèi)部結(jié)構(gòu)和實(shí)現(xiàn)逐漸地發(fā)生改變時(shí),它能夠繼續(xù)存在。而另一方面,緊耦合意味著應(yīng)用程序的不同組件之間的接口與其功能和結(jié)構(gòu)是緊密相連的,因而當(dāng)需要對(duì)部分或整個(gè)應(yīng)用程序進(jìn)行某種形式的更改時(shí),它們就顯得非常脆弱。 對(duì)松耦合的系統(tǒng)的需要來(lái)源于業(yè)務(wù),應(yīng)用程序需要根據(jù)業(yè)務(wù)的需要變得更加靈活,以適應(yīng)不斷變化的環(huán)境,比如經(jīng)常改變的政策、業(yè)務(wù)級(jí)別、業(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ù)中,一旦需要,就可以對(duì)完成或執(zhí)行任務(wù)的方式進(jìn)行必要的更改。 雖然面向服務(wù)的體系結(jié)構(gòu)不是一個(gè)新鮮事物,但它卻是更傳統(tǒng)的面向?qū)ο蟮哪P偷奶娲P?#xff0c;面向?qū)ο蟮哪P褪蔷o耦合的,已經(jīng)存在二十多年了。雖然基于 SOA 的系統(tǒng)并不排除使用面向?qū)ο蟮脑O(shè)計(jì)來(lái)構(gòu)建單個(gè)服務(wù),但是其整體設(shè)計(jì)卻是面向服務(wù)的。由于它考慮到了系統(tǒng)內(nèi)的對(duì)象,所以雖然 SOA 是基于對(duì)象的,但是作為一個(gè)整體,它卻不是面向?qū)ο蟮摹2煌幵谟诮涌诒旧怼OA 系統(tǒng)原型的一個(gè)典型例子是通用對(duì)象請(qǐng)求代理體系結(jié)構(gòu)(Common Object Request Broker Architecture,CORBA),它已經(jīng)出現(xiàn)很長(zhǎng)時(shí)間了,其定義的概念與 SOA 相似。 然而,現(xiàn)在的 SOA 已經(jīng)有所不同了,因?yàn)樗蕾囉谝恍└碌倪M(jìn)展,這些進(jìn)展是以可擴(kuò)展標(biāo)記語(yǔ)言(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言的子集)為基礎(chǔ)的。通過(guò)使用基于 XML 的語(yǔ)言(稱為Web 服務(wù)描述語(yǔ)言(Web Services Description Language,WSDL))來(lái)描述接口,服務(wù)已經(jīng)轉(zhuǎn)到更動(dòng)態(tài)且更靈活的接口系統(tǒng)中,非以前 CORBA 中的接口描述語(yǔ)言(Interface Description Language,IDL)可比了。 SOA開發(fā)運(yùn)行平臺(tái)的Web 服務(wù)并不是實(shí)現(xiàn) SOA 的惟一方式。前面剛講的 CORBA 是另一種方式,這樣就有了面向消息的中間件(Message-Oriented Middleware)系統(tǒng),比如 IBM 的 MQseries。但是為了建立體系結(jié)構(gòu)模型,您所需要的并不只是服務(wù)描述。您需要定義整個(gè)應(yīng)用程序如何在服務(wù)之間執(zhí)行其工作流。您尤其需要找到業(yè)務(wù)的操作和業(yè)務(wù)中所使用的軟件的操作之間的轉(zhuǎn)換點(diǎn)。因此,SOA 應(yīng)該能夠?qū)I(yè)務(wù)的商業(yè)流程與它們的技術(shù)流程聯(lián)系起來(lái),并且映射這兩者之間的關(guān)系。例如,給供應(yīng)商付款的操作是商業(yè)流程,而更新您的零件數(shù)據(jù)庫(kù),以包括進(jìn)新供應(yīng)的貨物卻是技術(shù)流程。因而,工作流還可以在 SOA 的設(shè)計(jì)中扮演重要的角色。 此外,動(dòng)態(tài)業(yè)務(wù)的工作流不僅可以包括部門之間的操作,甚至還可以包括與不為您控制的外部合作伙伴進(jìn)行的操作。因此,為了提高效率,您需要定義應(yīng)該如何得知服務(wù)之間的關(guān)系的策略,這種策略常常采用服務(wù)級(jí)協(xié)定和操作策略的形式。 最后,所有這些都必須處于一個(gè)信任和可靠的環(huán)境之中,以同預(yù)期的一樣根據(jù)約定的條款來(lái)執(zhí)行流程。因此,安全、信任和可靠的消息傳遞應(yīng)該在任何 SOA 中都起著重要的作用。 面向服務(wù)架構(gòu)特征 SOA的服務(wù)級(jí)別抽象圖,如下圖1所示: SOA的服務(wù)級(jí)別抽象圖 圖1SOA的服務(wù)級(jí)別抽象圖 基于以上圖示.SOA具有以下五個(gè)特征: 1、可重用 一個(gè)服務(wù)創(chuàng)建后能用于多個(gè)應(yīng)用和業(yè)務(wù)流程。 2、松耦合 服務(wù)請(qǐng)求者到服務(wù)提供者的綁定與服務(wù)之間應(yīng)該是松耦合的。因此,服務(wù)請(qǐng)求者不需要知道服務(wù)提供者實(shí)現(xiàn)的技術(shù)細(xì)節(jié),例如程序語(yǔ)言、底層平臺(tái)等等。 3、明確定義的接口 服務(wù)交互必須是明確定義的。Web服務(wù)描述語(yǔ)言(Web Services Description Language,WSDL)是用于描述服務(wù)請(qǐng)求者所要求的綁定到服務(wù)提供者的細(xì)節(jié)。WSDL不包括服務(wù)實(shí)現(xiàn)的任何技術(shù)細(xì)節(jié)。服務(wù)請(qǐng)求者不知道也不關(guān)心服務(wù)究竟是由哪種程序設(shè)計(jì)語(yǔ)言編寫的。 4、無(wú)狀態(tài)的服務(wù)設(shè)計(jì) 服務(wù)應(yīng)該是獨(dú)立的、自包含的請(qǐng)求,在實(shí)現(xiàn)時(shí)它不需要獲取從一個(gè)請(qǐng)求到另一個(gè)請(qǐng)求的信息或狀態(tài)。服務(wù)不應(yīng)該依賴于其他服務(wù)的上下文和狀態(tài)。當(dāng)產(chǎn)生依賴時(shí),它們可以定義成通用業(yè)務(wù)流程、函數(shù)和 數(shù)據(jù)模型。 5、基于開放標(biāo)準(zhǔn) 當(dāng)前SOA的實(shí)現(xiàn)形式是Web服務(wù),基于的是公開的W3C及其他公認(rèn)標(biāo)準(zhǔn).采用第一代Web服務(wù)定義的SOAP、WSDL和UDDI以及第二代Web服務(wù)定義的WS-*來(lái)實(shí)現(xiàn)SOA。 面向服務(wù)架構(gòu)基本特點(diǎn) SOA的目標(biāo)在于讓IT系統(tǒng)變得更有彈性,以便更靈活、更快地響應(yīng)不斷改變的企業(yè)業(yè)務(wù)需求,解決軟件領(lǐng)域一直以來(lái)存在的“如何重用軟件功能”問(wèn)題。采用SOA來(lái)構(gòu)建信息平臺(tái),無(wú)疑是未來(lái)的發(fā)展方向。 SOA的5大基本特征為軟件功能重用提供了解決的辦法。 ①服務(wù)之間通過(guò)簡(jiǎn)單、精確定義的接口進(jìn)行通信,不涉及底層編程接口和通信模型。 ②粗粒度性:粗粒度服務(wù)提供一項(xiàng)特定的業(yè)務(wù)功能,采用粗粒度服務(wù)接口的優(yōu)點(diǎn)在于使用者和服務(wù)層之間不必再進(jìn)行多次的往復(fù),一次往復(fù)就足夠了。 ③松耦合性:松耦合性要求SOA架構(gòu)中的不同服務(wù)之間應(yīng)該保持一種松耦合的關(guān)系,也就是應(yīng)該保持一種相對(duì)獨(dú)立無(wú)依賴的關(guān)系。這樣的好處有兩點(diǎn),首先是具有靈活性,其次當(dāng)組成整個(gè)應(yīng)用程序的服務(wù)內(nèi)部結(jié)構(gòu)和實(shí)現(xiàn)逐步地發(fā)生變化時(shí),系統(tǒng)可以繼續(xù)地獨(dú)立存在。而緊耦合意味著應(yīng)用程序的不同組件之間的接口與其功能和結(jié)構(gòu)是緊密相連的,因而當(dāng)需要對(duì)部分或整個(gè)應(yīng)用程序進(jìn)行某種形式的更改時(shí)這種結(jié)構(gòu)就顯得非常脆弱。 ④位置透明性:位置透明性要求SOA系統(tǒng)中的所有服務(wù)對(duì)于其調(diào)用者來(lái)說(shuō)都是位置透明的,也就是說(shuō),每個(gè)服務(wù)的調(diào)用者只需要知道想要調(diào)用的是哪一個(gè)服務(wù),但并不需要知道所調(diào)用服務(wù)的物理位置在哪。 ⑤協(xié)議無(wú)關(guān)性:協(xié)議無(wú)關(guān)性要求每一個(gè)服務(wù)都可以通過(guò)不同的協(xié)議來(lái)調(diào)用。 另外,在許多傳統(tǒng)的IT系統(tǒng)的內(nèi)在部分采用的是硬連接,這種結(jié)構(gòu)很難讓企業(yè)快速響應(yīng)市場(chǎng)的變化,而SOA能夠重復(fù)利用企業(yè)現(xiàn)有的資源,可以減輕企業(yè)運(yùn)營(yíng)成本,提升資源的使用效率,并且減輕企業(yè)維護(hù)人員的工作量,減少潛在的風(fēng)險(xiǎn)以及管理費(fèi)用。在業(yè)務(wù)方面和IT方面帶來(lái)許多優(yōu)勢(shì): ①服務(wù)給精確的業(yè)務(wù)流程帶來(lái)靈活性; ②使用服務(wù)來(lái)改善客戶服務(wù),而不必?fù)?dān)心底層復(fù)雜的IT基礎(chǔ)架構(gòu); ③可以迅速創(chuàng)建新的業(yè)務(wù)流程和復(fù)雜的應(yīng)用程序,以適應(yīng)市場(chǎng)變化; ④借助安全、易管理的集成環(huán)境,成為響應(yīng)能力更強(qiáng)的IT組織; ⑤通過(guò)使用預(yù)裝的、可重復(fù)使用的服務(wù)構(gòu)建模塊,縮短開發(fā)和部署周期; ⑥通過(guò)使用服務(wù)來(lái)降低復(fù)雜性和維護(hù)成本; ⑦是增強(qiáng)而不是替換現(xiàn)有的IT系統(tǒng)。 面向服務(wù)架構(gòu)元素 面向服務(wù)的體系結(jié)構(gòu)中的角色包括:如下圖所示: 面向服務(wù)的體系結(jié)構(gòu)中的角色 1、服務(wù)請(qǐng)求者:服務(wù)請(qǐng)求者是一個(gè)應(yīng)用程序、一個(gè)軟件模塊或需要一個(gè)服務(wù)的另一個(gè)服務(wù)。它發(fā)起對(duì)注冊(cè)中心中的服務(wù)的查詢,通過(guò)傳輸綁定服務(wù),并且執(zhí)行服務(wù)功能。服務(wù)請(qǐng)求者根據(jù)接口契約來(lái)執(zhí)行服務(wù)。 2、服務(wù)提供者:服務(wù)提供者是一個(gè)可通過(guò)網(wǎng)絡(luò)尋址的實(shí)體,它接受和執(zhí)行來(lái)自請(qǐng)求者的請(qǐng)求。它將自己的服務(wù)和接口契約發(fā)布到服務(wù)注冊(cè)中心,以便服務(wù)請(qǐng)求者可以發(fā)現(xiàn)和訪問(wèn)該服務(wù)。 圖2面向服務(wù)的體系結(jié)構(gòu)中的角色 3、服務(wù)注冊(cè)中心:服務(wù)注冊(cè)中心是服務(wù)發(fā)現(xiàn)的支持者。它包含一個(gè)可用服務(wù)的存儲(chǔ)庫(kù),并允許感興趣的服務(wù)請(qǐng)求者查找服務(wù)提供者接口。 面向服務(wù)的體系結(jié)構(gòu)中的每個(gè)實(shí)體都扮演著服務(wù)提供者、請(qǐng)求者和注冊(cè)中心這三種角色中的某一種(或多種)。面向服務(wù)的體系結(jié)構(gòu)中的操作包括: 發(fā)布:為了使服務(wù)可訪問(wèn).需要發(fā)布服務(wù)描述以使服務(wù)請(qǐng)求者可以發(fā)現(xiàn)和調(diào)用它。 查詢:服務(wù)請(qǐng)求者定位服務(wù).方法是查詢服務(wù)注冊(cè)中心來(lái)找到滿足其標(biāo)準(zhǔn)的服務(wù)。 綁定和調(diào)用:在檢索完服務(wù)描述之后,服務(wù)請(qǐng)求者繼續(xù)根據(jù)服務(wù)描述中的信息來(lái)調(diào)用服務(wù)。 面向服務(wù)的體系結(jié)構(gòu)中的構(gòu)件包括: (1)服務(wù):可以通過(guò)已發(fā)布接口使用服務(wù),并且允許服務(wù)使用者調(diào)用服務(wù)。 (2)服務(wù)描述:服務(wù)描述指定服務(wù)使用者與服務(wù)提供者交互的方式。它指定來(lái)自服務(wù)的請(qǐng)求和響應(yīng)的格式。服務(wù)描述可以指定一組前提條件、后置條件和/或服務(wù)質(zhì)量(Q0S)級(jí)別。 面向服務(wù)架構(gòu)利用價(jià)值 對(duì) SOA 的需要來(lái)源于需要使業(yè)務(wù) IT 系統(tǒng)變得更加靈活,以適應(yīng)業(yè)務(wù)中的改變。通過(guò)允許強(qiáng)定義的關(guān)系和依然靈活的特定實(shí)現(xiàn),IT 系統(tǒng)既可以利用現(xiàn)有系統(tǒng)的功能,又可以準(zhǔn)備在以后做一些改變來(lái)滿足它們之間交互的需要。 下面舉一個(gè)具體的例子。一個(gè)服裝零售組織擁有 500 家國(guó)際連鎖店,它們常常需要更改設(shè)計(jì)來(lái)趕上時(shí)尚的潮流。這可能意味著不僅需要更改樣式和顏色,甚至還可能需要更換布料、制造商和可交付的產(chǎn)品。如果零售商和制造商之間的系統(tǒng)不兼容,那么從一個(gè)供應(yīng)商到另一個(gè)供應(yīng)商的更換可能就是一個(gè)非常復(fù)雜的軟件流程。通過(guò)利用 WSDL 接口在操作方面的靈活性,每個(gè)公司都可以將它們的現(xiàn)有系統(tǒng)保持現(xiàn)狀,而僅僅匹配 WSDL 接口并制訂新的服務(wù)級(jí)協(xié)定,這樣就不必完全重構(gòu)它們的軟件系統(tǒng)了。這是業(yè)務(wù)的水平改變,也就是說(shuō),它們改變的是合作伙伴,而所有的業(yè)務(wù)操作基本上都保持不變。這里,業(yè)務(wù)接口可以作少許改變,而內(nèi)部操作卻不需要改變,之所以這樣做,僅僅是為了能夠與外部合作伙伴一起工作。 另一種形式是內(nèi)部改變,在這種改變中,零售組織現(xiàn)在決定它還將把連鎖零售商店內(nèi)的一些地方出租給專賣流行衣服的小商店,這可以看作是采用店中店(store-in-store)的業(yè)務(wù)模型。這里,雖然公司的大多數(shù)業(yè)務(wù)操作都保持不變,但是它們現(xiàn)在需要新的內(nèi)部軟件來(lái)處理這樣的出租安排。盡管在內(nèi)部軟件系統(tǒng)可以承受全面的檢修,但是它們需要在這樣做的同時(shí)不會(huì)對(duì)與現(xiàn)有的供應(yīng)商系統(tǒng)的交互產(chǎn)生大的影響。在這種情況下,SOA 模型保持原封不動(dòng),而內(nèi)部實(shí)現(xiàn)卻發(fā)生了變化。雖然可以將新的方面添加到 SOA 模型中來(lái)加入新的出租安排的職責(zé),但是正常的零售管理系統(tǒng)繼續(xù)如往常一樣。 為了延續(xù)內(nèi)部改變的觀念,IT 經(jīng)理可能會(huì)發(fā)現(xiàn),軟件的新配置還可以以另外的一種方式加以使用,比如出租粘貼海報(bào)的地方以供廣告之用。這里,新的業(yè)務(wù)提議是通過(guò)在新的設(shè)計(jì)中重用靈活的 SOA 模型得出的。這是來(lái)自 SOA 模型的新成果,并且還是一個(gè)新的機(jī)會(huì),而這樣的新機(jī)會(huì)在以前可能是不會(huì)有的。 垂直改變也是可能的,在這種改變中,零售商從銷售他們自己的服裝完全轉(zhuǎn)變到專門通過(guò)店中店模型出租地方。如果垂直改變完全從最底層開始的話,就會(huì)帶來(lái) SOA 模型結(jié)構(gòu)的顯著改變,與之一起改變的還可能有新的系統(tǒng)、軟件、流程以及關(guān)系。在這種情況下,SOA 模型的好處是它從業(yè)務(wù)操作和流程的角度考慮問(wèn)題而不是從應(yīng)用程序和程序的角度考慮問(wèn)題,這使得業(yè)務(wù)管理可以根據(jù)業(yè)務(wù)的操作清楚地確定什么需要添加、修改或刪除。然后可以將軟件系統(tǒng)構(gòu)造為適合業(yè)務(wù)處理的方式,而不是在許多現(xiàn)有的軟件平臺(tái)上常常看到的其他方式。 正如您可以看到的,在這里,改變和 SOA 系統(tǒng)適應(yīng)改變的能力是最重要的部分。對(duì)于開發(fā)人員來(lái)說(shuō),這樣的改變無(wú)論是在他們工作的范圍之內(nèi)還是在他們工作的范圍之外都有可能發(fā)生,這取決于是否有改變需要知道接口是如何定義的以及它們相互之間如何進(jìn)行交互。與開發(fā)人員不同的是,架構(gòu)師的作用就是引起對(duì) SOA 模型大的改變。這種分工,就是讓開發(fā)人員集中精力于創(chuàng)建作為服務(wù)定義的功能單元,而讓架構(gòu)師和建模人員集中精力于如何將這些單元適當(dāng)?shù)亟M織在一起,它已經(jīng)有十多年的歷史了,通常用統(tǒng)一建模語(yǔ)言(Universal Modeling Language,UML),并且描述成模型驅(qū)動(dòng)的體系結(jié)構(gòu)(Model-Driven Architecture,MDA)。 對(duì)于面向同步和異步應(yīng)用的,基于請(qǐng)求/響應(yīng)模式的分布式計(jì)算來(lái)說(shuō),SOA是一場(chǎng)革命。一個(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)集成者可以通過(guò)組合一個(gè)或多個(gè)服務(wù)來(lái)構(gòu)建應(yīng)用,而無(wú)須理解服務(wù)的底層實(shí)現(xiàn)。舉例來(lái)說(shuō),一個(gè)服務(wù)可以用.NET或J2EE來(lái)實(shí)現(xiàn),而使用該服務(wù)的應(yīng)用程序可以在不同的平臺(tái)之上,使用的語(yǔ)言也可以不同。 面向服務(wù)架構(gòu)SOA特性 面向服務(wù)架構(gòu)6.1概述 SOA服務(wù)具有平臺(tái)獨(dú)立的自我描述XML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言的子集)文檔。Web服務(wù)描述語(yǔ)言(WSDL,WebServicesDescriptionLanguage)是用于描述服務(wù)的標(biāo)準(zhǔn)語(yǔ)言。 SOA服務(wù)用消息進(jìn)行通信,該消息通常使用XMLSchema來(lái)定義(也叫做XSD,XMLSchemaDefinition)。消費(fèi)者和提供者或消費(fèi)者和服務(wù)之間的通信多見于不知道提供者的環(huán)境中。服務(wù)間的通訊也可以看作企業(yè)內(nèi)部處理的關(guān)鍵商業(yè)文檔。 在一個(gè)企業(yè)內(nèi)部,SOA服務(wù)通過(guò)一個(gè)扮演目錄列表(directorylisting)角色的登記處(Registry)來(lái)進(jìn)行維護(hù)。應(yīng)用程序在登記處(Registry)尋找并調(diào)用某項(xiàng)服務(wù)。統(tǒng)一描述,定義和集成(UDDI,UniversalDescription,Definition,andIntegration)是服務(wù)登記的標(biāo)準(zhǔn)。 每項(xiàng)SOA服務(wù)都有一個(gè)與之相關(guān)的服務(wù)品質(zhì)(QoS,qualityofservice)。QoS的一些關(guān)鍵元素有安全需求(例如認(rèn)證和授權(quán)),可靠通信(譯注:可靠消息是指,確保消息“僅且僅僅”發(fā)送一次,從而過(guò)濾重復(fù)信息。),以及誰(shuí)能調(diào)用服務(wù)的策略。 為什么選擇SOA? 不同種類的操作系統(tǒng),應(yīng)用軟件,系統(tǒng)軟件和應(yīng)用基礎(chǔ)結(jié)構(gòu)(applicationinfrastructure)相互交織,這便是IT企業(yè)的現(xiàn)狀。一些現(xiàn)存的應(yīng)用程序被用來(lái)處理當(dāng)前的業(yè)務(wù)流程(businessprocesses),因此從頭建立一個(gè)新的基礎(chǔ)環(huán)境是不可能的。企業(yè)應(yīng)該能對(duì)業(yè)務(wù)的變化做出快速的反應(yīng),利用對(duì)現(xiàn)有的應(yīng)用程序和應(yīng)用基礎(chǔ)結(jié)構(gòu)(applicationinfrastructure)的投資來(lái)解決新的業(yè)務(wù)需求,為客戶,商業(yè)伙伴以及供應(yīng)商提供新的互動(dòng)渠道,并呈現(xiàn)一個(gè)可以支持有機(jī)業(yè)務(wù)(organicbusiness)的構(gòu)架。SOA憑借其松耦合的特性,使得企業(yè)可以按照模塊化的方式來(lái)添加新服務(wù)或更新現(xiàn)有服務(wù),以解決新的業(yè)務(wù)需要,提供選擇從而可以通過(guò)不同的渠道提供服務(wù),并可以把企業(yè)現(xiàn)有的或已有的應(yīng)用作為服務(wù),從而保護(hù)了現(xiàn)有的IT基礎(chǔ)建設(shè)投資。 如圖1的例子所示,一個(gè)使用SOA的企業(yè),可以使用一組現(xiàn)有的應(yīng)用來(lái)創(chuàng)建一個(gè)供應(yīng)鏈復(fù)合應(yīng)用(supplychaincompositeapplication),這些現(xiàn)有的應(yīng)用通過(guò)標(biāo)準(zhǔn)接口來(lái)提供功能。 面向服務(wù)架構(gòu)6.2服務(wù)架構(gòu) 為了實(shí)現(xiàn)SOA,企業(yè)需要一個(gè)服務(wù)架構(gòu),服務(wù)消費(fèi)者(serviceconsumer)可以通過(guò)發(fā)送消息來(lái)調(diào)用服務(wù)。這些消息由一個(gè)服務(wù)總線(servicebus)轉(zhuǎn)換后發(fā)送給適當(dāng)?shù)姆?wù)實(shí)現(xiàn)。這種服務(wù)架構(gòu)可以提供一個(gè)業(yè)務(wù)規(guī)則引擎(businessrulesengine),該引擎容許業(yè)務(wù)規(guī)則被合并在一個(gè)服務(wù)里或多個(gè)服務(wù)里。這種架構(gòu)也提供了一個(gè)服務(wù)管理基礎(chǔ)(servicemanagementinfrastructure),用來(lái)管理服務(wù),類似審核,列表(billing),日志等功能。此外,該架構(gòu)給企業(yè)提供了靈活的業(yè)務(wù)流程,更好地處理控制請(qǐng)求(regulatoryrequirement),例如SarbanesOxley(SOX),并且可以在不影響其他服務(wù)的情況下更改某項(xiàng)服務(wù)。 面向服務(wù)架構(gòu)6.3SOA基礎(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)。 SOAP,WSDL,UDDI WSDL,UDDI和SOAP是SOA基礎(chǔ)的基礎(chǔ)部件。WSDL用來(lái)描述服務(wù);UDDI用來(lái)注冊(cè)和查找服務(wù);而SOAP,作為傳輸層,用來(lái)在消費(fèi)者和服務(wù)提供者之間傳送消息。SOAP是Web服務(wù)的默認(rèn)機(jī)制,其他的技術(shù)為可以服務(wù)實(shí)現(xiàn)其他類型的綁定。一個(gè)消費(fèi)者可以在UDDI注冊(cè)表(registry)查找服務(wù),取得服務(wù)的WSDL描述,然后通過(guò)SOAP來(lái)調(diào)用服務(wù)。 WS-IBasicProfile WS-IBasicProfile,由Web服務(wù)互用性組織(WebServicesInteroperabilityOrganization)提供,是SOA服務(wù)測(cè)試與互用性所需要的核心構(gòu)件。服務(wù)提供者可以使用BasicProfile測(cè)試程序來(lái)測(cè)試服務(wù)在不同平臺(tái)和技術(shù)上的互用性。 J2EE和.Net 盡管J2EE和.NET平臺(tái)是開發(fā)SOA應(yīng)用程序常用的平臺(tái),但SOA不僅限于此。像J2EE這類平臺(tái),不僅為開發(fā)者自然而然地參與到SOA中來(lái)提供了一個(gè)平臺(tái),還通過(guò)他們內(nèi)在的特性,將可擴(kuò)展性,可靠性,可用性以及性能引入了SOA世界。新的規(guī)范,例如JAXB(JavaAPIforXMLBinding),用于將XML文檔定位到Java類;JAXR(JavaAPIforXMLRegistry)用來(lái)規(guī)范對(duì)UDDI注冊(cè)表(registry)的操作;XML-RPC(JavaAPIforXML-basedRemoteProcedureCall)在J2EE1.4中用來(lái)調(diào)用遠(yuǎn)程服務(wù),這使得開發(fā)和部署可移植于標(biāo)準(zhǔn)J2EE容器的Web服務(wù)變得容易,與此同時(shí),實(shí)現(xiàn)了跨平臺(tái)(如.NET)的服務(wù)互用。 面向服務(wù)架構(gòu)6.4服務(wù)品質(zhì) 在企業(yè)中,關(guān)鍵任務(wù)系統(tǒng)(mission-criticalsystem,譯注:關(guān)鍵任務(wù)系統(tǒng)是指如果一個(gè)系統(tǒng)的可靠性對(duì)于一個(gè)組織是至關(guān)重要的,那么該系統(tǒng)就是該企業(yè)的關(guān)鍵任務(wù)系統(tǒng)。比如,電話系統(tǒng)對(duì)于一個(gè)電話促銷企業(yè)來(lái)說(shuō)就是關(guān)鍵任務(wù)系統(tǒng),而文字處理系統(tǒng)就不那么關(guān)鍵了。)用來(lái)解決高級(jí)需求,例如安全性,可靠性,事物。當(dāng)一個(gè)企業(yè)開始采用服務(wù)架構(gòu)作為工具來(lái)進(jìn)行開發(fā)和部署應(yīng)用的時(shí)候,基本的Web服務(wù)規(guī)范,像WSDL,SOAP,以及UDDI就不能滿足這些高級(jí)需求。正如前面所提到的,這些需求也稱作服務(wù)品質(zhì)(QoS,qualityofservices)。與QoS相關(guān)的眾多規(guī)范已經(jīng)由一些標(biāo)準(zhǔn)化組織(standardsbodies)提出,像W3C(WorldWideWebConsortium)和OASIS(theOrganizationfortheAdvancementofStructuredInformationStandards)。下面的部分將會(huì)討論一些QoS服務(wù)和相關(guān)標(biāo)準(zhǔn)。 安全 Web服務(wù)安全規(guī)范用來(lái)保證消息的安全性。該規(guī)范主要包括認(rèn)證交換,消息完整性和消息保密。該規(guī)范吸引人的地方在于它借助現(xiàn)有的安全標(biāo)準(zhǔn),例如,SAML(asSecurityAssertionMarkupLanguage)來(lái)實(shí)現(xiàn)web服務(wù)消息的安全。OASIS正致力于Web服務(wù)安全規(guī)范的制定。 可靠 在典型的SOA環(huán)境中,服務(wù)消費(fèi)者和服務(wù)提供者之間會(huì)有幾種不同的文檔在進(jìn)行交換。具有諸如“僅且僅僅傳送一次”(once-and-only-oncedelivery),“最多傳送一次”(at-most-oncedelivery),“重復(fù)消息過(guò)濾”(duplicatemessageelimination),“保證消息傳送”(guaranteedmessagedelivery)等特性消息的發(fā)送和確認(rèn),在關(guān)鍵任務(wù)系統(tǒng)(mission-criticalsystems)中變得十分重要。WS-Reliability和WS-ReliableMessaging是兩個(gè)用來(lái)解決此類問(wèn)題的標(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ù)。這些要求被定義為策略斷言(policyassertions)。一項(xiàng)策略可能會(huì)包含多個(gè)斷言。WS-Policy用來(lái)標(biāo)準(zhǔn)化服務(wù)消費(fèi)者和服務(wù)提供者之間的策略通信。 控制 當(dāng)企業(yè)著手于服務(wù)架構(gòu)時(shí),服務(wù)可以用來(lái)整合數(shù)據(jù)倉(cāng)庫(kù)(silosofdata),應(yīng)用程序,以及組件。整合應(yīng)用意味著例如異步通信,并行處理,數(shù)據(jù)轉(zhuǎn)換,以及校正等進(jìn)程請(qǐng)求必須被標(biāo)準(zhǔn)化。在SOA中,進(jìn)程是使用一組離散的服務(wù)創(chuàng)建的。BPEL4WS或者WSBPEL(WebServiceBusinessProcessExecutionLanguage)是用來(lái)控制這些服務(wù)的語(yǔ)言。WSBPEL目前也由OASIS負(fù)責(zé)。 管理 隨著企業(yè)服務(wù)的增長(zhǎng),所使用的服務(wù)和業(yè)務(wù)進(jìn)程的數(shù)量也隨之增加,一個(gè)用來(lái)讓系統(tǒng)管理員管理所有運(yùn)行在多相環(huán)境下的服務(wù)的管理系統(tǒng)就顯得尤為重要。WSDM(WebServicesforDistributedManagement)規(guī)定了任何根據(jù)WSDM實(shí)現(xiàn)的服務(wù)都可以由一個(gè)WSDM適應(yīng)(WSDM-compliant)的管理方案來(lái)管理。 其它的qos特性,比如合作方之間的溝通和通訊,多個(gè)服務(wù)之間的事務(wù)處理,都在WS-Coordination和WS-Transaction標(biāo)準(zhǔn)中描述,這些都是OASIS的工作。 面向服務(wù)架構(gòu)6.5SOA不是Web服務(wù) 在理解SOA和Web服務(wù)的關(guān)系上,經(jīng)常發(fā)生混淆。根據(jù)2003年4月的Gartner報(bào)道,YefimV.Natis就這個(gè)問(wèn)題是這樣解釋的:“Web服務(wù)是技術(shù)規(guī)范,而SOA是設(shè)計(jì)原則。特別是Web服務(wù)中的WSDL,是一個(gè)SOA配套的接口定義標(biāo)準(zhǔn):這是Web服務(wù)和SOA的根本聯(lián)系。”從本質(zhì)上來(lái)說(shuō),SOA是一種架構(gòu)模式,而Web服務(wù)是利用一組標(biāo)準(zhǔn)實(shí)現(xiàn)的服務(wù)。Web服務(wù)是實(shí)現(xiàn)SOA的方式之一。用Web服務(wù)來(lái)實(shí)現(xiàn)SOA的好處是你可以實(shí)現(xiàn)一個(gè)中立平臺(tái),來(lái)獲得服務(wù),而且隨著越來(lái)越多的軟件商支持越來(lái)越多的Web服務(wù)規(guī)范,你會(huì)取得更好的通用性。 面向服務(wù)架構(gòu)6.6SOA的優(yōu)勢(shì) SOA的概念并非什么新東西,SOA不同于現(xiàn)有的分布式技術(shù)之處在于大多數(shù)軟件商接受它并有可以實(shí)現(xiàn)SOA的平臺(tái)或應(yīng)用程序。SOA伴隨著無(wú)處不在的標(biāo)準(zhǔn),為企業(yè)的現(xiàn)有資產(chǎn)或投資帶來(lái)了更好的重用性。SOA能夠在最新的和現(xiàn)有的應(yīng)用之上創(chuàng)建應(yīng)用;SOA能夠使客戶或服務(wù)消費(fèi)者免予服務(wù)實(shí)現(xiàn)的改變所帶來(lái)的影響;SOA能夠升級(jí)單個(gè)服務(wù)或服務(wù)消費(fèi)者而無(wú)需重寫整個(gè)應(yīng)用,也無(wú)需保留已經(jīng)不再適用于新需求的現(xiàn)有系統(tǒng)。總而言之,SOA以借助現(xiàn)有的應(yīng)用來(lái)組合產(chǎn)生新服務(wù)的敏捷方式,提供給企業(yè)更好的靈活性來(lái)構(gòu)建應(yīng)用程序和業(yè)務(wù)流程。總結(jié)
- 上一篇: Kubernetes初步了解及入门
- 下一篇: 区块链,供应链金融的新机遇