面向服務(wù)的計(jì)算和web數(shù)據(jù)管理第1章 分布式面向服務(wù)計(jì)算導(dǎo)引_第1頁(yè)
面向服務(wù)的計(jì)算和web數(shù)據(jù)管理第1章 分布式面向服務(wù)計(jì)算導(dǎo)引_第2頁(yè)
面向服務(wù)的計(jì)算和web數(shù)據(jù)管理第1章 分布式面向服務(wù)計(jì)算導(dǎo)引_第3頁(yè)
面向服務(wù)的計(jì)算和web數(shù)據(jù)管理第1章 分布式面向服務(wù)計(jì)算導(dǎo)引_第4頁(yè)
面向服務(wù)的計(jì)算和web數(shù)據(jù)管理第1章 分布式面向服務(wù)計(jì)算導(dǎo)引_第5頁(yè)
已閱讀5頁(yè),還剩124頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

面向服務(wù)的計(jì)算和web數(shù)據(jù)管理第1章分布式面向服務(wù)計(jì)算導(dǎo)引

軟件體系結(jié)構(gòu)和分布式軟件開(kāi)發(fā)與執(zhí)行軟件的計(jì)算機(jī)系統(tǒng)的體系結(jié)構(gòu)是相關(guān)的。本節(jié)介紹計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)以及各種計(jì)算范型。1.1計(jì)算機(jī)體系結(jié)構(gòu)和計(jì)算范型1.1.1計(jì)算機(jī)體系結(jié)構(gòu)

對(duì)于單處理器計(jì)算機(jī),計(jì)算機(jī)體系結(jié)構(gòu)通常指的是處理器的體系結(jié)構(gòu),它是軟件和硬件之間的接口或者處理器的指令體系結(jié)構(gòu)[Patterson2004]。對(duì)于多處理器計(jì)算機(jī),體系結(jié)構(gòu)通常指的是指令和數(shù)據(jù)流。FlynnsTaxonomy[Flynn1972]將計(jì)算機(jī)體系結(jié)構(gòu)分為四種類(lèi)型:

·單指令單數(shù)據(jù)流(SISD),即簡(jiǎn)單的處理器系統(tǒng);

·單指令多數(shù)據(jù)流(SIMD),例如向量或陣列式計(jì)算機(jī);

·多指令單數(shù)據(jù)流(MISD),例如對(duì)同一數(shù)據(jù)流執(zhí)行冗余計(jì)算并對(duì)結(jié)果進(jìn)行表決的容錯(cuò)計(jì)算機(jī)系統(tǒng);

·多指令多數(shù)據(jù)流(MIMD),由擁有自己的內(nèi)存和控制器、算術(shù)邏輯運(yùn)算部件以及輸入輸出部件的獨(dú)立計(jì)算機(jī)系統(tǒng)組成的計(jì)算機(jī)系統(tǒng)。

MIMD被看做是分布式系統(tǒng),不同的分布式系統(tǒng)有不同的關(guān)注點(diǎn),如圖1.1所示。分布式計(jì)算關(guān)注用并行或(和)分布方式表達(dá)計(jì)算時(shí)涉及的原理、方法以及技術(shù)。分布式軟件體系結(jié)構(gòu)關(guān)注的是軟構(gòu)件間的組織和接口。網(wǎng)絡(luò)體系結(jié)構(gòu)研究的是網(wǎng)絡(luò)節(jié)點(diǎn)的拓?fù)浣Y(jié)構(gòu)以及連接。網(wǎng)絡(luò)通信研究協(xié)議層,協(xié)議層允許節(jié)點(diǎn)之間相互通信并理解彼此之間的數(shù)據(jù)格式。有些研究者用操作系統(tǒng)區(qū)分分布式系統(tǒng)和網(wǎng)絡(luò)。當(dāng)一組網(wǎng)絡(luò)節(jié)點(diǎn)有獨(dú)立的操作系統(tǒng)時(shí),分布式系統(tǒng)是內(nèi)聚性的操作系統(tǒng)。圖1.1分布式系統(tǒng)和網(wǎng)絡(luò)1.1.2軟件體系結(jié)構(gòu)

一個(gè)程序或計(jì)算機(jī)系統(tǒng)的軟件體系結(jié)構(gòu)是指系統(tǒng)的一個(gè)或多個(gè)結(jié)構(gòu),結(jié)構(gòu)中包括軟件的構(gòu)件、構(gòu)件的外部可見(jiàn)屬性以及它們之間的相互關(guān)系[Bass2003]。軟件體系結(jié)構(gòu)的設(shè)計(jì)并不意味著開(kāi)發(fā)可執(zhí)行的軟件。相反,它被看成軟件的概念模型,是軟件開(kāi)發(fā)中的一個(gè)步驟。通過(guò)體系結(jié)構(gòu)的設(shè)計(jì),軟件工程師能夠做到:

(1) 分析設(shè)計(jì)滿足需求的有效性;

(2) 考慮體系結(jié)構(gòu)的各種方案,使設(shè)計(jì)容易變更;

(3) 定義構(gòu)件間的接口;

(4) 降低建立軟件的風(fēng)險(xiǎn)。在設(shè)計(jì)算法和實(shí)現(xiàn)軟件之前設(shè)計(jì)軟件體系結(jié)構(gòu)是很重要的,因?yàn)檐浖w系結(jié)構(gòu)可以使對(duì)系統(tǒng)開(kāi)發(fā)感興趣的各方(項(xiàng)目相關(guān)者)進(jìn)行通信。面向服務(wù)體系結(jié)構(gòu)(SOA)是本書(shū)中的一個(gè)重要主題,在面向服務(wù)的體系結(jié)構(gòu)中,明確地包括了三方:服務(wù)提供者、服務(wù)中介和服務(wù)請(qǐng)求者,每一部分獨(dú)立進(jìn)行算法設(shè)計(jì)和代碼編寫(xiě)。

軟件體系結(jié)構(gòu)強(qiáng)調(diào)早期的設(shè)計(jì)決策,這些決策對(duì)后續(xù)的軟件工程工作以及系統(tǒng)的最終成功產(chǎn)生深刻的影響。1.1.3計(jì)算范型

歷史上,已開(kāi)發(fā)出的編程語(yǔ)言很多,但只有數(shù)千種在實(shí)際中被應(yīng)用。相對(duì)于獨(dú)立發(fā)展和演變的自然語(yǔ)言,計(jì)算機(jī)編程語(yǔ)言之間有很大的相似性。它們彼此相似是因?yàn)槿缦略颍合碛泄餐臄?shù)學(xué)基礎(chǔ)(例如:布爾代數(shù)、邏輯);提供類(lèi)似的功能(例如:算術(shù)、邏輯運(yùn)算和文字處理);基于相同的指令集和硬件;有共同的設(shè)計(jì)目標(biāo)——尋找一種人類(lèi)使用簡(jiǎn)單并且硬件執(zhí)行效率高的語(yǔ)言。編程語(yǔ)言的設(shè)計(jì)者分享他們的設(shè)計(jì)經(jīng)驗(yàn)。

但是有些編程語(yǔ)言彼此之間更相似,而另一些語(yǔ)言之間大不相同?;谒鼈冎g的相似性或者范型,編程語(yǔ)言被分為不同的類(lèi)。在編程語(yǔ)言的定義中,范型是表達(dá)計(jì)算或算法的基本規(guī)則、概念、方法的集合。主要的范型包括命令式、面向?qū)ο?、函?shù)式、邏輯、分布式以及SOC。

命令式計(jì)算范型,也叫做過(guò)程式計(jì)算范型,通過(guò)全部說(shuō)明和全部控制被命名數(shù)據(jù)的操作并以步的方式表達(dá)計(jì)算。換句話說(shuō),數(shù)據(jù)或值最初被存儲(chǔ)在變量中(存儲(chǔ)單元),從內(nèi)存讀取,在ALU(算術(shù)邏輯單元)中操作,然后再存到相同或者不同的變量中(存儲(chǔ)單元)。最后,變量的值作為輸出發(fā)送到輸入/輸出設(shè)備中。命令式語(yǔ)言的基礎(chǔ)是基于存儲(chǔ)程序概念的計(jì)算機(jī)硬件組織和體系結(jié)構(gòu)(馮·諾依曼機(jī))(參見(jiàn)/wiki/Von_Neumann_machine的例子)。命令式編程語(yǔ)言包括所有的匯編語(yǔ)言和早期的高級(jí)語(yǔ)言,例如FORTRAN、Algol、Ada、Pascal以及C。面向?qū)ο笥?jì)算范型和命令式計(jì)算范型基本類(lèi)似,除了相關(guān)變量以及對(duì)變量的操作被封裝在對(duì)象中。為了減少(簡(jiǎn)化)對(duì)象之間的交互,對(duì)象中的變量和方法(操作)的訪問(wèn)權(quán)限允許被定義為私有的。對(duì)象被看做程序的主要構(gòu)造塊,它支持繼承、類(lèi)層次結(jié)構(gòu)以及多態(tài)。典型的面向?qū)ο蟪绦蛘Z(yǔ)言包括Smalltalk、C++、Java和C#。

函數(shù)式計(jì)算范型,也叫做應(yīng)用型計(jì)算范型,以數(shù)學(xué)函數(shù)表達(dá)計(jì)算。因?yàn)槲覀冊(cè)诤芏鄶?shù)學(xué)課程中用數(shù)學(xué)函數(shù)來(lái)表達(dá)計(jì)算,所以函數(shù)式編程可能被認(rèn)為容易理解和使用。但實(shí)際上,由于函數(shù)式編程和面向?qū)ο笠约懊钍骄幊檀蟛幌嗤?而大多數(shù)程序員習(xí)慣于用命令式編程和面向?qū)ο缶幊叹帉?xiě)代碼,所以轉(zhuǎn)化到函數(shù)式編程就變得很困難。其主要區(qū)別是在函數(shù)式編程語(yǔ)言中沒(méi)有存儲(chǔ)單元的概念,每個(gè)函數(shù)用多個(gè)值作為輸入(參數(shù))并且返回單一的值(函數(shù)輸出);返回值不能被存儲(chǔ)供日后使用,它必須作為最終輸出或者是作為另一個(gè)函數(shù)的參數(shù)值立即使用。函數(shù)式編程就是定義函數(shù)并組織一個(gè)或者多個(gè)函數(shù)的返回值作為另一個(gè)函數(shù)的參數(shù)。函數(shù)式編程語(yǔ)言主要基于將在第4章討論的λ-演算。典型的函數(shù)式編程語(yǔ)言包括ML、SML和Lisp/Scheme。邏輯計(jì)算范型,也叫做聲明計(jì)算范型,用邏輯謂詞表達(dá)計(jì)算。一個(gè)邏輯程序是事實(shí)、規(guī)則和問(wèn)題的集合。一個(gè)邏輯程序的執(zhí)行過(guò)程是把問(wèn)題和給定的事實(shí)與規(guī)則庫(kù)中的每一個(gè)事實(shí)和規(guī)則進(jìn)行比較。如果問(wèn)題找到了一個(gè)匹配,則我們得到這個(gè)問(wèn)題的肯定答案。否則,得到否定答案。邏輯編程包含發(fā)現(xiàn)事實(shí)、基于事實(shí)定義規(guī)則編寫(xiě)想解決的問(wèn)題等內(nèi)容。Prolog是唯一一個(gè)比較有意義的邏輯編程語(yǔ)言。

所有編程范型都支持“小型程序”和“大型程序”。前者強(qiáng)調(diào)使用基本的編程結(jié)構(gòu),例如,順序、條件分支和循環(huán)結(jié)構(gòu)開(kāi)發(fā)程序組件或模塊;后者強(qiáng)調(diào)開(kāi)發(fā)大型應(yīng)用。大型應(yīng)用通常要求更多的人力和工作量,而且它們也被用在關(guān)鍵領(lǐng)域,比如,銀行、電子商務(wù)、嵌入式系統(tǒng)和電子政務(wù)。另外一個(gè)重要的計(jì)算范型是基于構(gòu)件的計(jì)算。這一范型強(qiáng)調(diào)的是用預(yù)先編寫(xiě)好的構(gòu)件或模塊構(gòu)成大型應(yīng)用。構(gòu)件或模塊往往是預(yù)先編譯的程序單元,并在運(yùn)行之前連接到應(yīng)用程序。從概念上講,基于構(gòu)件的計(jì)算并不是新的范型。面向?qū)ο笥?jì)算被廣泛認(rèn)為是基于構(gòu)件的計(jì)算,它的一個(gè)類(lèi)或一個(gè)對(duì)象就是一個(gè)構(gòu)件。一個(gè)名字空間(一組類(lèi))也可以被視為是一個(gè)構(gòu)件。然而上述觀點(diǎn)緊緊圍繞著類(lèi)的定義?;跇?gòu)件的計(jì)算有更為廣泛的含義,它允許任何組件或模塊被看成是一個(gè)構(gòu)件,因此,基于構(gòu)件的計(jì)算可看做一個(gè)不同于面向?qū)ο蟮挠?jì)算范型。一個(gè)構(gòu)件可以和一個(gè)對(duì)象一樣小,也可以和一個(gè)應(yīng)用程序一樣大,而且構(gòu)件的封裝性很好。因此,在有些人看來(lái),SOC是真正的基于構(gòu)件的計(jì)算,服務(wù)被看做是構(gòu)件。在他們的認(rèn)識(shí)中,SOC基本上是基于構(gòu)件的計(jì)算,但每個(gè)構(gòu)件用開(kāi)放標(biāo)準(zhǔn)說(shuō)明。分布式計(jì)算包括在多個(gè)邏輯和物理的處理器或者計(jì)算機(jī)上執(zhí)行的計(jì)算。這些單元相互協(xié)作溝通,完成一個(gè)完整的應(yīng)用。計(jì)算單元可以是構(gòu)件中的函數(shù)(方法)、構(gòu)件或應(yīng)用程序。在分布式計(jì)算范型中首先需要解決的問(wèn)題是分布式單元間的并發(fā)性、并行計(jì)算、資源共享、同步、消息和通信。不同級(jí)別的分布式會(huì)導(dǎo)致不同的變化。多線程是一種常見(jiàn)的分布式計(jì)算技術(shù),它允許同一軟件中不同函數(shù)并發(fā)執(zhí)行。如果分布式單元在對(duì)象級(jí)別,則分布式計(jì)算就是分布式面向?qū)ο笥?jì)算。主要的分布式面向?qū)ο笥?jì)算框架是由OMG(對(duì)象管理組織)開(kāi)發(fā)的CORBA(公共對(duì)象請(qǐng)求代理體系結(jié)構(gòu))以及由微軟開(kāi)發(fā)的分布式構(gòu)件對(duì)象模型(DCOM)。面向服務(wù)計(jì)算(SOC)也是一個(gè)分布式計(jì)算范型,SOC在以下幾個(gè)方面和分布式面向?qū)ο笥?jì)算不同:

(1)SOC強(qiáng)調(diào)的是分布式服務(wù)(包括可能的服務(wù)數(shù)據(jù))而不是分布式對(duì)象;

(2)SOC明確區(qū)分開(kāi)發(fā)責(zé)任、軟件提供服務(wù)、服務(wù)中介,通過(guò)服務(wù)消費(fèi)構(gòu)建應(yīng)用;

(3)SOC支持庫(kù)(公共或私有)中重用服務(wù)的匹配、發(fā)現(xiàn)和調(diào)用(遠(yuǎn)程或本地);

(4)在SOC中,服務(wù)通過(guò)獨(dú)立于平臺(tái)和供應(yīng)商的開(kāi)放標(biāo)準(zhǔn)和協(xié)議進(jìn)行通信。

圖1.2不同計(jì)算范型的特征值得一提的是,許多編程語(yǔ)言屬于多種計(jì)算范型。例如,C++是一個(gè)面向?qū)ο蟮木幊陶Z(yǔ)言。然而C++幾乎包括C的所有特征,因此C++也是一種命令式的編程語(yǔ)言,我們可以用C++去寫(xiě)C程序。

Java是一個(gè)純粹的面向?qū)ο蟮木幊陶Z(yǔ)言,也就是,語(yǔ)言的設(shè)計(jì)重點(diǎn)強(qiáng)調(diào)了面向?qū)ο?但是它仍然包含許多命令式特征。例如:Java的基本類(lèi)型變量使用值語(yǔ)義并且不從堆中分配存儲(chǔ)單元。Lisp包含了許多非函數(shù)特性,Lisp和Scheme是函數(shù)式編程語(yǔ)言,但是它們也包含了許多非函數(shù)式特征,例如當(dāng)涉及到輸入輸出時(shí)進(jìn)行順序處理。

Prologs是一個(gè)邏輯編程語(yǔ)言,但是它的算術(shù)操作用的是命令方式。

總而言之,這些計(jì)算范型往往互相重疊。例如,面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言通常也被看做命令式程序設(shè)計(jì)語(yǔ)言、SOC語(yǔ)言,例如,Java和C#也是面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言。因此,一個(gè)編程語(yǔ)言可以用不同的計(jì)算范型編寫(xiě)程序。C、C++、Scheme和Prolog用于這些計(jì)算范型的介紹參見(jiàn)(Chen,2006)。

在分布式計(jì)算中,計(jì)算分布在多個(gè)計(jì)算單元(處理器或計(jì)算機(jī))中,而不是局限在單一的計(jì)算單元中。實(shí)際上,當(dāng)多核處理器的設(shè)計(jì)出現(xiàn)后,現(xiàn)在所有的大型計(jì)算系統(tǒng)都是分布式的。1.2分布式計(jì)算和分布式軟件體系結(jié)構(gòu)1.2.1分布式計(jì)算

軟件體系結(jié)構(gòu)描述了系統(tǒng)結(jié)構(gòu)和功能在若干邏輯和物理計(jì)算單元上的分配。為一個(gè)應(yīng)用選擇合適的體系結(jié)構(gòu)對(duì)于達(dá)到預(yù)期的服務(wù)質(zhì)量是必不可少的。

分布式計(jì)算經(jīng)常要處理多層面的挑戰(zhàn),包括復(fù)雜性、通信和連接、安全性和可靠性、可管理性、不可預(yù)測(cè)性以及非確定性行為。Sun公司研究員提出的分布式計(jì)算的八個(gè)謬論(/wiki/Fallacies_of_Distributed_Computing)很好地表達(dá)了這些挑戰(zhàn):①網(wǎng)絡(luò)是可靠的;②延遲是零;③帶寬是無(wú)限的;④網(wǎng)絡(luò)是安全的;⑤拓?fù)浣Y(jié)構(gòu)不發(fā)生變化;⑥有一個(gè)管理員;⑦傳輸成本是零;⑧網(wǎng)絡(luò)是同質(zhì)的。

前四個(gè)謬論就是所謂的網(wǎng)絡(luò)計(jì)算的謬論,是BillJoy和TomLyon在1991年提出來(lái)的。PeterDeutsch增加了后面的三個(gè),這經(jīng)常被稱(chēng)做是Deutsch的七個(gè)謬論。JamesGosline在1997年增加了第八個(gè)謬論。1.2.2N層體系結(jié)構(gòu)

類(lèi)似于OSI的七層網(wǎng)絡(luò)體系結(jié)構(gòu),分布式軟件體系結(jié)構(gòu)通常是層次結(jié)構(gòu),其中的組件是用層來(lái)組織的,也稱(chēng)為N層體架構(gòu)。例如,復(fù)雜的商業(yè)軟件可以組成一個(gè)五層模型:

(1)表示層:圖形用戶界面的風(fēng)格(GUI);

(2)表示層的實(shí)現(xiàn):用特定的編程語(yǔ)言編寫(xiě)GUI;

(3)業(yè)務(wù)邏輯層:業(yè)務(wù)對(duì)象、規(guī)則和策略的實(shí)現(xiàn);

(4)數(shù)據(jù)訪問(wèn)層:業(yè)務(wù)邏輯和數(shù)據(jù)庫(kù)的接口;

(5)數(shù)據(jù)層:數(shù)據(jù)庫(kù)。

因?yàn)橥粚踊蛞恍┫噜弻涌梢苑旁诜植际较到y(tǒng)的同一節(jié)點(diǎn)上,所以層次化設(shè)計(jì)非常適合于分布式計(jì)算,層次化設(shè)計(jì)的另一個(gè)優(yōu)點(diǎn)是維護(hù)系統(tǒng)時(shí)的靈活性,每一層可以相對(duì)獨(dú)立地進(jìn)行修改。例如,當(dāng)?shù)诙?也就是表示層的實(shí)現(xiàn)發(fā)生變更時(shí),從邏輯上看其他層不必作改變,用戶仍然使用同樣的接口,業(yè)務(wù)邏輯層也保持不變;從編程的角度來(lái)看,如果在修改層提供不同的用戶接口,那么上面的層可能需要改變。

兩層體系結(jié)構(gòu)和三層體系結(jié)構(gòu)是廣泛使用的分布式體系結(jié)構(gòu)。兩層體系結(jié)構(gòu),也被稱(chēng)做是客戶/服務(wù)器體系結(jié)構(gòu),應(yīng)用程序分別被建模為服務(wù)器提供的一組服務(wù)以及使用這些服務(wù)的一組客戶??蛻糁婪?wù)器但是服務(wù)器不必知道客戶??蛻艉头?wù)都是邏輯處理,可以駐留在同一計(jì)算機(jī)或不同的計(jì)算機(jī)中。圖1.3是一個(gè)客戶/服務(wù)器體系結(jié)構(gòu)的例子。為了對(duì)客戶提供可靠的服務(wù),服務(wù)器可以組成一個(gè)允許他們之間相互備份的聯(lián)盟。該聯(lián)盟對(duì)用戶是透明的。數(shù)據(jù)庫(kù)提供的數(shù)據(jù)服務(wù)對(duì)業(yè)務(wù)應(yīng)用是非常重要的,數(shù)據(jù)庫(kù)是這個(gè)體系結(jié)構(gòu)中服務(wù)的一部分。

圖1.3具有服務(wù)器聯(lián)盟的客戶/服務(wù)器體系結(jié)構(gòu)

客戶/服務(wù)器體系結(jié)構(gòu)可以進(jìn)一步被劃分為瘦客戶和胖客戶的體系結(jié)構(gòu)。在瘦客戶體系結(jié)構(gòu)中,所有應(yīng)用處理以及數(shù)據(jù)管理都在服務(wù)器端執(zhí)行??蛻舳酥回?fù)責(zé)運(yùn)行表示層的軟件。

在胖客戶體系結(jié)構(gòu)中,客戶端軟件實(shí)現(xiàn)了應(yīng)用邏輯以及和系統(tǒng)用戶的交互。服務(wù)器端只負(fù)責(zé)數(shù)據(jù)(數(shù)據(jù)庫(kù))的管理。

客戶/服務(wù)器體系結(jié)構(gòu)聯(lián)盟的進(jìn)一步發(fā)展是虛擬化,它把多個(gè)服務(wù)看成是一個(gè)單一的虛擬服務(wù),或者將一個(gè)服務(wù)看做多個(gè)虛擬的服務(wù)。每一個(gè)虛擬服務(wù)和實(shí)際的物理服務(wù)的使用方式是相同的。為了進(jìn)一步提高資源的共享率,一個(gè)虛擬服務(wù)可以有多個(gè)租戶,每一個(gè)租戶共享這個(gè)環(huán)境以及環(huán)境中的資源。虛擬化和多租戶是實(shí)現(xiàn)云計(jì)算的關(guān)鍵技術(shù)。

三層體系結(jié)構(gòu)由三個(gè)層次組成,如圖1.4所示。每一層在一個(gè)單獨(dú)的處理器上運(yùn)行。這是一個(gè)更加平衡的方法,它比瘦客戶方法的性能好,比胖客戶方法易于管理。三層體系結(jié)構(gòu)也是一個(gè)伸縮性更好的體系結(jié)構(gòu),當(dāng)需求增加時(shí),可以添加額外的服務(wù)。

圖1.4三層體系結(jié)構(gòu)

圖1.5是一個(gè)三層架構(gòu)的網(wǎng)上銀行系統(tǒng)的例子。圖中的客戶端包含ATM(自動(dòng)提款機(jī))的圖形用戶界面、POP(購(gòu)買(mǎi)點(diǎn))以及用戶賬戶的Web訪問(wèn)。應(yīng)用處理層安裝在銀行的IT中心,負(fù)責(zé)處理所有的請(qǐng)求。數(shù)據(jù),例如賬戶信息和存款,存儲(chǔ)在不同的服務(wù)器中進(jìn)行管理。

圖1.5三層架構(gòu)的網(wǎng)上銀行系統(tǒng)實(shí)例

面向服務(wù)的體系結(jié)構(gòu)可以實(shí)現(xiàn)成四層次的體系結(jié)構(gòu),如圖1.6(a)所示,它包含表示層、應(yīng)用層、服務(wù)存儲(chǔ)層以及數(shù)據(jù)管理層。然而,面向服務(wù)體系結(jié)構(gòu)不被局限于這一架構(gòu),因?yàn)檫@種體系結(jié)構(gòu)只有相鄰層之間才可以通信。圖1.6(b)以及(c)是實(shí)現(xiàn)SOA的兩個(gè)可能的變種。

圖1.6四層體系結(jié)構(gòu)及其變種1.2.3分布式對(duì)象體系結(jié)構(gòu)

不同于N層體系結(jié)構(gòu),在層次體系結(jié)構(gòu)中服務(wù)器和客戶端有明確的區(qū)別,而在分布式對(duì)象體系結(jié)構(gòu)中客戶端和服務(wù)器沒(méi)有很明顯的區(qū)別,每個(gè)分布實(shí)體都可以向其他對(duì)象提供服務(wù)或接收來(lái)自其他對(duì)象的服務(wù)。

分布式對(duì)象體系結(jié)構(gòu)在實(shí)現(xiàn)不同應(yīng)用時(shí)更為通用。但和分層結(jié)構(gòu)相比,它的設(shè)計(jì)和管理更為復(fù)雜,因?yàn)樗试S系統(tǒng)設(shè)計(jì)者延遲決定在何處以及怎樣提供服務(wù)。換句話說(shuō),這是一個(gè)開(kāi)放的體系結(jié)構(gòu),允許系統(tǒng)根據(jù)需求添加新的資源。用分布式對(duì)象體系結(jié)構(gòu)構(gòu)建的系統(tǒng)是靈活的和可擴(kuò)展的。根據(jù)需要,通過(guò)對(duì)象在網(wǎng)絡(luò)中的遷移重新動(dòng)態(tài)配置系統(tǒng)成為可能(例如,使用同一種編程語(yǔ)言)。作為為一個(gè)邏輯模型,分布式對(duì)象體系結(jié)構(gòu)允許開(kāi)發(fā)人員組織和管理系統(tǒng)。在這種情況下,通過(guò)服務(wù)和服務(wù)組合,開(kāi)發(fā)者更多地關(guān)注應(yīng)用的功能。

兩個(gè)主要的分布式對(duì)象體系結(jié)構(gòu)是OMG(ObjectManagementGroup)開(kāi)發(fā)的CORBA(CommonObjectRequestBrokerArchitecture)和微軟開(kāi)發(fā)的DCOM(DistributedComponentObjectModel)。

在CORBA中,對(duì)象通過(guò)一個(gè)稱(chēng)為對(duì)象請(qǐng)求代理(ORB)的中間件系統(tǒng)通信,它也被稱(chēng)為軟件總線,如圖1.7所示。

圖1.7CORBA體系結(jié)構(gòu)

原則上,CORBA對(duì)象和C++、C#以及Java中的對(duì)象類(lèi)似。類(lèi)似于C++,CORBA對(duì)象有一個(gè)用通用語(yǔ)言IDL(接口定義語(yǔ)言)描述的獨(dú)立接口,對(duì)象的接口可以用任何編程語(yǔ)言描述。程序轉(zhuǎn)換器可以用來(lái)轉(zhuǎn)換接口代碼,例如C++和Java可被轉(zhuǎn)換成IDL代碼,因此用不同編程語(yǔ)言所寫(xiě)的對(duì)象可以相互通信。

ORB通過(guò)用IDL語(yǔ)言寫(xiě)的存根程序處理對(duì)象之間的通信。服務(wù)提供者通過(guò)IDL存根程序使服務(wù)端口為大家所知。如果一個(gè)服務(wù)請(qǐng)求者調(diào)用服務(wù)存根程序,這個(gè)調(diào)用將轉(zhuǎn)化為對(duì)服務(wù)提供者的函數(shù)的調(diào)用。

支持分布式對(duì)象體系結(jié)構(gòu)的另一個(gè)平臺(tái)是Java企業(yè)版(JavaEE)。Java消息服務(wù)(JMS)是連接Java對(duì)象的軟件總線,位于因特網(wǎng)InterOrb協(xié)議(RMIIIOP)之上的Java遠(yuǎn)程方法調(diào)用(JavaRMI)提供了一個(gè)與CORBA通信的IDL接口。IIOP上的JavaRMI是由Sun和IBM聯(lián)合開(kāi)發(fā)的。JavaEE的對(duì)象也可以和微軟平臺(tái)通信。Java本地接口(JNI)可用來(lái)和C++以及C#程序通信。

DCOM(分布式對(duì)象構(gòu)件模型)是微軟在VisualStudio.Net之前開(kāi)發(fā)的分布式軟件開(kāi)發(fā)框架。DCOM允許軟件構(gòu)件分布在多個(gè)互聯(lián)的計(jì)算機(jī)上并相互通信。框架經(jīng)過(guò)了幾代演變。起初,分布式軟件開(kāi)發(fā)框架被稱(chēng)為OLE(對(duì)象連接與嵌入),OLE也是一個(gè)分布式對(duì)象系統(tǒng),然后被擴(kuò)展到網(wǎng)絡(luò)OLE,再到1993年的COM(構(gòu)件對(duì)象模型),COM提供了對(duì)象間的通信能力。在演化為DCOM之前,在Windows2000中,對(duì)COM作了有意義的擴(kuò)展,并被命名為COM+。DCOM的所有技術(shù)由VisualStudio.Net集成或取代,VisualStudio.Net是一個(gè)集所有功能于一身的面向?qū)ο蟆⒎植际?、面向服?wù)的軟件開(kāi)發(fā)環(huán)境。

分布式對(duì)象體系結(jié)構(gòu)是SOC的前身。它有許多SOC的特點(diǎn)。SOC明顯的進(jìn)步和成就包括:

(1)所有主要的計(jì)算機(jī)公司都認(rèn)可SOC標(biāo)準(zhǔn)、協(xié)議以及建立可操作服務(wù)的接口,接口與平臺(tái)和語(yǔ)言無(wú)關(guān)。在分布式對(duì)象體系結(jié)構(gòu)中,CORBA和DCOM具有相似的功能和目標(biāo),然而,在這兩種環(huán)境中開(kāi)發(fā)的系統(tǒng)不具有互操作性,DCOM也是平臺(tái)依賴(lài)的。

(2)SOC明確劃分了開(kāi)發(fā)的職責(zé):服務(wù)提供者開(kāi)發(fā)服務(wù),服務(wù)請(qǐng)求者用現(xiàn)有的服務(wù)建立應(yīng)用,服務(wù)中介發(fā)布服務(wù),并進(jìn)行服務(wù)的匹配和發(fā)現(xiàn)。在分布式對(duì)象體系結(jié)構(gòu)中,沒(méi)有明確的職責(zé)劃分,而且服務(wù)的發(fā)布和發(fā)現(xiàn)也沒(méi)有外部機(jī)制。

(3)用Web服務(wù)實(shí)現(xiàn)SOC能夠利用互聯(lián)網(wǎng)基礎(chǔ)設(shè)施傳輸服務(wù),采用相同的技術(shù)和標(biāo)準(zhǔn),也可以用局域網(wǎng)建立私有的SOC應(yīng)用。

多線程是一個(gè)基本的分布式計(jì)算模型,允許程序員在函數(shù)和類(lèi)級(jí)別上指定并行計(jì)算單元,這些計(jì)算單元是在相同或不同處理器上運(yùn)行的獨(dú)立進(jìn)程,并依賴(lài)于操作系統(tǒng)的分配和調(diào)度。線程之間的通信、資源共享以及同步由程序員管理。第2章將對(duì)多線程做詳細(xì)介紹。

1.3.1基本概念和術(shù)語(yǔ)

服務(wù)是服務(wù)制造者(提供者)和消費(fèi)者之間的一個(gè)接口,計(jì)算機(jī)服務(wù)的制造者(也稱(chēng)為提供者)是一個(gè)開(kāi)發(fā)供他人使用的計(jì)算機(jī)程序的人(或者是一個(gè)運(yùn)行或存儲(chǔ)程序的計(jì)算機(jī)),而服務(wù)消費(fèi)者是使用服務(wù)的人或計(jì)算機(jī)程序。從開(kāi)發(fā)者角度看,服務(wù)是一個(gè)定義良好、自包含、不依賴(lài)其他功能的環(huán)境或狀態(tài)的功能模塊。這些服務(wù)可以是一個(gè)新開(kāi)發(fā)的模塊或是對(duì)已有的程序進(jìn)行包裝提供新的接口的模塊。1.3面向服務(wù)的體系結(jié)構(gòu)和計(jì)算

從應(yīng)用構(gòu)建者或服務(wù)消費(fèi)者的角度看,服務(wù)是為獲得預(yù)期結(jié)果而由服務(wù)提供者完成的一個(gè)工作單元。和應(yīng)用不同的是,服務(wù)通常不包含用戶界面,而提供的是應(yīng)用編程接口(API),這樣服務(wù)可以被一個(gè)應(yīng)用或另一個(gè)服務(wù)調(diào)用(激活)。當(dāng)人使用服務(wù)時(shí),必須添加用戶界面。一個(gè)帶有用戶界面的服務(wù)就是一個(gè)應(yīng)用。

服務(wù)消費(fèi)者所需的服務(wù)發(fā)現(xiàn)可以獲得服務(wù)中介的支持。服務(wù)中介允許服務(wù)提供者發(fā)布服務(wù)定義和接口,同時(shí)允許服務(wù)消費(fèi)者搜索數(shù)據(jù)庫(kù)以發(fā)現(xiàn)所需的服務(wù)。

SOC的一個(gè)重要特點(diǎn)是把軟件開(kāi)發(fā)分為三方(項(xiàng)目相關(guān)者):服務(wù)請(qǐng)求者或消費(fèi)者、提供者和中介。這種三方結(jié)構(gòu)為軟件系統(tǒng)結(jié)構(gòu)增添了很大的靈活性,并支持軟件開(kāi)發(fā)的新方法——組合。

面向服務(wù)體系結(jié)構(gòu)(SOA)是一個(gè)分布式軟件體系結(jié)構(gòu),它考慮的是通過(guò)松散耦合的服務(wù)構(gòu)建的軟件系統(tǒng)。這些服務(wù)通過(guò)標(biāo)準(zhǔn)接口,例如WSDL(Web服務(wù)描述語(yǔ)言)接口,以及標(biāo)準(zhǔn)的消息交換協(xié)議,例如SOAP(簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議)相互通信。這些服務(wù)是自治和獨(dú)立于平臺(tái)的。它們駐留在不同的計(jì)算機(jī)上并且為了實(shí)現(xiàn)期望的目標(biāo)和最終結(jié)果使用彼此的服務(wù)。三個(gè)獨(dú)立方:服務(wù)請(qǐng)求者、服務(wù)中介以及服務(wù)提供者開(kāi)發(fā)和維護(hù)SOA中的軟件。服務(wù)提供者開(kāi)發(fā)服務(wù)并且在服務(wù)中介那里發(fā)布,而服務(wù)請(qǐng)求者通過(guò)服務(wù)中介發(fā)現(xiàn)服務(wù)并使用可用的服務(wù)組合成應(yīng)用。許多服務(wù)提供者可以發(fā)布相同的服務(wù),服務(wù)請(qǐng)求者可以動(dòng)態(tài)發(fā)現(xiàn)服務(wù)并且當(dāng)更好的服務(wù)被發(fā)現(xiàn)時(shí),在運(yùn)行時(shí)把服務(wù)綁定到應(yīng)用中。

面向服務(wù)計(jì)算(SOC)指的是基于SOA概念模型的計(jì)算范型。SOC包括三個(gè)并發(fā)進(jìn)程中表示的計(jì)算概念、原理以及方法。這三個(gè)并發(fā)進(jìn)程是服務(wù)開(kāi)發(fā)、服務(wù)發(fā)布以及使用開(kāi)發(fā)出的服務(wù)進(jìn)行應(yīng)用組合。SOA和SOC之間最為本質(zhì)的區(qū)別是SOA是一個(gè)概念模型,不涉及建立一個(gè)可操作的軟件所需要的算法的設(shè)計(jì)及實(shí)現(xiàn)。而SOC包括了軟件開(kāi)發(fā)生命周期的大部分,從需求、問(wèn)題定義、概念模型、規(guī)格說(shuō)明、體系結(jié)構(gòu)設(shè)計(jì)、組合、服務(wù)發(fā)現(xiàn)、服務(wù)實(shí)現(xiàn)、測(cè)試直到評(píng)估。因此,應(yīng)用建造者(服務(wù)請(qǐng)求者)更多地關(guān)注SOA,而SOC軟件開(kāi)發(fā)的所有三方都關(guān)注SOC。

面向服務(wù)開(kāi)發(fā)(SOD)指的是基于SOA概念和SOC范型的整個(gè)軟件開(kāi)發(fā)周期,包括需求、問(wèn)題定義、概念模型、規(guī)格說(shuō)明、體系結(jié)構(gòu)設(shè)計(jì)、組合、服務(wù)發(fā)現(xiàn)、服務(wù)實(shí)現(xiàn)、測(cè)試、評(píng)估、部署和維護(hù),這些活動(dòng)將實(shí)現(xiàn)可運(yùn)行的軟件。

在文獻(xiàn)中,SOA常被擴(kuò)展至包括SOC的含義,因此SOA和SOC可以交替使用,特別是當(dāng)SOA和SOC的具體差別不是關(guān)注的重點(diǎn)時(shí)。另一方面,SOC常被擴(kuò)展至包含SOD的含義,特別是當(dāng)SOC和SOD之間的具體差別不是關(guān)注的重點(diǎn)時(shí)。因此在本書(shū)中,如果它們之間的差別不是關(guān)注的焦點(diǎn),為了簡(jiǎn)化術(shù)語(yǔ)的使用,我們用SOC替代SOA和SOD。

圖1.8說(shuō)明了SOA、SOC、SOD之間的聯(lián)系。虛線圈表示了本書(shū)覆蓋的內(nèi)容。圖1.8SOA、SOC和SOD之間的聯(lián)系

我們用“分布式面向服務(wù)軟件開(kāi)發(fā)”作為題目,類(lèi)似于廣泛使用的分布式面向?qū)ο蟮能浖_(kāi)發(fā)方法,目的是強(qiáng)調(diào)面向服務(wù)的軟件開(kāi)發(fā)在本質(zhì)上是分布式的。不僅開(kāi)發(fā)的軟件分布在不同地點(diǎn)不同計(jì)算機(jī)上,而且因?yàn)閼?yīng)用的構(gòu)建者、服務(wù)中介、服務(wù)提供者在不同地點(diǎn)獨(dú)立地進(jìn)行開(kāi)發(fā)工作,所以開(kāi)發(fā)過(guò)程也是分布式的。但這些開(kāi)發(fā)者必須遵循同樣的接口和標(biāo)準(zhǔn)。第2章會(huì)進(jìn)一步討論一般意義上的分布式計(jì)算以及SOA、SOC、SOD如何適應(yīng)一般的分布式計(jì)算框架。

WS(Web服務(wù)):WS是指通過(guò)Web訪問(wèn)的服務(wù)。基于Web服務(wù)的計(jì)算是SOC的一種實(shí)現(xiàn)。它也許是最廣為人知的實(shí)現(xiàn)SOC的例子;然而,其他SOC實(shí)現(xiàn)也是可能的。Web服務(wù)支持SOC,并有一系列可用的技術(shù),包括WSDL、SOAP和XML等。XML是一種數(shù)據(jù)表示標(biāo)準(zhǔn)。SOAP可以實(shí)現(xiàn)跨網(wǎng)絡(luò)和平臺(tái)的遠(yuǎn)程服務(wù)調(diào)用。WSDL用來(lái)描述服務(wù)接口。UDDI(通用描述、發(fā)現(xiàn)和集成)和ebXML(電子商務(wù)可擴(kuò)展標(biāo)記語(yǔ)言)用于發(fā)布Web服務(wù),這使通過(guò)手動(dòng)以及編程方式發(fā)布、搜索和發(fā)現(xiàn)服務(wù)成為可能。有關(guān)WS技術(shù)的標(biāo)準(zhǔn)和協(xié)議不斷在增加。

Web服務(wù)技術(shù)的特點(diǎn)有以下幾個(gè)方面:

(1)服務(wù)是功能構(gòu)建塊。多個(gè)服務(wù)可以形成一個(gè)組合服務(wù),組合服務(wù)又成為一個(gè)新的構(gòu)建塊。但是,Web服務(wù)的代碼并不需要被導(dǎo)入并集成到應(yīng)用程序。相反,服務(wù)在服務(wù)提供者的站點(diǎn)運(yùn)行并且使用消息機(jī)制和應(yīng)用松耦合。因此,服務(wù)不必用同一語(yǔ)言編寫(xiě),也不用在同一平臺(tái)開(kāi)發(fā)和運(yùn)行。

(2)服務(wù)是可以通過(guò)URL(統(tǒng)一資源定位器)識(shí)別的軟件模塊,模塊接口、綁定的定義、描述以及發(fā)現(xiàn)可以用一個(gè)XML文檔來(lái)描述。

(3)Web服務(wù)通常用WSDL來(lái)描述,通過(guò)HTTP上的SOAP協(xié)議訪問(wèn)。當(dāng)添加人機(jī)界面后,一個(gè)服務(wù)或組合服務(wù)可以形成一個(gè)Web應(yīng)用。Web服務(wù)通常是通過(guò)計(jì)算機(jī)程序訪問(wèn)的,而Web應(yīng)用則通過(guò)Web瀏覽器訪問(wèn)的。

組合是SOC中的一個(gè)重要概念,它使用現(xiàn)有的服務(wù)組合出一個(gè)組合服務(wù)或應(yīng)用。目前有兩種組合方法:編排(Orchestration)和共同設(shè)計(jì)(Choreography)。在編排中,有一個(gè)主要過(guò)程,它本身也可以是一個(gè)服務(wù),這個(gè)主要過(guò)程控制參與的服務(wù)并協(xié)調(diào)不同操作的執(zhí)行。參與的服務(wù)僅僅與主要過(guò)程通信。編排對(duì)私有業(yè)務(wù)流程很有用。BPEL(業(yè)務(wù)流程執(zhí)行語(yǔ)言)是一種支持編排的語(yǔ)言。在共同設(shè)計(jì)中,沒(méi)有中央?yún)f(xié)調(diào)者,參與的每個(gè)服務(wù)互相通信。共同設(shè)計(jì)對(duì)于公有的業(yè)務(wù)流程非常有用,而且它允許動(dòng)態(tài)組合。WSCDL(Web服務(wù)共同設(shè)計(jì)描述語(yǔ)言)是一種支持共同設(shè)計(jì)的組合語(yǔ)言。

SOI(面向服務(wù)的基礎(chǔ)設(shè)施):SOI有兩種含義。由于SOC涉及到許多新的操作,如發(fā)布、發(fā)現(xiàn)、基于策略的管理、編排、共同設(shè)計(jì),這些操作在傳統(tǒng)的計(jì)算中不常使用,所以SOI的第一個(gè)含義是指支持SOC的硬件和軟件。例如,如果服務(wù)的數(shù)量很大,搜索算法必須有效,而且還要有良好的緩沖機(jī)制。否則,大量時(shí)間將花費(fèi)在發(fā)現(xiàn)上。另一個(gè)例子是策略管理機(jī)制。當(dāng)在運(yùn)行時(shí)需要強(qiáng)制執(zhí)行策略時(shí),強(qiáng)制機(jī)制必須是有效的并且能實(shí)時(shí)運(yùn)行。當(dāng)SOC的某些操作很昂貴時(shí),這些操作應(yīng)該由硬件執(zhí)行或者由硬件支持以節(jié)省成本和時(shí)間。如果SOC系統(tǒng)被用在關(guān)鍵任務(wù)的實(shí)時(shí)系統(tǒng)中,這一點(diǎn)尤其重要。

SOI的另一個(gè)含義是一個(gè)硬件系統(tǒng)可以像軟件系統(tǒng)那樣按面向服務(wù)的方式組織起來(lái)。這類(lèi)SOI的一個(gè)例子是由Intel公司的SOI小組開(kāi)發(fā)的。主要思路是把計(jì)算部件、存儲(chǔ)部件以及網(wǎng)絡(luò)部件看做虛擬服務(wù)。本質(zhì)上,他們把這些硬部件當(dāng)作服務(wù),就像軟件服務(wù)一樣,他們用面向服務(wù)的方式控制這些硬件服務(wù)。類(lèi)比SaaS(軟件即服務(wù))的概念,英特爾稱(chēng)這種技術(shù)為PaaS(平臺(tái)即服務(wù))。通過(guò)這種方式,硬件系統(tǒng)可以像軟件系統(tǒng)一樣被組合以及再組合,并被當(dāng)作一個(gè)SOC系統(tǒng)來(lái)管理。這種技術(shù)的另一個(gè)意義是一旦硬件系統(tǒng)用SOI方式組織,硬件被看做可以再組合的服務(wù),這樣就允許在沒(méi)有停止軟件系統(tǒng)運(yùn)行的前提下升級(jí)更換硬件。這意味著,目前的容錯(cuò)計(jì)算技術(shù)可以無(wú)縫地集成到體系結(jié)構(gòu)設(shè)計(jì)中。這將是未來(lái)的研究課題。

Web2.0:Web2.0被看做是下一代Web或因特網(wǎng)。核心概念包括用戶作為主動(dòng)參與者而不是被動(dòng)的觀察者、同行協(xié)作、集體智慧、計(jì)算平臺(tái)從桌面移到Web、以用戶為中心的計(jì)算以及面向服務(wù)。一個(gè)眾所周知的例子就是維基百科——一個(gè)數(shù)百萬(wàn)用戶參與編寫(xiě)的在線百科全書(shū)。當(dāng)維基百科成為一種流行的學(xué)習(xí)方式時(shí),這種方法就變得極其成功。需要說(shuō)明的是維基公司只有七名員工,但是他們產(chǎn)生出數(shù)百萬(wàn)頁(yè)的知識(shí),幾乎所有知識(shí)都是由用戶貢獻(xiàn)的。這是一個(gè)介紹如何大規(guī)模協(xié)作創(chuàng)造具有重要價(jià)值事物的很好的例子。本書(shū)有許多地方引用了維基百科,這也印證了維基百科的資料確實(shí)有用。使用Web2.0開(kāi)展業(yè)務(wù)的方法被稱(chēng)作維基經(jīng)濟(jì)學(xué)(Wikinomics)(/wiki/Wikinomics)。許多組織正在試圖復(fù)制這種方法以創(chuàng)造巨大的價(jià)值。

語(yǔ)義Web:語(yǔ)義Web是由W3C提出來(lái)的,它提供了Web發(fā)展的未來(lái)遠(yuǎn)景。語(yǔ)義Web提供了一個(gè)通用框架,這個(gè)框架允許跨應(yīng)用、跨組織、跨社區(qū)的數(shù)據(jù)共享以及重用。這一思想讓信息有明確含義,使Web服務(wù)的自動(dòng)處理以及集成Web上的可用信息成為可能。因?yàn)閃eb2.0已被使用,所以語(yǔ)義Web也稱(chēng)為Web3.0(/wiki/Web_3)。

本體:本體這個(gè)詞來(lái)源于哲學(xué),它是存在論的系統(tǒng)解釋。在計(jì)算機(jī)科學(xué)中,本體是一個(gè)形式化說(shuō)明,這個(gè)形式化說(shuō)明定義了某一領(lǐng)域中的術(shù)語(yǔ)和對(duì)象以及它們之間的關(guān)系。主要關(guān)系之一是分類(lèi)。通常,一個(gè)本體系統(tǒng)定義了一組術(shù)語(yǔ)詞匯(詞)、它們的含義(語(yǔ)義)、它們之間的連接(例如,同義詞和反義詞)以及推理規(guī)則(推理),推理規(guī)則是實(shí)現(xiàn)語(yǔ)義Web項(xiàng)目的主要方式。

SODB(面向服務(wù)的數(shù)據(jù)庫(kù)):隨著SOC的流行,數(shù)據(jù)庫(kù)技術(shù)也變得很重要。SOC應(yīng)用使用基于XML的數(shù)據(jù)和消息,具有樹(shù)型結(jié)構(gòu),而傳統(tǒng)的數(shù)據(jù)庫(kù)是由包括行和列的表組成的。下面幾種方法解決數(shù)據(jù)結(jié)構(gòu)之間的不匹配問(wèn)題。

第一種方法是用傳統(tǒng)的數(shù)據(jù)庫(kù)和適配器把基于XML的數(shù)據(jù)及消息轉(zhuǎn)換為傳統(tǒng)數(shù)據(jù)庫(kù)中表中的數(shù)據(jù)或反之。這是目前常用的方法。

第二種方法是編碼XML格式數(shù)據(jù)并把XML文件存儲(chǔ)為數(shù)據(jù)庫(kù)。這一方法面臨的主要挑戰(zhàn)是設(shè)計(jì)和實(shí)現(xiàn)有效的基于XML的查詢(xún)語(yǔ)言,通過(guò)這種語(yǔ)言在XML數(shù)據(jù)庫(kù)中檢索數(shù)據(jù)以及存儲(chǔ)數(shù)據(jù)。W3C定義的XQuery語(yǔ)言就是為了滿足這一目標(biāo)而開(kāi)發(fā)的。

第三種方法是封裝現(xiàn)有的數(shù)據(jù)庫(kù)管理系統(tǒng),例如將關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)作為服務(wù),并開(kāi)發(fā)相關(guān)服務(wù),使SOA應(yīng)用能和數(shù)據(jù)庫(kù)系統(tǒng)進(jìn)行通信。這些相關(guān)的服務(wù)被稱(chēng)為信息服務(wù)。

本體也可以作為SOC應(yīng)用的數(shù)據(jù)庫(kù)。事實(shí)上,一個(gè)XML數(shù)據(jù)庫(kù)可以被看做是一個(gè)簡(jiǎn)化的本體系統(tǒng)。1.3.2面向服務(wù)的計(jì)算

在傳統(tǒng)的軟件開(kāi)發(fā)范型中,開(kāi)發(fā)人員獲取需求,將需求轉(zhuǎn)化為規(guī)格說(shuō)明,然后再把規(guī)格說(shuō)明轉(zhuǎn)換成滿足需求的可執(zhí)行程序。把規(guī)格說(shuō)明轉(zhuǎn)換為可操作的系統(tǒng)有幾種方法,包括瀑布模型、增量開(kāi)發(fā)、面向?qū)ο笥?jì)算(OOC)、基于構(gòu)件的計(jì)算。每一種方法都有它自己的工程過(guò)程和技術(shù)。

SOC是一種從OOC和基于構(gòu)件的計(jì)算演化而來(lái)的新范型,這種范型把開(kāi)發(fā)者分成獨(dú)立但相互協(xié)作的三方:應(yīng)用構(gòu)建者(也稱(chēng)作服務(wù)請(qǐng)求者)、服務(wù)中介(或發(fā)布者)以及服務(wù)開(kāi)發(fā)者(或提供者)。服務(wù)開(kāi)發(fā)者的職責(zé)是開(kāi)發(fā)具有標(biāo)準(zhǔn)接口的軟件服務(wù)。服務(wù)中介發(fā)布或市場(chǎng)化可用服務(wù)。應(yīng)用構(gòu)建者通過(guò)服務(wù)中介發(fā)現(xiàn)可用的服務(wù)并使用服務(wù)開(kāi)發(fā)新的應(yīng)用,通過(guò)發(fā)現(xiàn)和組合而不是傳統(tǒng)的設(shè)計(jì)和編碼來(lái)開(kāi)發(fā)應(yīng)用。換言之,應(yīng)用開(kāi)發(fā)是三方協(xié)作的結(jié)果。

服務(wù)與平臺(tái)無(wú)關(guān)并且松散耦合,因此在組合服務(wù)時(shí),可以使用不同提供者開(kāi)發(fā)的服務(wù)。為了確保服務(wù)之間的互操作性,已制定許多標(biāo)準(zhǔn)。然而,提供者之間的競(jìng)爭(zhēng)也非常激烈。對(duì)于一個(gè)給定的服務(wù)需求,例如,加密和添加到購(gòu)物車(chē)服務(wù),許多提供者可以實(shí)現(xiàn)及發(fā)布同樣的服務(wù),讓?xiě)?yīng)用構(gòu)建者在它們的應(yīng)用中使用,因此只有最好的服務(wù)才能生存。

在SOC中,單個(gè)服務(wù)是基于標(biāo)準(zhǔn)接口獨(dú)立開(kāi)發(fā)的。它們被提交給服務(wù)中介。在應(yīng)用運(yùn)行時(shí),應(yīng)用構(gòu)建者或服務(wù)請(qǐng)求者動(dòng)態(tài)地搜索、查找、綁定、測(cè)試、驗(yàn)證并執(zhí)行應(yīng)用中的服務(wù)。這種面向服務(wù)的體系結(jié)構(gòu)給應(yīng)用構(gòu)建者最大的靈活性去選擇最好的服務(wù)中介以及服務(wù)。

圖1.9是一個(gè)典型的面向服務(wù)的體系結(jié)構(gòu),圖中給出了它的組成部分、服務(wù)的注冊(cè)和請(qǐng)求過(guò)程,具體的部件和步驟解釋如下:

(1)服務(wù)提供者使用編程語(yǔ)言如C++、C#和Java以及面向服務(wù)的軟件開(kāi)發(fā)環(huán)境(例如,.Net、J2EE和Eclipse)開(kāi)發(fā)軟構(gòu)件以提供不同的服務(wù),這些軟構(gòu)件類(lèi)似于OOC中的類(lèi)和對(duì)象。

圖1.9一個(gè)典型的面向服務(wù)的體系結(jié)構(gòu)

(2)服務(wù)提供者在服務(wù)中介注冊(cè)服務(wù)并在注冊(cè)中心發(fā)布服務(wù)。

(3)目前,服務(wù)中介使用UDDI或ebXML標(biāo)準(zhǔn),這些標(biāo)準(zhǔn)為注冊(cè)和發(fā)布Web服務(wù)提供標(biāo)準(zhǔn)服務(wù)接口。對(duì)UDDI來(lái)說(shuō),注冊(cè)一個(gè)服務(wù)所需的信息包括:①白頁(yè)信息:服務(wù)提供者的名稱(chēng)、身份證明,例如DUNS號(hào)碼、聯(lián)系信息。②黃頁(yè)信息(商業(yè)類(lèi)):行業(yè)類(lèi)型、產(chǎn)品類(lèi)型、服務(wù)類(lèi)型、地理位置。③綠頁(yè)信息:關(guān)于其他Web服務(wù)如何訪問(wèn)(調(diào)用)服務(wù)的技術(shù)細(xì)節(jié),如API(應(yīng)用編程接口)。UDDI的白頁(yè)和黃頁(yè)類(lèi)似于電話的白頁(yè)和黃頁(yè)。UDDI標(biāo)準(zhǔn)只支持目錄,而ebXML同時(shí)支持目錄和庫(kù)。

(4)應(yīng)用構(gòu)建者通過(guò)互聯(lián)網(wǎng)查找中介服務(wù)注冊(cè)中心,尋找需要的服務(wù)以及如何使用服務(wù)所需的說(shuō)明。服務(wù)中介中的本體和分類(lèi)法可以幫助在請(qǐng)求和注冊(cè)的服務(wù)之間自動(dòng)匹配。

(5)一旦服務(wù)中介在注冊(cè)中心發(fā)現(xiàn)一個(gè)服務(wù),它就為應(yīng)用構(gòu)建者返回服務(wù)的詳細(xì)信息(服務(wù)提供者的綁定地址和調(diào)用該服務(wù)的參數(shù))。

(6)應(yīng)用構(gòu)建者使用可獲得的服務(wù)進(jìn)行組合以生成所需的應(yīng)用。這是使用服務(wù)模塊構(gòu)建大型應(yīng)用程序的更高層次的編程。在這種方式下,應(yīng)用構(gòu)建者不必知道低級(jí)編程。在應(yīng)用程序開(kāi)發(fā)平臺(tái)的幫助下,基于組合服務(wù)的應(yīng)用程序代碼可以自動(dòng)生成。當(dāng)前應(yīng)用開(kāi)發(fā)平臺(tái)包括.Net、J2EE、SOA套件、ActiveBPEL以及IBM的WebSphere(它支持高層次的利用已有服務(wù)組合應(yīng)用)。

(7)通過(guò)中介發(fā)現(xiàn)的服務(wù)代碼駐留在遠(yuǎn)程站點(diǎn),通常是在服務(wù)提供者站點(diǎn),或者如果中介提供服務(wù)庫(kù)則駐留在服務(wù)中介站點(diǎn)。SOAP調(diào)用可用于訪問(wèn)遠(yuǎn)程服務(wù)。

(8)服務(wù)提供者站點(diǎn)的服務(wù)直接與應(yīng)用通信并傳遞服務(wù)結(jié)果。1.3.3面向?qū)ο笥?jì)算與面向服務(wù)計(jì)算

雖然SOC是從面向?qū)ο笥?jì)算OOC發(fā)展來(lái)的而且它們看起來(lái)也相似,但是SOC與OOC在許多方面有所不同。在過(guò)去,人們誤以為OOC與過(guò)程計(jì)算沒(méi)有太大的不同,因?yàn)閭鹘y(tǒng)的過(guò)程語(yǔ)言已經(jīng)有數(shù)據(jù)抽象的概念,如結(jié)構(gòu),它類(lèi)似于類(lèi),以及過(guò)程,它類(lèi)似于方法。盡管OOC看起來(lái)與傳統(tǒng)的計(jì)算相似,但是,設(shè)計(jì)者用類(lèi)和對(duì)象思考從根本上改變了他們的思維方式。因此,在OOC中出現(xiàn)了許多新的概念和方法,例如設(shè)計(jì)模式、繼承、動(dòng)態(tài)綁定、多態(tài)、設(shè)計(jì)層次以及UML(統(tǒng)一建模語(yǔ)言)。

同樣,SOC與OOC不同,因?yàn)楝F(xiàn)在的設(shè)計(jì)師會(huì)用服務(wù)、工作流、服務(wù)發(fā)布、發(fā)現(xiàn)、利用可重用服務(wù)的應(yīng)用組合以及策略管理思考問(wèn)題。這些概念確實(shí)不同于OOC。

進(jìn)一步,服務(wù)可以在Web上或私人庫(kù)獲取,而且一個(gè)應(yīng)用能夠在運(yùn)行時(shí)搜索發(fā)現(xiàn)新的服務(wù)并綁定服務(wù)到應(yīng)用程序上。應(yīng)用構(gòu)建者不需要購(gòu)買(mǎi)安裝服務(wù)構(gòu)件(提供服務(wù)的軟件),相反,應(yīng)用可以遠(yuǎn)程訪問(wèn)服務(wù)構(gòu)件,并支付使用的服務(wù),軟件升級(jí)變得更加容易。一旦服務(wù)構(gòu)件升級(jí),新服務(wù)將立即提供給應(yīng)用程序,節(jié)省了客戶端計(jì)算機(jī)卸載并重新安裝軟件的大量成本。軟件將根據(jù)使用程度收費(fèi)。因此,用戶將不必支付不必要的軟件費(fèi)用。換句話說(shuō),SOC提供了軟件應(yīng)用的新模式:當(dāng)需要使用軟件時(shí),以SOC提供的支付模式取代以前的購(gòu)買(mǎi)—安裝—使用模式。

SOC也對(duì)系統(tǒng)結(jié)構(gòu)、可信性以及系統(tǒng)的可靠性、安全性、系統(tǒng)重新配置和重新組合等機(jī)制產(chǎn)生重大影響。這些機(jī)制與OOC有很大的不同。例如,用對(duì)象的動(dòng)態(tài)創(chuàng)建和動(dòng)態(tài)綁定取代OOC中的靜態(tài)組合,SOC允許實(shí)時(shí)動(dòng)態(tài)組合并在運(yùn)行時(shí)使用被發(fā)現(xiàn)的服務(wù)。由于新服務(wù)將在運(yùn)行時(shí)發(fā)現(xiàn),SOC也需要一個(gè)運(yùn)行時(shí)優(yōu)先級(jí)劃分及選擇機(jī)制,這種機(jī)制基于實(shí)時(shí)運(yùn)行的互操作性評(píng)價(jià)、測(cè)試和其他標(biāo)準(zhǔn)。在系統(tǒng)故障或需求變化的情況下,SOC還需要一個(gè)分布式重新配置和重新組合的策略。這種策略完全不同于OOC。

在OOC中,盡管某些形式的動(dòng)態(tài)綁定可以使用,但必須手動(dòng)開(kāi)發(fā)代碼。目前的OOC動(dòng)態(tài)綁定機(jī)制允許多態(tài),也就是說(shuō),屬于一個(gè)類(lèi)家族的方法在運(yùn)行時(shí)可以相互替代。然而,只要新的服務(wù)具有相同的WSDL規(guī)范,SOC就允許一個(gè)無(wú)關(guān)服務(wù)取代現(xiàn)有服務(wù)。

在SOC中,通過(guò)DCS(動(dòng)態(tài)組合服務(wù)),一個(gè)錯(cuò)誤的服務(wù)可以很容易地被另一個(gè)已準(zhǔn)備好的服務(wù)取代。DCS也是一個(gè)被監(jiān)控和可更換的服務(wù)。關(guān)鍵是每個(gè)服務(wù)獨(dú)立于其他服務(wù),因此,更換很自然,只有那些受影響的服務(wù)才被關(guān)閉。這種方法允許通過(guò)這種方法,處理重要任務(wù)的應(yīng)用程序能在最短的時(shí)間內(nèi)得以繼續(xù)執(zhí)行。

雖然SOC與OOC共享某些概念和技術(shù),如構(gòu)件設(shè)計(jì)和構(gòu)件重用,但SOC的創(chuàng)新很明顯。圖1.10對(duì)比了這兩種范型的主要技術(shù)和開(kāi)發(fā)方法。

圖1.10OOC和SOC的概念及技術(shù)

表1.1OOC與SOC的比較

1.3.4面向服務(wù)的企業(yè)

由英特爾的研究人員提出,并被OASIS作為標(biāo)準(zhǔn)的面向服務(wù)企業(yè)(SOE)是一個(gè)通過(guò)SOA系統(tǒng)實(shí)現(xiàn)的并能向外展示業(yè)務(wù)過(guò)程的一系列技術(shù)。SOE為管理采用SOA技術(shù)的業(yè)務(wù)過(guò)程提供了一個(gè)框架。其核心是,SOE是一個(gè)系統(tǒng)結(jié)構(gòu),支持核心企業(yè)計(jì)算。一個(gè)企業(yè)不是一個(gè)獨(dú)立的系統(tǒng),也不是一個(gè)包含所有系統(tǒng)的業(yè)務(wù)單元,確切地說(shuō),它包含了跨越多個(gè)公司的所有系統(tǒng)。例如,某州某部隊(duì)的計(jì)算機(jī)系統(tǒng)不是一個(gè)企業(yè)系統(tǒng),但用于控制和管理國(guó)防部主要功能的DoD(美國(guó)國(guó)防部)系統(tǒng),卻是一個(gè)企業(yè)系統(tǒng)。大型零售店(如沃爾瑪或Target)的供應(yīng)系統(tǒng)是企業(yè)系統(tǒng)的另外一個(gè)例子。因此,一個(gè)企業(yè)系統(tǒng)遠(yuǎn)遠(yuǎn)大于單個(gè)系統(tǒng),它可能包括多個(gè)國(guó)家或州的上百個(gè)系統(tǒng)。SOE就是一個(gè)支持企業(yè)級(jí)運(yùn)作的系統(tǒng)。

作為一個(gè)企業(yè)級(jí)系統(tǒng),雖然SOA的傳統(tǒng)元素,如查詢(xún)、發(fā)現(xiàn)、接口以及服務(wù)調(diào)用是參與系統(tǒng)共享的共同元素,但不是SOE的重點(diǎn)。這些元素說(shuō)明如何構(gòu)建服務(wù)以及如何使用服務(wù),但沒(méi)有說(shuō)明服務(wù)集如何支持企業(yè)的業(yè)務(wù)過(guò)程或一個(gè)原子服務(wù)在企業(yè)內(nèi)部如何起作用。

SOE面臨的主要挑戰(zhàn)是設(shè)計(jì)企業(yè)內(nèi)部的面向服務(wù)的業(yè)務(wù)過(guò)程,并使這一過(guò)程是端到端可見(jiàn)并可管理。隨著企業(yè)內(nèi)部提供的服務(wù)數(shù)量增加,定義并跟蹤執(zhí)行模式也變得越來(lái)越困難。SOE在SOC中還是一個(gè)很新的研究領(lǐng)域,而SOC本身在目前來(lái)說(shuō)也是一門(mén)新發(fā)展的學(xué)科。

圖1.11是一個(gè)層次化的SOE的例子,該SOE以組合電子商務(wù)應(yīng)用和Web服務(wù)作為基礎(chǔ)。SOE的最上層是可配置的業(yè)務(wù)邏輯。第二層是ebSOA(用于電子商務(wù)的SOA),一個(gè)服務(wù)中介標(biāo)準(zhǔn),包含注冊(cè)中心和存儲(chǔ)庫(kù)。接下來(lái)的一層是面向服務(wù)管理(SOM),它實(shí)現(xiàn)非功能特性,如容錯(cuò)計(jì)算、可靠性、安全性和策略。面向服務(wù)基礎(chǔ)設(shè)施SOI層提供虛擬服務(wù),用來(lái)表示那些可以由硬件組件提供的服務(wù)。例如,英特爾公司正在開(kāi)發(fā)這一層,把它的硬件資源,包括計(jì)算資源、存儲(chǔ)資源、網(wǎng)絡(luò)資源、設(shè)備、傳感器和執(zhí)行器映射到面向服務(wù)的體系結(jié)構(gòu)中。底層是執(zhí)行所需任務(wù)的硬件設(shè)備。

圖1.11SOE框架1.3.5面向服務(wù)的系統(tǒng)工程

面向服務(wù)的系統(tǒng)工程(SOSE)是系統(tǒng)工程、軟件工程和面向服務(wù)計(jì)算的一個(gè)組合。它建議在系統(tǒng)工程原則下開(kāi)發(fā)面向服務(wù)的軟件和硬件,這些原則包括需求、建模、規(guī)格說(shuō)明、驗(yàn)證(verification)、設(shè)計(jì)、實(shí)現(xiàn)、確認(rèn)(validation)、運(yùn)行以及維護(hù)。目前關(guān)于SOC的研究和實(shí)踐主要集中在SOC軟件的功能和協(xié)議上。當(dāng)SOC用于處理重要任務(wù)的應(yīng)用程序,并且整個(gè)計(jì)算和通信基礎(chǔ)設(shè)施也使用SOC時(shí),這時(shí)就必須解決有關(guān)SOSE的問(wèn)題。

表1.2列出了每個(gè)開(kāi)發(fā)階段典型的SOSE技術(shù)。許多技術(shù)是相互協(xié)作的。例如,測(cè)試用例可能會(huì)由三方協(xié)作設(shè)計(jì)。服務(wù)提供者為服務(wù)中介和服務(wù)請(qǐng)求者提供單元測(cè)試用例樣品以供復(fù)用。服務(wù)中介通過(guò)基于規(guī)格說(shuō)明的測(cè)試用例生成工具提供它自己的測(cè)試用例,服務(wù)中介甚至可以提供這個(gè)工具供所有方使用。應(yīng)用構(gòu)建者通過(guò)服務(wù)中介檢查測(cè)試用例樣品,使用服務(wù)中介提供的測(cè)試用例生成工具,甚至提供自己的應(yīng)用程序的測(cè)試用例。

表1.2SOSE技術(shù)

雖然基本的工程原則相同,但在SOC范型中應(yīng)用這些原則的方式卻不同。具體來(lái)說(shuō),大多數(shù)工程任務(wù)將在運(yùn)行時(shí)以協(xié)作的方式完成。因?yàn)橄到y(tǒng)可以在運(yùn)行時(shí)對(duì)已有的服務(wù)進(jìn)行組合,許多工程任務(wù)是在信息不完整以及重要信息在應(yīng)用前才取得的情況下執(zhí)行。這樣,在某種程度上,SOSE與傳統(tǒng)工程有很大不同。對(duì)于傳統(tǒng)工程,工程師有關(guān)于系統(tǒng)需求的完整信息而且在系統(tǒng)設(shè)計(jì)啟動(dòng)之前已進(jìn)行了深入分析。

SOC是一種新的計(jì)算范型,因此需要發(fā)展新的工程技術(shù)使SOC軟件和硬件可信、可靠、外部安全、內(nèi)部安全。SOSE技術(shù)不同于傳統(tǒng)系統(tǒng)工程技術(shù),盡管基本工程原理仍然保持不變,但由于運(yùn)行時(shí)組合以及再組合等動(dòng)態(tài)特性,新應(yīng)用可能無(wú)法由傳統(tǒng)系統(tǒng)工程評(píng)估,因?yàn)樵S多構(gòu)件可以動(dòng)態(tài)發(fā)現(xiàn)和組合,而它們的源代碼無(wú)法獲得,因此,需要應(yīng)用動(dòng)態(tài)運(yùn)行時(shí)系統(tǒng)工程技術(shù)。

1.4.1傳統(tǒng)的軟件開(kāi)發(fā)過(guò)程

軟件開(kāi)發(fā)過(guò)程定義了開(kāi)發(fā)步驟以生產(chǎn)高質(zhì)量的軟件。已經(jīng)提出并使用的過(guò)程包括瀑布、增量、面向?qū)ο笠约盎跇?gòu)件的開(kāi)發(fā)過(guò)程。面向?qū)ο蠛突跇?gòu)件的軟件開(kāi)發(fā)過(guò)程是類(lèi)似的,圖1.12是一個(gè)可能的過(guò)程。兩者的開(kāi)發(fā)過(guò)程都需要把被開(kāi)發(fā)的系統(tǒng)分解成構(gòu)件,首先開(kāi)發(fā)構(gòu)件的代碼,然后使用構(gòu)件建立應(yīng)用。1.4面向服務(wù)的開(kāi)發(fā)與應(yīng)用和基于構(gòu)件的方法相比,面向?qū)ο蟮拈_(kāi)發(fā)過(guò)程更具體,它定義了一組具體特征如封裝、繼承、多態(tài)和動(dòng)態(tài)綁定。一般來(lái)講,面向?qū)ο蟮拈_(kāi)發(fā)肯定是基于構(gòu)件的,但基于構(gòu)件的開(kāi)發(fā)不一定是面向?qū)ο蟮摹?/p>

圖1.12面向?qū)ο蠛突跇?gòu)件的軟件開(kāi)發(fā)過(guò)程1.4.2面向服務(wù)的軟件開(kāi)發(fā)

傳統(tǒng)的計(jì)算范型主要影響軟件開(kāi)發(fā)過(guò)程中的設(shè)計(jì)(算法)以及實(shí)現(xiàn)(編碼)階段。SOC則影響整個(gè)軟件開(kāi)發(fā)過(guò)程以及軟件生存周期。為了更好地理解這種影響,我們首先看看SOC軟件的特點(diǎn)。

(1)自包含和自描述:服務(wù)通過(guò)服務(wù)中介發(fā)布,被發(fā)布的服務(wù)包含足夠的信息,可令其他服務(wù)在運(yùn)行時(shí)發(fā)現(xiàn)、匹配、綁定并遠(yuǎn)程調(diào)用它。

(2)再配置和再組合:新發(fā)現(xiàn)的服務(wù)以?xún)煞N不同的方式——再配置和再組合組合到已有服務(wù)中。再配置:用滿足同樣規(guī)格說(shuō)明的新服務(wù)替換現(xiàn)有的服務(wù),當(dāng)服務(wù)出現(xiàn)故障或不可用時(shí)執(zhí)行再配置。再組合:從理論上講,在SOC系統(tǒng)中,用戶可以在運(yùn)行時(shí)改變服務(wù)的規(guī)格說(shuō)明,結(jié)果是再組合,在此期間,新的服務(wù)可以被包含進(jìn)組合服務(wù)而現(xiàn)有服務(wù)可被取消。

(3)動(dòng)態(tài)驗(yàn)證:動(dòng)態(tài)修改的規(guī)格說(shuō)明必須動(dòng)態(tài)校驗(yàn),以保證規(guī)格說(shuō)明所要求的屬性。

(4)動(dòng)態(tài)確認(rèn):動(dòng)態(tài)再配置或再組合的服務(wù)必須動(dòng)態(tài)確認(rèn)(測(cè)試),以確保它滿足規(guī)格說(shuō)明。

(5)動(dòng)態(tài)評(píng)價(jià):動(dòng)態(tài)再配置和再組合可能導(dǎo)致服務(wù)結(jié)構(gòu)變化,屬性(可靠性、外部起安全性、內(nèi)部安全性和性能)必須動(dòng)態(tài)評(píng)價(jià)。

在傳統(tǒng)的軟件開(kāi)發(fā)過(guò)程中,整個(gè)過(guò)程往往由開(kāi)發(fā)者所在組織管理。新的面向服務(wù)軟件的開(kāi)發(fā)分為三個(gè)平行的過(guò)程:服務(wù)開(kāi)發(fā),服務(wù)發(fā)布到服務(wù)中介,應(yīng)用構(gòu)建(組合)。

服務(wù)有兩類(lèi):原子服務(wù)和組合服務(wù)。原子服務(wù)是有標(biāo)準(zhǔn)接口的對(duì)象。因此,原子服務(wù)的開(kāi)發(fā)與面向?qū)ο筌浖_(kāi)發(fā)沒(méi)有太大的不同。主要的區(qū)別是,對(duì)象通常需要被集成到同一種編程語(yǔ)言編寫(xiě)的應(yīng)用中,而原子服務(wù)可以駐留在遠(yuǎn)程計(jì)算機(jī),可以被不同編程語(yǔ)言編寫(xiě)的應(yīng)用調(diào)用。因此,原子服務(wù)接口的設(shè)計(jì)必須遵循預(yù)先定義的標(biāo)準(zhǔn)。該接口必須包含服務(wù)的功能描述以及調(diào)用服務(wù)的技術(shù)細(xì)節(jié),從而使服務(wù)可以被其他程序發(fā)現(xiàn)并正確調(diào)用。WSDL(Web服務(wù)描述語(yǔ)言)是一種主要的描述服務(wù)接口的語(yǔ)言,SOAP(簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議)用于傳輸服務(wù)之間的消息。原子服務(wù)既可以從頭開(kāi)發(fā)也可以把現(xiàn)有的軟構(gòu)件包裝成服務(wù)。

組合服務(wù)的開(kāi)發(fā)與傳統(tǒng)的軟件開(kāi)發(fā)過(guò)程不同。雖然傳統(tǒng)的軟件開(kāi)發(fā)允許用較小的構(gòu)件構(gòu)造較大的構(gòu)件,但這種構(gòu)造是靜態(tài)的和人工的。組合服務(wù)的構(gòu)造也可以是靜態(tài)的和人工的,但是,它也可以是動(dòng)態(tài)的和自動(dòng)的。也就是說(shuō),當(dāng)需要的服務(wù)不存在而需要從現(xiàn)有的服務(wù)組合時(shí),可以在運(yùn)行時(shí)組合。現(xiàn)有的服務(wù)包括通過(guò)服務(wù)中介發(fā)布的服務(wù)。一旦服務(wù)被組合,組合服務(wù)可作為新服務(wù)發(fā)布,供將來(lái)的服務(wù)或應(yīng)用組合。SOC應(yīng)用和組合服務(wù)幾乎相同。前者有一個(gè)供人類(lèi)用戶訪問(wèn)的GUI,而后者則有供計(jì)算機(jī)程序(應(yīng)用或服務(wù))訪問(wèn)的編程接口。

圖1.13說(shuō)明了OOC和SOC的開(kāi)發(fā)過(guò)程。通常,一個(gè)OOC應(yīng)用由同一個(gè)團(tuán)隊(duì)使用相同的語(yǔ)言開(kāi)發(fā)(如圖左部分所示),而一個(gè)SOC應(yīng)用是通過(guò)已開(kāi)發(fā)好的服務(wù)創(chuàng)建的(如圖右部分所示),這些開(kāi)發(fā)好的服務(wù)由獨(dú)立的服務(wù)提供者開(kāi)發(fā)。應(yīng)用構(gòu)建者通過(guò)服務(wù)目錄和服務(wù)庫(kù),查詢(xún)所需服務(wù)。如果服務(wù)無(wú)法找到,應(yīng)用者可以發(fā)布需求或自己開(kāi)發(fā)。服務(wù)提供者則根據(jù)自己的需求分析或查詢(xún)目錄中發(fā)布的需求來(lái)開(kāi)發(fā)服務(wù)。

圖1.13面向?qū)ο笈c面向服務(wù)的軟件開(kāi)發(fā)過(guò)程

與傳統(tǒng)的軟件開(kāi)發(fā)一樣,SOC軟件開(kāi)發(fā)過(guò)程開(kāi)始于需求分析和定義。圖1.14是一個(gè)典型的需求開(kāi)發(fā)的步驟。在需求開(kāi)發(fā)結(jié)束時(shí),用正規(guī)的模型以及規(guī)格說(shuō)明語(yǔ)言描述待開(kāi)發(fā)的系統(tǒng)。圖1.14需求定義過(guò)程

應(yīng)用構(gòu)建過(guò)程的其余部分和傳統(tǒng)的軟件開(kāi)發(fā)很不一樣。應(yīng)用構(gòu)建者用服務(wù)中介發(fā)布的現(xiàn)有服務(wù)建立應(yīng)用。在這一過(guò)程中,應(yīng)用構(gòu)建者專(zhuān)注于業(yè)務(wù)邏輯,而不是編程任務(wù)。如果現(xiàn)有服務(wù)無(wú)法滿足應(yīng)用的功能要求,應(yīng)用構(gòu)建者可建立一個(gè)組合服務(wù)來(lái)滿足要求。圖1.15從應(yīng)用構(gòu)建者的角度說(shuō)明了軟件組合過(guò)程的步驟。

在圖1.15中,我們把數(shù)據(jù)和本體說(shuō)明從功能說(shuō)明中分離出來(lái)。在SOC中,為方便動(dòng)態(tài)組合和再組合,我們建議,把數(shù)據(jù)如策略、規(guī)則、配置參數(shù)從功能說(shuō)明中分離出來(lái)。把這些數(shù)據(jù)存儲(chǔ)在本體或配置文件中,允許對(duì)它們進(jìn)行修改,并在不停止程序運(yùn)行的情況下獲得相應(yīng)的運(yùn)行效果。基于策略的計(jì)算是這種分離的一個(gè)很好的例子。

圖1.15面向服務(wù)的應(yīng)用開(kāi)發(fā)過(guò)程

使用傳統(tǒng)的驗(yàn)證技術(shù),如模型檢測(cè)技術(shù)驗(yàn)證功能說(shuō)明以及數(shù)據(jù)/本體說(shuō)明。從規(guī)格說(shuō)明可以生成測(cè)試用例,這個(gè)規(guī)格說(shuō)明可以是基于功能的,也可以是基于流程的。

一旦工作流經(jīng)過(guò)校驗(yàn),就需要發(fā)現(xiàn)遠(yuǎn)程服務(wù),如果沒(méi)有發(fā)現(xiàn)服務(wù),則需要單獨(dú)開(kāi)發(fā)。當(dāng)所有的服務(wù)綁定到工作流后,工作流在給定的環(huán)境下例如仿真環(huán)境就可執(zhí)行。應(yīng)用首先在仿真環(huán)境中測(cè)試,然后部署到真實(shí)環(huán)境中,在真實(shí)環(huán)境中收集執(zhí)行數(shù)據(jù)用于各種分析。如果語(yǔ)義信息,例如策略,存儲(chǔ)在本體中,可通過(guò)本體或策略確認(rèn)執(zhí)行。在確認(rèn)和評(píng)價(jià)的基礎(chǔ)上,通過(guò)運(yùn)行時(shí)綁定不同服務(wù),系統(tǒng)可以被再配置。需求也可以被修改。在這種情況下,需要停止系統(tǒng),手動(dòng)修改模型和規(guī)格說(shuō)明。1.4.3面向服務(wù)計(jì)算的應(yīng)用

作為一種通用的計(jì)算范型,OOC能應(yīng)用的領(lǐng)域,SOC也可以應(yīng)用。特別是,OOC可被視為SOC的一部分。每一個(gè)OOC應(yīng)用在理論上可以看做是一個(gè)SOC應(yīng)用。但是,在許多情況下,SOC具有獨(dú)一無(wú)二的優(yōu)勢(shì)。

電子商務(wù)一直是SOC的據(jù)點(diǎn),在電子商務(wù)中有許多服務(wù)都是動(dòng)態(tài)的,而且可以通過(guò)因特網(wǎng)遠(yuǎn)程調(diào)用。例如,旅行社可以遠(yuǎn)程調(diào)用航空公司、酒店和汽車(chē)租賃公司提供的服務(wù),但把服務(wù)代碼導(dǎo)入到旅行社的本地服務(wù)是不可行的。同樣,建立一個(gè)網(wǎng)上書(shū)店需要訪問(wèn)多個(gè)伙伴的服務(wù),包括銀行、出版商和運(yùn)貨商。其他新興的應(yīng)用領(lǐng)域包括銀行、醫(yī)療保健、電子政務(wù),在這些領(lǐng)域,來(lái)自不同部門(mén)的服務(wù)松耦合,給客戶提供協(xié)作服務(wù)。

機(jī)器人和嵌入式計(jì)算是傳統(tǒng)的應(yīng)用領(lǐng)域,在這些領(lǐng)域,控制程序是設(shè)備的一個(gè)集成部分。把SOC引入這些領(lǐng)域之后,因?yàn)椴糠殖绦虮粚?shí)現(xiàn)為遠(yuǎn)程服務(wù),而不是把整個(gè)程序預(yù)裝到系統(tǒng)中,所以機(jī)器人或嵌入式系統(tǒng)在完成任務(wù)時(shí)變得更為靈活。在不中斷執(zhí)行的情況下修改遠(yuǎn)程服務(wù),從而改變應(yīng)用的行為和執(zhí)行過(guò)程。這一特征特別有吸引力,因?yàn)闄C(jī)器人或嵌入式系統(tǒng)可能位于物理上無(wú)法到達(dá)的位置。

今天,許多制造過(guò)程都由計(jì)算機(jī)控制,在這些過(guò)程中引入SOC軟件使過(guò)程修改變得更容易、更有效。

圖1.16是亞利桑那州立大學(xué)SOC研究和應(yīng)用項(xiàng)目的一部分。SOC軟件和硬件的開(kāi)發(fā)是研究和應(yīng)用的核心。開(kāi)發(fā)的概念、原理、模型、技術(shù)、方法、工具和框架支持多個(gè)領(lǐng)域的應(yīng)用,包括電子商務(wù)、工業(yè)過(guò)程控制、指揮和控制、嵌入式系統(tǒng)、機(jī)器人、生物/醫(yī)療信息系統(tǒng)和基于本體的教育系統(tǒng)。大部分的研究和實(shí)踐已融合到云計(jì)算環(huán)境。

圖1.16亞利桑那州立大學(xué)的SOC研究和應(yīng)用1.4.4Web應(yīng)用組合

傳統(tǒng)的桌面應(yīng)用有一個(gè)唯一的切入點(diǎn)——main方法,它被編譯成一個(gè)獨(dú)立的可執(zhí)行文件。雖然一個(gè)應(yīng)用可以包含許多可執(zhí)行文件和數(shù)據(jù)文件,但只有一個(gè)項(xiàng)目文件,該項(xiàng)目文件把執(zhí)行文件和數(shù)據(jù)文件組織成一個(gè)定義良好的應(yīng)用領(lǐng)域。

一個(gè)Web應(yīng)用包含一系列的Web頁(yè)面,其中每個(gè)都與可執(zhí)行文件和數(shù)據(jù)文件相關(guān)。即使設(shè)計(jì)師從概念上設(shè)計(jì)了一個(gè)“進(jìn)入”頁(yè)面,我們依然可以從不同的頁(yè)面中進(jìn)入一個(gè)網(wǎng)站應(yīng)用。Web應(yīng)用通常按照事件驅(qū)動(dòng)的計(jì)算模型來(lái)處理用戶交互和數(shù)據(jù)通信。但是,如果一個(gè)Web應(yīng)用是由Web環(huán)境下獨(dú)立的任務(wù)以及公有資源組成的應(yīng)用領(lǐng)域,則這個(gè)Web應(yīng)用仍被認(rèn)為是桌面應(yīng)用。當(dāng)把遠(yuǎn)程Web服務(wù)和數(shù)據(jù)作為功能和數(shù)據(jù)單元,Web應(yīng)用領(lǐng)域就是分布式的。Web應(yīng)用中的每一個(gè)頁(yè)面是一個(gè)活動(dòng)的對(duì)象。頁(yè)面之間以松散耦合的方式互相通信,支持共享內(nèi)存、同步以及異步調(diào)用。

面向服務(wù)計(jì)算以及相關(guān)的技術(shù),如Web2.0、Web3.0、Mashup和云計(jì)算的發(fā)展,使Web應(yīng)用迅速擴(kuò)展。幾乎每一個(gè)桌面應(yīng)用都可以找到對(duì)應(yīng)的Web版本,或者將會(huì)找到對(duì)應(yīng)的Web版本。云計(jì)算,一種可以隨時(shí)隨地訪問(wèn)程序和數(shù)據(jù)的技術(shù),是計(jì)算從桌面應(yīng)用到基于Web應(yīng)用的最新驅(qū)動(dòng)力。

1.Mashup

在Web開(kāi)發(fā)中,Mashup是把兩個(gè)或多個(gè)資源中的數(shù)據(jù)或功能集成到一個(gè)單一的應(yīng)用中的一種Web技術(shù)[Wikipedia]。Mashup作為一種面向服務(wù)的組合方法,能夠把多種類(lèi)型的資源,例如Web服務(wù)、服務(wù)、應(yīng)用編程接口以及數(shù)據(jù)源組合成應(yīng)用。例如,可以通過(guò)組合谷歌地圖以及物業(yè)價(jià)格列表產(chǎn)生一個(gè)像/這樣的房地產(chǎn)網(wǎng)站。/pipes/的Yahoo!Pipes是眾多使用Mashup工具應(yīng)用的一個(gè)例子。

Mashup的一個(gè)簡(jiǎn)單版本是Widget,它把一個(gè)Web應(yīng)用的數(shù)據(jù)直接導(dǎo)入到另一個(gè)而不用編程。2.云計(jì)算

云計(jì)算具有瘦客戶機(jī)和胖服務(wù)器的體系結(jié)構(gòu)。客戶端可以瘦到只運(yùn)行一個(gè)Web瀏覽器。服務(wù)器通常是一個(gè)虛擬服務(wù)器,稱(chēng)為云,是由不同組織擁有的多個(gè)物理服務(wù)器組成的。計(jì)算由云端的服務(wù)來(lái)完成,數(shù)據(jù)也存儲(chǔ)在云端的文件系統(tǒng)或數(shù)據(jù)庫(kù)中。云計(jì)算強(qiáng)調(diào)以下關(guān)鍵概念:

(1)軟件即服務(wù)(SaaS):執(zhí)行各種任務(wù)的軟件不在客戶端安裝,它們作為服務(wù)安裝在云端。SaaS強(qiáng)調(diào)不僅把Web服務(wù)應(yīng)用的構(gòu)件,例如Web服務(wù),而且也把整個(gè)Web應(yīng)用都視為服務(wù)。

(2)平臺(tái)即服務(wù)(PaaS):軟件開(kāi)發(fā)環(huán)境,例如基于Java進(jìn)行軟件開(kāi)發(fā)的Eclipse以及基于C#進(jìn)行軟件開(kāi)發(fā)的VisualStudio都不安裝在客戶機(jī)上。它們安裝在云端供開(kāi)發(fā)者遠(yuǎn)程使用。

(3)基礎(chǔ)設(shè)施即服務(wù)(IaaS):支持計(jì)算和信息管理的基礎(chǔ)設(shè)施不在客戶端,這些基礎(chǔ)設(shè)施包括計(jì)算資源、存儲(chǔ)、通信帶寬以及數(shù)據(jù)庫(kù)。

對(duì)于所有的云資源,成本模型是隨用隨付的,無(wú)需購(gòu)買(mǎi)或擁有基礎(chǔ)設(shè)施、硬件、軟件、編程環(huán)境以及數(shù)據(jù)。亞馬遜的彈性計(jì)算云(AmazonEC2)、谷歌的App引擎和微軟的Azure是目前可用的主要云計(jì)算環(huán)境。

云計(jì)算擴(kuò)展到包括如下眾多功能:例如設(shè)備即服務(wù)(DaaS)、機(jī)器人即服務(wù)(RaaS)、測(cè)試即服務(wù)(TaaS)和X即服務(wù)(XaaS),其中X可以代表不同資源。

雖然SOC/SOA在過(guò)去的十年間一直在發(fā)展,并且已被所有主要的計(jì)算機(jī)以及軟件公司所采納,如BEA、HP、IBM、Microsoft、Intel、Oracle、SunMicrosystems和SAP軟件,也包括一些政府機(jī)構(gòu)例如美國(guó)國(guó)防部、英國(guó)醫(yī)療保健系統(tǒng)、加拿大各省政府以及亞利桑那州。但許多人認(rèn)為,SOA是一個(gè)新的領(lǐng)域,還有許多工作要做。特別需要指出的是,SOA的批評(píng)者指出了幾個(gè)待改進(jìn)的問(wèn)題。例如,SOA缺乏一個(gè)統(tǒng)一的大家都同意的定義。有些人認(rèn)為,SOA沒(méi)有一個(gè)良好的定義,因此很難標(biāo)識(shí)SOA的特征。1.5討論

維基百科對(duì)SOA做了如下定義:面向服務(wù)的體系結(jié)構(gòu)SOA是一種體系結(jié)構(gòu)設(shè)計(jì)模式,定義了生產(chǎn)者與消費(fèi)者之間的松散耦合關(guān)系。雖然與軟件、編程或技術(shù)沒(méi)有直接關(guān)系,但它往往和分布式計(jì)算和模塊化編程的演化混淆。

這個(gè)定義并不是一個(gè)好的SOA定義,因?yàn)檫@種描述也符合面向?qū)ο蟮挠?jì)算。一個(gè)面向?qū)ο蟪绦蛞部梢允撬缮Ⅰ詈系摹J聦?shí)上,松散耦合是面向?qū)ο筌浖闹饕卣髦?。進(jìn)一步講,面向?qū)ο笥?jì)算也是分布式計(jì)算,因此它也是常見(jiàn)的模塊化編程技術(shù)之一。一些關(guān)鍵的SOA屬性,如實(shí)現(xiàn)與定義分離,也被用于面向?qū)ο筌浖?因?yàn)轭?lèi)接口的定義與實(shí)現(xiàn)也是分離的。事實(shí)上,在計(jì)算歷史上,定義與實(shí)現(xiàn)分離的概念,包括數(shù)據(jù)抽象和過(guò)程抽象都已經(jīng)存在三十多年。因此,這個(gè)概念不是新的也不是SOA僅有的。難怪在維基關(guān)于SOA定義的同一頁(yè)上,所有參與編輯的作者都一致聲明:除了字面上的翻譯,沒(méi)有一個(gè)統(tǒng)一的大家都同意的SOA定義。它是以面向服務(wù)作為基本設(shè)計(jì)原則的體系結(jié)構(gòu)。在SOA環(huán)境中,訪問(wèn)一個(gè)服務(wù)時(shí),不用了解它底層平臺(tái)的實(shí)現(xiàn)。這些概念可以用到商業(yè)、軟件以及其他類(lèi)型的生產(chǎn)/消費(fèi)系統(tǒng)中。

換言之,即使維基是由活躍于世界各地的SOA領(lǐng)域的作者編輯和貢獻(xiàn)的,但這些作者也不同意SOA的定義。

還有一些SOA的定義基于通用的SOA協(xié)議。例如,如果一個(gè)軟件程序使用XML、WSDL、OWL、BPEL以及其他協(xié)議或標(biāo)準(zhǔn),那么就是一個(gè)SOA軟件。這個(gè)定義仍然不夠好,因?yàn)镾OA協(xié)議正在不斷被更新和修訂,有可能這些協(xié)議的新版本和以前的版本不同。SOA的發(fā)展歷史證明,幾個(gè)SOA協(xié)議已被一個(gè)全新的協(xié)議取代,具體來(lái)說(shuō),BPEL取代了

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論