圖1-1 SOA計(jì)算環(huán)境的組成要素


圖1-2 SOA計(jì)算環(huán)境的標(biāo)準(zhǔn)協(xié)議棧

面向服務(wù)的計(jì)算環(huán)境,為IBM所定義的隨需應(yīng)變計(jì)算環(huán)境奠定了現(xiàn)實(shí)基礎(chǔ)。隨需應(yīng)變計(jì)算環(huán)境應(yīng)具備以下特點(diǎn),如圖1-3所示。


圖1-3 隨需應(yīng)變的計(jì)算環(huán)境應(yīng)該具備的特點(diǎn) 

(1)整合:將人、過程、應(yīng)用和數(shù)據(jù)全面整合起來。

(2)虛擬化:將分布、異構(gòu)的物理資源(服務(wù)器、存儲(chǔ)設(shè)備等)整合起來,呈現(xiàn)為統(tǒng)一的邏輯對象,以安全和可管理的方式供使用。

(3)自主計(jì)算:如同生物體一樣,系統(tǒng)具備一些高級生物系統(tǒng)的能力,包括自我診斷和修復(fù)問題,自動(dòng)配置和調(diào)整以適應(yīng)環(huán)境的變化,自動(dòng)優(yōu)化資源的使用效率、增強(qiáng)工作負(fù)荷的處理的能力,自我保護(hù)數(shù)據(jù)和信息的安全。

(4)開放標(biāo)準(zhǔn):整個(gè)環(huán)境建立在開放的標(biāo)準(zhǔn)之上,保證系統(tǒng)的交互性。

1.2.4面向服務(wù)計(jì)算環(huán)境的現(xiàn)狀

不同的服務(wù)計(jì)算環(huán)境,采用不同的技術(shù)和產(chǎn)品,這里主要結(jié)合IBM的產(chǎn)品和技術(shù)來介紹在J2EE平臺(tái)上實(shí)現(xiàn)的服務(wù)計(jì)算環(huán)境。

主機(jī)通過增加對互聯(lián)網(wǎng)技術(shù)和標(biāo)準(zhǔn)的支持,來創(chuàng)建主機(jī)上的面向服務(wù)計(jì)算環(huán)境。比如IBM的CICS 3.1,提供了SOAP和Web服務(wù)的支持,可以將主機(jī)上的應(yīng)用以Web服務(wù)的方式提供出來,供消費(fèi)者使用。

多年來,IT界的主要技術(shù)提供者,一直攜手努力定義和推動(dòng)Web服務(wù)的相關(guān)標(biāo)準(zhǔn),并且在主要的幾個(gè)計(jì)算平臺(tái)上實(shí)現(xiàn)了高度兼容,包括.NET,J2EE和開源平臺(tái)(如LAMPLinux,Apache,mySQL,PHP/Perl/Python)。

IBM以J2EE為基礎(chǔ),提供了全面的、強(qiáng)大的服務(wù)計(jì)算環(huán)境,如圖1-4所示。


圖1-4 IBM提供的服務(wù)計(jì)算環(huán)境

在這個(gè)計(jì)算環(huán)境中,它是服務(wù)的世界。其中,Access Services提供訪問已有應(yīng)用或遺留系統(tǒng)的能力,將已有系統(tǒng)中的功能和信息轉(zhuǎn)化為服務(wù),IBM提供了訪問不同系統(tǒng)的適配器和相應(yīng)的框架來幫助轉(zhuǎn)化。 Business App Services指那些通過新的計(jì)算平臺(tái)J2EE(如IBM的WebSphere Application Server)來實(shí)現(xiàn)的新應(yīng)用,它們所實(shí)現(xiàn)的功能和信息也都轉(zhuǎn)化為服務(wù)提供出來。Partner Service指那些來自合作伙伴的服務(wù),WebSphere Partner Gateway提供企業(yè)邊界處不同安全等差異的轉(zhuǎn)換。Information Service是那些跟信息(而不是活動(dòng))有關(guān)系的服務(wù),比如將多個(gè)系統(tǒng)中異構(gòu)的數(shù)據(jù),聚合、轉(zhuǎn)換為業(yè)務(wù)需要的統(tǒng)一整齊的業(yè)務(wù)數(shù)據(jù)對象來訪問。 Process Service是指把多個(gè)服務(wù)聚合成為一個(gè)服務(wù)流程對應(yīng)業(yè)務(wù)過程的服務(wù),這種復(fù)合服務(wù)通常是長時(shí)間運(yùn)行的過程。Interaction Service是把人的活動(dòng),通過人機(jī)交互以服務(wù)的方式出現(xiàn)在整個(gè)業(yè)務(wù)過程中,作為Process Service中的一部分。

在面向服務(wù)計(jì)算環(huán)境中,企業(yè)服務(wù)總線處于非常重要的位置,它提供服務(wù)的中介,解耦服務(wù)請求者和服務(wù)提供者,是服務(wù)計(jì)算環(huán)境中的核心。ESB是過去消息中間件的發(fā)展,采用了"總線"這樣一種模式來管理和簡化應(yīng)用之間的集成拓?fù)浣Y(jié)構(gòu),以廣為接受的開放標(biāo)準(zhǔn)為基礎(chǔ)來支持應(yīng)用之間在消息、事件和服務(wù)級別上的動(dòng)態(tài)互聯(lián)互通。

ESB的基本特征和能力包括:描述服務(wù)的元數(shù)據(jù)和服務(wù)注冊管理;在服務(wù)請求者和提供者之間傳遞數(shù)據(jù)及對這些數(shù)據(jù)進(jìn)行轉(zhuǎn)換的能力,并支持由實(shí)踐中總結(jié)出來的一些模式如同步模式,異步模式等;發(fā)現(xiàn)、路由、匹配和選擇的能力,以支持服務(wù)之間的動(dòng)態(tài)交互,解耦服務(wù)請求者和服務(wù)提供者。高級一些的能力,包括對安全的支持、服務(wù)質(zhì)量保證、可管理性和負(fù)載平衡等。

ESB所提供的基于標(biāo)準(zhǔn)的連接服務(wù),將應(yīng)用中實(shí)現(xiàn)的功能或者數(shù)據(jù)資源,轉(zhuǎn)化為服務(wù)請求者能以標(biāo)準(zhǔn)的方式來訪問的服務(wù);當(dāng)請求者來請求一個(gè)服務(wù)時(shí),ESB 中這種中介轉(zhuǎn)化過程可能簡單到什么也沒有,也可能要很復(fù)雜的中介服務(wù)支持,包括動(dòng)態(tài)地查找、選擇一個(gè)服務(wù),消息的傳遞、路由和轉(zhuǎn)換、協(xié)議的轉(zhuǎn)換。這種中介過程,是ESB借助于服務(wù)注冊管理及問題域相關(guān)的知識(shí)(如業(yè)務(wù)方面的一些規(guī)則等)自動(dòng)進(jìn)行的,不需要服務(wù)請求者和提供者介入,從而實(shí)現(xiàn)了解耦服務(wù)請求者和提供者的技術(shù)基礎(chǔ)。這使得服務(wù)請求者不需要關(guān)心服務(wù)提供者的位置和具體實(shí)現(xiàn)技術(shù),雙方在保持接口不變的情況下,各自可以獨(dú)立地演變。

所以,ESB采用總線結(jié)構(gòu)模式簡化了應(yīng)用之間的集成拓?fù)?,通過源自實(shí)踐的模式,提供了基于標(biāo)準(zhǔn)的通用連接服務(wù),使得服務(wù)請求者和服務(wù)提供者之間可以以松散耦合、動(dòng)態(tài)的方式交互,從而在不同層次上使得SOA解決方案是一個(gè)松散耦合、靈活的架構(gòu)。

需要注意的是,ESB是一種架構(gòu)模式,不能簡單地等同于特定的技術(shù)或產(chǎn)品,但實(shí)現(xiàn)ESB確實(shí)需要各種產(chǎn)品在運(yùn)行時(shí)和工具方面的支持。IBM有很好的產(chǎn)品支持,運(yùn)行時(shí)支持包括WebSphere ESB和WebSphere Message Broker;工具支持有WebSphere Integration Developer,支持用戶以圖形界面的方式來完成相關(guān)的開發(fā)任務(wù),如發(fā)布服務(wù)、使用各種模式、轉(zhuǎn)換消息和定義路由等。

1.2.5 面向服務(wù)的編程模型:服務(wù)組件架構(gòu)(SCA)和服務(wù)數(shù)據(jù)對象(SDO)

為了促進(jìn)面向服務(wù)應(yīng)用的開發(fā),IT公司聯(lián)合起來,在2005年11月發(fā)布了服務(wù)組件架構(gòu)(Service Component Architecture)和服務(wù)數(shù)據(jù)對象(Service Data Object)規(guī)范,這些公司包括IBM,BEA,Oracle,SAP等。

SCA的目標(biāo)是大大地簡化服務(wù)開發(fā),直接采用Web服務(wù)和XML開發(fā)服務(wù),使得程序員工作在底層技術(shù)上,需要應(yīng)付各種異構(gòu)環(huán)境下的具體實(shí)現(xiàn)細(xì)節(jié)。其中,SCA定義和規(guī)范了技術(shù)中立和實(shí)現(xiàn)透明的服務(wù)組件、服務(wù)及服務(wù)調(diào)用和組裝;而SDO定義和規(guī)范了服務(wù)世界里的數(shù)據(jù),這些數(shù)據(jù)對象擁有清晰定義的信息模型,獨(dú)立于數(shù)據(jù)源和具體數(shù)據(jù)訪問技術(shù),使得服務(wù)訪問數(shù)據(jù)和在服務(wù)之間交換數(shù)據(jù)更方便、有效。

很多公司已經(jīng)在J2EE平臺(tái)上支持了SCA/SDO,還提供了C++的版本。IBM WebSphere Process Server 6實(shí)現(xiàn)了SCA/SDO規(guī)范,提供了最新的SOA編程模型的支持,已經(jīng)在很多實(shí)踐中被廣泛使用。


圖1-3 隨需應(yīng)變的計(jì)算環(huán)境應(yīng)該具備的特點(diǎn) 

(1)整合:將人、過程、應(yīng)用和數(shù)據(jù)全面整合起來。

(2)虛擬化:將分布、異構(gòu)的物理資源(服務(wù)器、存儲(chǔ)設(shè)備等)整合起來,呈現(xiàn)為統(tǒng)一的邏輯對象,以安全和可管理的方式供使用。

(3)自主計(jì)算:如同生物體一樣,系統(tǒng)具備一些高級生物系統(tǒng)的能力,包括自我診斷和修復(fù)問題,自動(dòng)配置和調(diào)整以適應(yīng)環(huán)境的變化,自動(dòng)優(yōu)化資源的使用效率、增強(qiáng)工作負(fù)荷的處理的能力,自我保護(hù)數(shù)據(jù)和信息的安全。

(4)開放標(biāo)準(zhǔn):整個(gè)環(huán)境建立在開放的標(biāo)準(zhǔn)之上,保證系統(tǒng)的交互性。

1.2.4面向服務(wù)計(jì)算環(huán)境的現(xiàn)狀

不同的服務(wù)計(jì)算環(huán)境,采用不同的技術(shù)和產(chǎn)品,這里主要結(jié)合IBM的產(chǎn)品和技術(shù)來介紹在J2EE平臺(tái)上實(shí)現(xiàn)的服務(wù)計(jì)算環(huán)境。

主機(jī)通過增加對互聯(lián)網(wǎng)技術(shù)和標(biāo)準(zhǔn)的支持,來創(chuàng)建主機(jī)上的面向服務(wù)計(jì)算環(huán)境。比如IBM的CICS 3.1,提供了SOAP和Web服務(wù)的支持,可以將主機(jī)上的應(yīng)用以Web服務(wù)的方式提供出來,供消費(fèi)者使用。

多年來,IT界的主要技術(shù)提供者,一直攜手努力定義和推動(dòng)Web服務(wù)的相關(guān)標(biāo)準(zhǔn),并且在主要的幾個(gè)計(jì)算平臺(tái)上實(shí)現(xiàn)了高度兼容,包括.NET,J2EE和開源平臺(tái)(如LAMPLinux,Apache,mySQL,PHP/Perl/Python)。

IBM以J2EE為基礎(chǔ),提供了全面的、強(qiáng)大的服務(wù)計(jì)算環(huán)境,如圖1-4所示。


圖1-4 IBM提供的服務(wù)計(jì)算環(huán)境

在這個(gè)計(jì)算環(huán)境中,它是服務(wù)的世界。其中,Access Services提供訪問已有應(yīng)用或遺留系統(tǒng)的能力,將已有系統(tǒng)中的功能和信息轉(zhuǎn)化為服務(wù),IBM提供了訪問不同系統(tǒng)的適配器和相應(yīng)的框架來幫助轉(zhuǎn)化。 Business App Services指那些通過新的計(jì)算平臺(tái)J2EE(如IBM的WebSphere Application Server)來實(shí)現(xiàn)的新應(yīng)用,它們所實(shí)現(xiàn)的功能和信息也都轉(zhuǎn)化為服務(wù)提供出來。Partner Service指那些來自合作伙伴的服務(wù),WebSphere Partner Gateway提供企業(yè)邊界處不同安全等差異的轉(zhuǎn)換。Information Service是那些跟信息(而不是活動(dòng))有關(guān)系的服務(wù),比如將多個(gè)系統(tǒng)中異構(gòu)的數(shù)據(jù),聚合、轉(zhuǎn)換為業(yè)務(wù)需要的統(tǒng)一整齊的業(yè)務(wù)數(shù)據(jù)對象來訪問。 Process Service是指把多個(gè)服務(wù)聚合成為一個(gè)服務(wù)流程對應(yīng)業(yè)務(wù)過程的服務(wù),這種復(fù)合服務(wù)通常是長時(shí)間運(yùn)行的過程。Interaction Service是把人的活動(dòng),通過人機(jī)交互以服務(wù)的方式出現(xiàn)在整個(gè)業(yè)務(wù)過程中,作為Process Service中的一部分。

在面向服務(wù)計(jì)算環(huán)境中,企業(yè)服務(wù)總線處于非常重要的位置,它提供服務(wù)的中介,解耦服務(wù)請求者和服務(wù)提供者,是服務(wù)計(jì)算環(huán)境中的核心。ESB是過去消息中間件的發(fā)展,采用了"總線"這樣一種模式來管理和簡化應(yīng)用之間的集成拓?fù)浣Y(jié)構(gòu),以廣為接受的開放標(biāo)準(zhǔn)為基礎(chǔ)來支持應(yīng)用之間在消息、事件和服務(wù)級別上的動(dòng)態(tài)互聯(lián)互通。

ESB的基本特征和能力包括:描述服務(wù)的元數(shù)據(jù)和服務(wù)注冊管理;在服務(wù)請求者和提供者之間傳遞數(shù)據(jù)及對這些數(shù)據(jù)進(jìn)行轉(zhuǎn)換的能力,并支持由實(shí)踐中總結(jié)出來的一些模式如同步模式,異步模式等;發(fā)現(xiàn)、路由、匹配和選擇的能力,以支持服務(wù)之間的動(dòng)態(tài)交互,解耦服務(wù)請求者和服務(wù)提供者。高級一些的能力,包括對安全的支持、服務(wù)質(zhì)量保證、可管理性和負(fù)載平衡等。

ESB所提供的基于標(biāo)準(zhǔn)的連接服務(wù),將應(yīng)用中實(shí)現(xiàn)的功能或者數(shù)據(jù)資源,轉(zhuǎn)化為服務(wù)請求者能以標(biāo)準(zhǔn)的方式來訪問的服務(wù);當(dāng)請求者來請求一個(gè)服務(wù)時(shí),ESB 中這種中介轉(zhuǎn)化過程可能簡單到什么也沒有,也可能要很復(fù)雜的中介服務(wù)支持,包括動(dòng)態(tài)地查找、選擇一個(gè)服務(wù),消息的傳遞、路由和轉(zhuǎn)換、協(xié)議的轉(zhuǎn)換。這種中介過程,是ESB借助于服務(wù)注冊管理及問題域相關(guān)的知識(shí)(如業(yè)務(wù)方面的一些規(guī)則等)自動(dòng)進(jìn)行的,不需要服務(wù)請求者和提供者介入,從而實(shí)現(xiàn)了解耦服務(wù)請求者和提供者的技術(shù)基礎(chǔ)。這使得服務(wù)請求者不需要關(guān)心服務(wù)提供者的位置和具體實(shí)現(xiàn)技術(shù),雙方在保持接口不變的情況下,各自可以獨(dú)立地演變。

所以,ESB采用總線結(jié)構(gòu)模式簡化了應(yīng)用之間的集成拓?fù)?,通過源自實(shí)踐的模式,提供了基于標(biāo)準(zhǔn)的通用連接服務(wù),使得服務(wù)請求者和服務(wù)提供者之間可以以松散耦合、動(dòng)態(tài)的方式交互,從而在不同層次上使得SOA解決方案是一個(gè)松散耦合、靈活的架構(gòu)。

需要注意的是,ESB是一種架構(gòu)模式,不能簡單地等同于特定的技術(shù)或產(chǎn)品,但實(shí)現(xiàn)ESB確實(shí)需要各種產(chǎn)品在運(yùn)行時(shí)和工具方面的支持。IBM有很好的產(chǎn)品支持,運(yùn)行時(shí)支持包括WebSphere ESB和WebSphere Message Broker;工具支持有WebSphere Integration Developer,支持用戶以圖形界面的方式來完成相關(guān)的開發(fā)任務(wù),如發(fā)布服務(wù)、使用各種模式、轉(zhuǎn)換消息和定義路由等。

1.2.5 面向服務(wù)的編程模型:服務(wù)組件架構(gòu)(SCA)和服務(wù)數(shù)據(jù)對象(SDO)

為了促進(jìn)面向服務(wù)應(yīng)用的開發(fā),IT公司聯(lián)合起來,在2005年11月發(fā)布了服務(wù)組件架構(gòu)(Service Component Architecture)和服務(wù)數(shù)據(jù)對象(Service Data Object)規(guī)范,這些公司包括IBM,BEA,Oracle,SAP等。

SCA的目標(biāo)是大大地簡化服務(wù)開發(fā),直接采用Web服務(wù)和XML開發(fā)服務(wù),使得程序員工作在底層技術(shù)上,需要應(yīng)付各種異構(gòu)環(huán)境下的具體實(shí)現(xiàn)細(xì)節(jié)。其中,SCA定義和規(guī)范了技術(shù)中立和實(shí)現(xiàn)透明的服務(wù)組件、服務(wù)及服務(wù)調(diào)用和組裝;而SDO定義和規(guī)范了服務(wù)世界里的數(shù)據(jù),這些數(shù)據(jù)對象擁有清晰定義的信息模型,獨(dú)立于數(shù)據(jù)源和具體數(shù)據(jù)訪問技術(shù),使得服務(wù)訪問數(shù)據(jù)和在服務(wù)之間交換數(shù)據(jù)更方便、有效。

很多公司已經(jīng)在J2EE平臺(tái)上支持了SCA/SDO,還提供了C++的版本。IBM WebSphere Process Server 6實(shí)現(xiàn)了SCA/SDO規(guī)范,提供了最新的SOA編程模型的支持,已經(jīng)在很多實(shí)踐中被廣泛使用。

1.3 軟件體系結(jié)構(gòu)的演變和面向服務(wù)的設(shè)計(jì)原則

軟件開發(fā)一直是一件很難的事情,因?yàn)槲覀円幚淼膯栴}越來越復(fù)雜,人們處理這種復(fù)雜性最主要的手段就是抽象?;仡櫄v史,我們的抽象層次越來越高,反映在各個(gè)方面,從編程語言、平臺(tái)、開發(fā)過程、工具到模式。尤其是模式,大量出現(xiàn)在那些結(jié)構(gòu)上設(shè)計(jì)得很好的軟件系統(tǒng)中,無論是微觀層次上(對象、組件)穩(wěn)定出現(xiàn)的結(jié)構(gòu)范式,還是在宏觀層面上出現(xiàn)的架構(gòu)模式。使用哪些抽象手段來為問題域建模?如何定義組成部分之間的協(xié)作和結(jié)構(gòu)關(guān)系?如何定義從外界所看到的系統(tǒng)結(jié)構(gòu)和行為?是什么設(shè)計(jì)原則在指導(dǎo)我們的架構(gòu)決策?有什么最佳實(shí)踐和模式可供借鑒?所有這些,形成了不同設(shè)計(jì)風(fēng)格和體系結(jié)構(gòu)范式(Architecture Paradigm)。

通常,一種體系結(jié)構(gòu)范式,包括設(shè)計(jì)原則,來自實(shí)踐的結(jié)構(gòu)式樣、組成要素和關(guān)系,以及在整個(gè)開發(fā)生命周期中它們是如何被識(shí)別、描述和控制的。體系結(jié)構(gòu)從過去單個(gè)應(yīng)用包羅一切的客戶/服務(wù)器的模式,逐漸演變到三層和多層結(jié)構(gòu)的各種分布式計(jì)算模式。今天,人們開始談?wù)摵蛯?shí)踐面向服務(wù)、更加分布化的架構(gòu)范式。

從抽象手段而言,SOA在原有方法的基礎(chǔ)上,增加了服務(wù)、流程等元素。這些抽象手段之間的關(guān)系如圖1-5所示。

如何利用這些抽象手段,將一個(gè)業(yè)務(wù)需求轉(zhuǎn)化為流程、服務(wù),進(jìn)一步建模為服務(wù)組件,然后結(jié)合具體實(shí)現(xiàn)環(huán)境,在重用已有系統(tǒng)的功能和數(shù)據(jù)資源的基礎(chǔ)上來實(shí)現(xiàn)?如圖1-6所示是IBM總結(jié)的SOA架構(gòu)概念模式。

SOA架構(gòu)中,繼承了來自對象和組件設(shè)計(jì)的各種原則,如封裝、自我包含等。那些保證服務(wù)的靈活性、松散耦合和重用能力的設(shè)計(jì)原則,對SOA架構(gòu)來說同樣是非常重要的。

結(jié)構(gòu)上,服務(wù)總線是SOA的架構(gòu)模式之一。

關(guān)于服務(wù),一些常見和討論的設(shè)計(jì)原則如下:

(1)無狀態(tài)。以避免服務(wù)請求者依賴于服務(wù)提供者的狀態(tài)。

(2)單一實(shí)例。避免功能冗余。


圖1-5 SOA中的重要抽象手段


圖1-6 SOA的概念架構(gòu)模式

(3)明確定義的接口。服務(wù)的接口由WSDL定義,用于指明服務(wù)的公共接口與其內(nèi)部專用實(shí)現(xiàn)之間的界線。WS-Policy用于描述服務(wù)規(guī)約,XML模式(Schema)用于定義所交換的消息格式(即服務(wù)的公共數(shù)據(jù))。使用者依賴服務(wù)規(guī)約來調(diào)用服務(wù),所以服務(wù)定義必須長時(shí)間穩(wěn)定,一旦公布,不隨意更改;服務(wù)的定義應(yīng)盡可能明確,減少使用者的不適當(dāng)使用;不要讓使用者看到服務(wù)內(nèi)部的私有數(shù)據(jù)。

(4)自包含和模塊化。服務(wù)封裝了那些在業(yè)務(wù)上穩(wěn)定、重復(fù)出現(xiàn)的活動(dòng)和組件,實(shí)現(xiàn)服務(wù)的功能實(shí)體是完全獨(dú)立自主的,獨(dú)立進(jìn)行部署、版本控制、自我管理和恢復(fù)。

(5)粗粒度。服務(wù)數(shù)量不應(yīng)該太大,依靠消息交互而不是遠(yuǎn)程過程調(diào)用(RPC),通常消息量比較大,但是服務(wù)之間的交互頻度較低。

(6)服務(wù)之間的松耦合性。服務(wù)使用者看到的是服務(wù)的接口,其位置、實(shí)現(xiàn)技術(shù)、當(dāng)前狀態(tài)等對使用者是不可見的,服務(wù)私有數(shù)據(jù)對服務(wù)使用者是不可見的。

(7)重用能力。服務(wù)應(yīng)該是可以重用的。

(8)互操作性、兼容和策略聲明。為了確保服務(wù)規(guī)約的全面和明確,策略成為一個(gè)越來越重要的方面。這可以是技術(shù)相關(guān)的內(nèi)容,比如一個(gè)服務(wù)對安全性方面的要求;也可以是跟業(yè)務(wù)有關(guān)的語義方面的內(nèi)容,比如需要滿足的費(fèi)用或者服務(wù)級別方面的要求,這些策略對于服務(wù)在交互時(shí)是非常重要的。WS- Policy用于定義可配置的互操作語義,來描述特定服務(wù)的期望、控制其行為。在設(shè)計(jì)時(shí),應(yīng)該利用策略聲明確保服務(wù)期望和語義兼容性方面的完整和明確。

1.4 軟件工程的演變和面向服務(wù)體系結(jié)構(gòu)

軟件工程方法和過程伴隨著軟件實(shí)踐不斷發(fā)展。軟件危機(jī)發(fā)生之后,從瀑布模型、原型方法等講究過程、文檔密集、控制較多的方法,逐漸發(fā)展到輕量級、敏捷和迭代的方法。這些方法更加人性化,避免因?yàn)檫^重的過程而扼殺人的主動(dòng)性和創(chuàng)造性。這些方法更強(qiáng)調(diào)快速地交付對客戶有價(jià)值的軟件、直接的溝通、持續(xù)集成和持續(xù)質(zhì)量保證。

SOA和當(dāng)前軟件工程過程的一個(gè)共同交叉點(diǎn)就是業(yè)務(wù)價(jià)值驅(qū)動(dòng)(Business Centric),強(qiáng)調(diào)速度。SOA從軟件的靈活性和重用能力入手,而敏捷過程則從軟件交付效率出發(fā)。

SOA的架構(gòu)特性,使得敏捷過程非常適合SOA項(xiàng)目的實(shí)施。在SOA架構(gòu)中,服務(wù)的獨(dú)立性,使得每個(gè)服務(wù)可以被單獨(dú)地開發(fā)、測試和集成。一個(gè)企業(yè)中的 IT系統(tǒng),如果是基于SOA的計(jì)算環(huán)境,那么這個(gè)環(huán)境就是一個(gè)服務(wù)的生態(tài)系統(tǒng),每開發(fā)一個(gè)服務(wù),馬上就可以獨(dú)立部署,成為這個(gè)生態(tài)系統(tǒng)中的一部分。這樣既很好地支持了持續(xù)集成、持續(xù)質(zhì)量保證,又很好地使得這個(gè)服務(wù)馬上產(chǎn)生業(yè)務(wù)價(jià)值,而不是苦等其他服務(wù)的到位。服務(wù)的特性,使得敏捷過程和SOA架構(gòu)可以有一個(gè)很好的結(jié)合,讓二者相得益彰。以我們與不同客戶合作的實(shí)踐,我們已經(jīng)充分體會(huì)到這二者在實(shí)現(xiàn)過程中的風(fēng)險(xiǎn)控制、業(yè)務(wù)需求改變的適應(yīng)能力方面相互配合的好處。比如我們在中遠(yuǎn)集運(yùn),從瀑布過程轉(zhuǎn)向了迭代的開發(fā)過程,采用了敏捷方法的原則。

在韓國的項(xiàng)目里,我們的團(tuán)隊(duì)來自IBM中國,IBM韓國及韓國客戶自己的工程師,分處漢城和北京兩個(gè)地方,這些工程師怎樣協(xié)作才能很快地交付高質(zhì)量的系統(tǒng)而不相互牽扯?對于北京的工程師,北京的團(tuán)隊(duì)無法復(fù)制客戶在漢城的已有系統(tǒng),如何測試自己開發(fā)的服務(wù)?通過服務(wù)建模,系統(tǒng)被分解為若干相互獨(dú)立的服務(wù),我們將那些要重用已有系統(tǒng)來實(shí)現(xiàn)的服務(wù)交給漢城的隊(duì)員,其他的交給北京的隊(duì)員,并且要求每個(gè)服務(wù)開發(fā)人員提供一個(gè)簡單的"偽"實(shí)現(xiàn)(Mock Service)。一開始,這些簡單實(shí)現(xiàn)被部署在北京和漢城的測試環(huán)境中,然后各個(gè)服務(wù)開發(fā)小組開始各自獨(dú)立地開發(fā)自己所負(fù)責(zé)的服務(wù),而流程開發(fā)人員也在同一時(shí)間開始開發(fā)他的流程,不過所基于的服務(wù)是在那些簡單實(shí)現(xiàn)之上,但是這些簡單實(shí)現(xiàn)足以支持有意義的單元和集成測試。隨后,一旦某個(gè)服務(wù)被實(shí)現(xiàn),它就被部署到實(shí)際的環(huán)境中,通過調(diào)整ESB的服務(wù)中介配置,對此服務(wù)的請求被路由到真實(shí)實(shí)現(xiàn)。一旦真實(shí)實(shí)現(xiàn)有問題,還可以換回簡單實(shí)現(xiàn),以避免影響其他服務(wù)、流程的單元和集成測試。這種靈活性帶來的隨時(shí)開發(fā)、隨時(shí)部署、隨時(shí)集成和測試對于采用敏捷過程是非常有利的。

1.5 SOA技術(shù)概覽

本節(jié)將討論目前SOA體系架構(gòu)中用到的主要技術(shù)和標(biāo)準(zhǔn)。

1.5.1 SOA的主要組件

在前面關(guān)于計(jì)算環(huán)境的討論里,我們已經(jīng)提到SOA計(jì)算環(huán)境的主要組件包括:服務(wù)運(yùn)行時(shí)環(huán)境、服務(wù)總線、服務(wù)注冊庫、服務(wù)網(wǎng)關(guān)和流程引擎。通常,還會(huì)包括服務(wù)管理、業(yè)務(wù)活動(dòng)監(jiān)控(Business Activity Monitoring)和業(yè)務(wù)績效管理(Business Performance Management,BPM)。另外,在服務(wù)建模、開發(fā)和編排服務(wù)等方面,我們需要相應(yīng)的工具來支持。在分析、設(shè)計(jì)方面,我們需要基于服務(wù)的分析、設(shè)計(jì)方法,就是我們通常說的服務(wù)建模,包括服務(wù)的識(shí)別、定義和實(shí)現(xiàn)策略,其輸出是一個(gè)服務(wù)模型(Service Model)。

1.5.2 SOA主要技術(shù)和標(biāo)準(zhǔn)

Web服務(wù)作為實(shí)現(xiàn)SOA中服務(wù)的最主要手段。我們首先來了解跟Web Service相關(guān)的標(biāo)準(zhǔn),它們大多以"WS-"作為名字的前綴,所以統(tǒng)稱WS-*。 Web服務(wù)最基本的協(xié)議包括UDDI,WSDL和SOAP,通過它們,我們可以提供直接而又簡單的Web Service支持,如圖1-7所示。

但是基本協(xié)議無法保證企業(yè)計(jì)算需要的安全性和可靠性,所以我們需要增加這方面的協(xié)議,比如WS-Security,WS-Reliability和 WS-ReliableMessaging;對于復(fù)雜的業(yè)務(wù)場景,我們需要WS-BPEL和WS-CDL這樣的語言來將多個(gè)服務(wù)編排成為業(yè)務(wù)流程;管理服務(wù)的協(xié)議如WS-Manageability,WSDM等。跟Web服務(wù)相關(guān)的標(biāo)準(zhǔn),還在快速發(fā)展當(dāng)中。目前在SOA產(chǎn)品和實(shí)踐中,除了基本協(xié)議外,比較重要的還包括BPEL,WS-Security,WS-Policy和SCA/SDO。如表1-1所示給出了一個(gè)基本的總結(jié),后面的章節(jié)會(huì)介紹重要的技術(shù)和標(biāo)準(zhǔn)。


圖1-7 基本W(wǎng)eb服務(wù)協(xié)議


表1-1 當(dāng)前Web服務(wù)協(xié)議棧

1.5.3 SOA技術(shù)在工業(yè)界的支持現(xiàn)狀

目前,Web的標(biāo)準(zhǔn)和技術(shù)在演變當(dāng)中,不同的技術(shù)環(huán)境的支持力度也不同,但是前面提到的基本核心協(xié)議,都有很好的支持。關(guān)于Web服務(wù)協(xié)議的接受和支持程度,如圖1-8所示。


圖1-8 當(dāng)前Web服務(wù)的接受情況

1.6 本章小結(jié)

本章介紹了SOA基本概念,并澄清了容易混淆的一些問題,然后概要地討論了SOA的若干重要方面,包括面向服務(wù)的計(jì)算環(huán)境、編程模型、架構(gòu)風(fēng)格、工程方法等。還非常簡要地介紹了SOA在工業(yè)界的支持概覽,更多的細(xì)節(jié)請參看各個(gè)部分所附的參考鏈接,它們會(huì)給讀者提供非常充分的信息和文檔,供讀者了解SOA 相關(guān)技術(shù)和標(biāo)準(zhǔn)的發(fā)展細(xì)節(jié)。通過表1-2,讀者也可以了解到工業(yè)界,包括廠家和標(biāo)準(zhǔn)化組織的參與情況。

關(guān)于作者

毛新生先生現(xiàn)任IBM中國開發(fā)中心Web 2.0首席架構(gòu)師。此前他曾任IBM軟件集團(tuán)企業(yè)解決方案部大中華區(qū)和北亞地區(qū)首席架構(gòu)師與IBM SOA中國設(shè)計(jì)中心技術(shù)主管,在企業(yè)級軟件方面擁有廣泛、扎實(shí)、深厚的理論功底和豐富的設(shè)計(jì)與項(xiàng)目實(shí)施經(jīng)驗(yàn)。2006年,毛新生先生被授予“IBM資深技術(shù)主管”稱號(hào)(STSM ,Senior Technical Staff Member),成為中國內(nèi)地第一位獲此殊榮的IBM技術(shù)人員,在全球也僅有1000多位IBM員工享有這樣的榮譽(yù)。毛新生先生于2000年加入IBM,曾先后在北京大學(xué)和IBM中國研究院從事研發(fā)工作,以研究人員,開發(fā)經(jīng)理和架構(gòu)師的身份從事過信息檢索,語音技術(shù)及其中間件,門戶,普及計(jì)算,Linux,網(wǎng)格計(jì)算,Web Service和SOA等領(lǐng)域的很多工作。毛新生先生畢業(yè)于北京大學(xué),擁有計(jì)算機(jī)專業(yè)碩士學(xué)位。如果您想找到更多關(guān)于毛新生先生的文章,您可以搜索毛新生的BLOG。

分享到

多易

相關(guān)推薦