轉(zhuǎn)發(fā)
1.1 SOA 的基本概念
SOA是英文詞語(yǔ)"Service Oriented Architecture"的縮寫(xiě),中文有多種翻譯,如"面向服務(wù)的體系結(jié)構(gòu)"、"以服務(wù)為中心的體系結(jié)構(gòu)"和"面向服務(wù)的架構(gòu)",其中"面向服務(wù)的架構(gòu)"比較常見(jiàn)。SOA有很多定義,但基本上可以分為兩類(lèi):一類(lèi)認(rèn)為SOA主要是一種架構(gòu)風(fēng)格;另一類(lèi)認(rèn)為SOA是包含運(yùn)行環(huán)境、編程模型、架構(gòu)風(fēng)格和相關(guān)方法論等在內(nèi)的一整套新的分布式軟件系統(tǒng)構(gòu)造方法和環(huán)境,涵蓋服務(wù)的整個(gè)生命周期:建模-開(kāi)發(fā)-整合-部署-運(yùn)行-管理。后者概括的范圍更大,著眼于未來(lái)的發(fā)展,我們更傾向于后者,認(rèn)為SOA是分布式軟件系統(tǒng)構(gòu)造方法和環(huán)境的新發(fā)展階段。
在SOA架構(gòu)風(fēng)格中,服務(wù)是最核心的抽象手段,業(yè)務(wù)被劃分(組件化)為一系列粗粒度的業(yè)務(wù)服務(wù)和業(yè)務(wù)流程。業(yè)務(wù)服務(wù)相對(duì)獨(dú)立、自包含、可重用,由一個(gè)或者多個(gè)分布的系統(tǒng)所實(shí)現(xiàn),而業(yè)務(wù)流程由服務(wù)組裝而來(lái)。一個(gè)"服務(wù)"定義了一個(gè)與業(yè)務(wù)功能或業(yè)務(wù)數(shù)據(jù)相關(guān)的接口,以及約束這個(gè)接口的契約,如服務(wù)質(zhì)量要求、業(yè)務(wù)規(guī)則、安全性要求、法律法規(guī)的遵循、關(guān)鍵業(yè)績(jī)指標(biāo)(Key Performance Indicator,KPI)等。接口和契約采用中立、基于標(biāo)準(zhǔn)的方式進(jìn)行定義,它獨(dú)立于實(shí)現(xiàn)服務(wù)的硬件平臺(tái)、操作系統(tǒng)和編程語(yǔ)言。這使得構(gòu)建在不同系統(tǒng)中的服務(wù)可以以一種統(tǒng)一的和通用的方式進(jìn)行交互、相互理解。除了這種不依賴(lài)于特定技術(shù)的中立特性,通過(guò)服務(wù)注冊(cè)庫(kù)(Service Registry)加上企業(yè)服務(wù)總線(Enterprise Service Bus)來(lái)支持動(dòng)態(tài)查詢(xún)、定位、路由和中介(Mediation)的能力,使得服務(wù)之間的交互是動(dòng)態(tài)的,位置是透明的。技術(shù)和位置的透明性,使得服務(wù)的請(qǐng)求者和提供者之間高度解耦。這種松耦合系統(tǒng)的好處有兩點(diǎn):一點(diǎn)是它適應(yīng)變化的靈活性;另一點(diǎn)是當(dāng)某個(gè)服務(wù)的內(nèi)部結(jié)構(gòu)和實(shí)現(xiàn)逐漸發(fā)生改變時(shí),不影響其他服務(wù)。而緊耦合則是指應(yīng)用程序的不同組件之間的接口與其功能和結(jié)構(gòu)是緊密相連的,因而當(dāng)發(fā)生變化時(shí),某一部分的調(diào)整會(huì)隨著各種緊耦合的關(guān)系引起其他部分甚至整個(gè)應(yīng)用程序的更改,這樣的系統(tǒng)架構(gòu)就很脆弱了。
SOA架構(gòu)帶來(lái)的另一個(gè)重要觀點(diǎn)是業(yè)務(wù)驅(qū)動(dòng)IT,即IT和業(yè)務(wù)更加緊密地對(duì)齊。以粗粒度的業(yè)務(wù)服務(wù)為基礎(chǔ)來(lái)對(duì)業(yè)務(wù)建模,會(huì)產(chǎn)生更加簡(jiǎn)潔的業(yè)務(wù)和系統(tǒng)視圖;以服務(wù)為基礎(chǔ)來(lái)實(shí)現(xiàn)的IT系統(tǒng)更靈活、更易于重用、更好(也更快)地應(yīng)對(duì)變化;以服務(wù)為基礎(chǔ),通過(guò)顯式地定義、描述、實(shí)現(xiàn)和管理業(yè)務(wù)層次的粗粒度服務(wù)(包括業(yè)務(wù)流程),提供了業(yè)務(wù)模型和相關(guān)IT實(shí)現(xiàn)之間更好的"可追溯性",減小了它們之間的差距,使得業(yè)務(wù)的變化更容易傳遞到IT。
因此,可以將SOA的主要優(yōu)點(diǎn)概括為:IT能夠更好更快地提供業(yè)務(wù)價(jià)值(Business Centric)、快速應(yīng)變能力(Flexibility)、重用(Reusability)。
從演變的歷程來(lái)看,SOA在很多年前就被提出來(lái)了,現(xiàn)在SOA的再現(xiàn)和流行是若干因素的結(jié)合。一方面是多年的軟件工程發(fā)展和實(shí)踐所積累的經(jīng)驗(yàn)、方法和各種設(shè)計(jì)/架構(gòu)模式,包括OO/CBD/MDD/MDA、EAI和中間件;另一方面是互聯(lián)網(wǎng)的多年發(fā)展帶來(lái)前所未有的分布式系統(tǒng)的交互能力和標(biāo)準(zhǔn)化基礎(chǔ)。與此同時(shí),企業(yè)越來(lái)越重視業(yè)務(wù)模型本身的組件化,以支持高度靈活的業(yè)務(wù)戰(zhàn)略。但是現(xiàn)有的企業(yè)軟件架構(gòu)不夠靈活,難以適應(yīng)日益復(fù)雜的企業(yè)整合,難以滿(mǎn)足隨需應(yīng)變商務(wù)的需要,因此與業(yè)務(wù)對(duì)齊、以業(yè)務(wù)的敏捷應(yīng)變能力為首要目標(biāo)、松散耦合、支持重用的SOA架構(gòu)方法得到青睞。更多的細(xì)節(jié)請(qǐng)參見(jiàn)"
基于我們同客戶(hù)打交道的經(jīng)驗(yàn),有必要在這里澄清大家經(jīng)常混淆的幾個(gè)基本問(wèn)題。
第一,SOA是架構(gòu)風(fēng)格,是方法;而不是具體架構(gòu)具體實(shí)現(xiàn)技術(shù)(如Web Service)、具體架構(gòu)元素(如企業(yè)服務(wù)總線,Enterprise Service Bus,ESB)。
經(jīng)常有人認(rèn)為只要用了Web Service,就是SOA了。這是不對(duì)的,Web Service只是實(shí)現(xiàn)服務(wù)的一種具體技術(shù)表現(xiàn)形式。同樣,認(rèn)為搞SOA,就是買(mǎi)點(diǎn)軟件,建個(gè)ESB,這也是不對(duì)的,ESB只是SOA架構(gòu)風(fēng)格中的一部分。首先,ESB是一種從實(shí)踐中總結(jié)出來(lái)的架構(gòu)風(fēng)格元素,即BUS(總線模式);其次,ESB的主要功能是負(fù)責(zé)連通性和服務(wù)中介(Service Mediation),解耦服務(wù)的請(qǐng)求者和服務(wù)的提供者。
第二,SOA的首要目標(biāo)是IT與業(yè)務(wù)對(duì)齊,支持業(yè)務(wù)的快速變化;其次是IT架構(gòu)的靈活性和IT資產(chǎn)的重用。
業(yè)務(wù)對(duì)敏捷性的需要,是SOA最大的驅(qū)動(dòng)力。一方面是業(yè)務(wù)在這方面的要求越來(lái)越高;另一方面是今天的IT很不靈活,很難適應(yīng)業(yè)務(wù)快速變化的需求,不僅僅是因?yàn)镮T架構(gòu)不靈活,更重要的是業(yè)務(wù)模型中的元素和IT系統(tǒng)的元素之間存在很大的差距。這種不對(duì)齊,導(dǎo)致業(yè)務(wù)人員和IT人員之間的溝通不夠有效,業(yè)務(wù)的變化需要花費(fèi)很大的代價(jià)傳遞到IT系統(tǒng)。很難想像,業(yè)務(wù)人員對(duì)一個(gè)Java對(duì)象,一個(gè)EJB或者一個(gè)JSP頁(yè)面感興趣,這離業(yè)務(wù)世界太遠(yuǎn)了。這種業(yè)務(wù)和IT的對(duì)齊,需要在IT系統(tǒng)中實(shí)現(xiàn)更高階的抽象元素,就是業(yè)務(wù)模型中的元素(服務(wù)、流程、業(yè)績(jī)管理),并且滿(mǎn)足業(yè)務(wù)需要的水平整合(將人、信息、應(yīng)用和流程端到端地動(dòng)態(tài)整合起來(lái))。這樣一個(gè)以服務(wù)為中心的、端到端整合的環(huán)境,首先使得業(yè)務(wù)變化可以在業(yè)務(wù)元素這個(gè)層面上溝通,更容易、更準(zhǔn)確地從業(yè)務(wù)傳遞到IT。其次,這種變化被隔離在需要變化的局部,而不擴(kuò)散到系統(tǒng)的其他部分。這就需要整個(gè)IT架構(gòu)本身是松散耦合的,一個(gè)服務(wù)的變化(功能、數(shù)據(jù)、過(guò)程、技術(shù)環(huán)境等)不影響其他服務(wù)。最后,我們希望這些反映業(yè)務(wù)元素的服務(wù),是相對(duì)穩(wěn)定、可以重用的,這對(duì)快速適應(yīng)變化、減少成本是非常重要的。
第三,在工程上,SOA的重點(diǎn)是服務(wù)建模和基于SOA的設(shè)計(jì)原則進(jìn)行架構(gòu)決策和設(shè)計(jì)。
經(jīng)常碰到客戶(hù)提出這樣的問(wèn)題:SOA挺好,為什么好?怎么做才是SOA的方法?跟過(guò)去的方法,比如OO/CBD有什么不同?有時(shí)候一個(gè)J2EE服務(wù)器就好了,為什么那么復(fù)雜?
從建模和設(shè)計(jì)的角度來(lái)說(shuō),SOA更多地側(cè)重在業(yè)務(wù)層次上,也就是通過(guò)服務(wù)建模將業(yè)務(wù)組件化為服務(wù)模型,它是業(yè)務(wù)架構(gòu)的底層,是技術(shù)架構(gòu)的頂層,承上啟下,是靈活的業(yè)務(wù)模型和IT之間的橋梁,保證二者之間的"可追溯性"。從這里往下,是基于已有的方法,比如OO/CBD來(lái)進(jìn)行的。從架構(gòu)的層次上,SOA更多地側(cè)重于如何將企業(yè)范圍內(nèi)多個(gè)分布的系統(tǒng)(包括已有系統(tǒng)/遺留系統(tǒng))連接起來(lái)(ESB,Adapter/Connector),如何將它們的功能、數(shù)據(jù)轉(zhuǎn)化為服務(wù),如何通過(guò)服務(wù)中介機(jī)制(ESB,Service Registry)保證服務(wù)之間以松散耦合的方式交互,如何組裝(集成)服務(wù)為流程,如何管理服務(wù)和流程等。從這往下,對(duì)于實(shí)現(xiàn)服務(wù)的一個(gè)具體應(yīng)用,它的架構(gòu)、設(shè)計(jì)和實(shí)現(xiàn)是可以基于已有的實(shí)踐和方法的,比如J2EE或.NET。
有些時(shí)候,由于業(yè)務(wù)需求比較簡(jiǎn)單,所有這些東西都在一個(gè)J2EE的應(yīng)用服務(wù)器上,有些要素不是那么突出,不過(guò)隨著系統(tǒng)規(guī)模的擴(kuò)大,要解決的業(yè)務(wù)問(wèn)題更復(fù)雜、范圍更大的時(shí)候,SOA的各種架構(gòu)要素就會(huì)變得越來(lái)越重要。
在下面的小節(jié)里就概括地討論一下SOA的若干個(gè)重要方面,包括:面向服務(wù)的計(jì)算環(huán)境,編程模型,架構(gòu)風(fēng)格,工程方法,以及相關(guān)的技術(shù)。

 |

|
1.2 計(jì)算環(huán)境的演變和面向服務(wù)的計(jì)算環(huán)境
1.2.1 計(jì)算環(huán)境
計(jì)算環(huán)境由一組計(jì)算機(jī)、軟件平臺(tái)和相互聯(lián)通的網(wǎng)絡(luò)組成,這個(gè)環(huán)境能夠處理和交換數(shù)字信息,允許外界訪問(wèn)其內(nèi)信息資源(1) 。不同的計(jì)算環(huán)境有不同的計(jì)算風(fēng)格和編程模型,由一些特定于該計(jì)算環(huán)境的技術(shù)來(lái)支撐。如何在一個(gè)計(jì)算環(huán)境中分割和部署計(jì)算能力、數(shù)據(jù)資源,如何讓各個(gè)部分相互通信和協(xié)作,如何在概念上對(duì)問(wèn)題域進(jìn)行建模,然后映射到該計(jì)算環(huán)境,都會(huì)受到計(jì)算環(huán)境的影響和制約。因此,了解一下計(jì)算環(huán)境的歷史,會(huì)幫助我們理解面向服務(wù)的計(jì)算環(huán)境是如何演變而來(lái)的。
1.2.2 計(jì)算環(huán)境的演變歷程
計(jì)算環(huán)境的演變經(jīng)歷了若干個(gè)階段,在早期的主機(jī)時(shí)代,絕大多數(shù)的計(jì)算功能和系統(tǒng)的組成部分,都包括在一臺(tái)機(jī)器里。在20世紀(jì)80年代,隨著PC的繁榮,計(jì)算環(huán)境發(fā)生很大的變化。通過(guò)局域網(wǎng)相互連接的計(jì)算設(shè)備構(gòu)成客戶(hù)/服務(wù)器計(jì)算環(huán)境,計(jì)算資源和數(shù)據(jù)資源被適當(dāng)?shù)胤指睿蛻?hù)和服務(wù)器通過(guò)網(wǎng)絡(luò)協(xié)議、遠(yuǎn)程調(diào)用或消息等方式來(lái)相互協(xié)作,完成計(jì)算。
為了滿(mǎn)足更高的可伸縮性需求,多層架構(gòu)出現(xiàn),計(jì)算資源和數(shù)據(jù)資源的分布多樣化,與企業(yè)中原來(lái)已經(jīng)存在的計(jì)算環(huán)境,尤其是主機(jī)及其遺留系統(tǒng)之間的集成也變得越來(lái)越重要。中間件迅速發(fā)展,開(kāi)始出現(xiàn)分布式對(duì)象、組件和接口等概念,用于在計(jì)算環(huán)境中更好地分割運(yùn)算邏輯和數(shù)據(jù)資源。計(jì)算環(huán)境中不同部分之間的交互,也從原有相對(duì)低層的網(wǎng)絡(luò)協(xié)議、遠(yuǎn)程調(diào)用和消息機(jī)制的基礎(chǔ)上,發(fā)展到支持分布式對(duì)象、組件和接口之間的交互,這種交互在名字服務(wù)(Naming Service)等的支持下,通常是位置透明的。但由于缺乏普遍的標(biāo)準(zhǔn)化支持,很難做到技術(shù)透明,系統(tǒng)是緊耦合的。
隨著互聯(lián)網(wǎng)(Internet)的發(fā)展,開(kāi)放和標(biāo)準(zhǔn)的網(wǎng)絡(luò)協(xié)議被普遍支持,所有底層計(jì)算平臺(tái)都開(kāi)始支持這些標(biāo)準(zhǔn)和協(xié)議,這導(dǎo)致一個(gè)計(jì)算環(huán)境內(nèi)部和各個(gè)計(jì)算環(huán)境之間交互的藩籬被打破。數(shù)據(jù)和功能的表示與交互在XML、WEB服務(wù)(Web Service)技術(shù)與標(biāo)準(zhǔn)的基礎(chǔ)上,保證了通用性和最大的交互能力,這使得計(jì)算環(huán)境發(fā)展到一個(gè)全新的階段--基于標(biāo)準(zhǔn)、開(kāi)放的互聯(lián)網(wǎng)技術(shù)的計(jì)算環(huán)境。在這樣的計(jì)算環(huán)境中,各個(gè)部分可以采用異構(gòu)的底層技術(shù),它們使用XML來(lái)描述和表示自己的數(shù)據(jù)和功能,采用開(kāi)放的網(wǎng)絡(luò)協(xié)議(如HTTP)來(lái)握手,在此之上,基于Web服務(wù)來(lái)互操作和交換數(shù)據(jù)。在這里,一個(gè)很重要的新概念是"服務(wù)"(2),它是一個(gè)自包含的功能,使用者通過(guò)明確定義的接口(契約)來(lái)與一個(gè)服務(wù)交互,這個(gè)接口的描述基于WSDL(Web Service Description Language)這樣的開(kāi)放標(biāo)準(zhǔn)。對(duì)象和組件重在表示一個(gè)事物本身的組成部分和相互關(guān)聯(lián)(也就是WHAT"THINGS"ARE的問(wèn)題),而服務(wù)則表示一個(gè)事物做什么(也就是WHAT"THINGS"DO的問(wèn)題)。Web服務(wù)是實(shí)現(xiàn)服務(wù)的技術(shù)手段,就如同各種編程語(yǔ)言中的對(duì)象是實(shí)現(xiàn)對(duì)象的技術(shù)手段,J2EE中的EJB是實(shí)現(xiàn)組件的技術(shù)手段一樣。這種基于標(biāo)準(zhǔn)、開(kāi)放的互聯(lián)網(wǎng)技術(shù),以服務(wù)為中心的計(jì)算環(huán)境,我們稱(chēng)之為"面向服務(wù)的計(jì)算環(huán)境"。
1.2.3 面向服務(wù)的計(jì)算環(huán)境
在面向服務(wù)的計(jì)算環(huán)境中,系統(tǒng)可以是高度分布、異構(gòu)的。它一般包括服務(wù)運(yùn)行時(shí)環(huán)境(Service Runtime)、服務(wù)總線(Service Integration Infrastructure)、服務(wù)網(wǎng)關(guān)(Service Gateway)、服務(wù)注冊(cè)庫(kù)(Service Registry)和服務(wù)組裝引擎(Service Choreography Engine)等,如圖1-1所示。
服務(wù)運(yùn)行時(shí)環(huán)境提供服務(wù)(和服務(wù)組件)的部署、運(yùn)行和管理能力,支持服務(wù)編程模型,保證系統(tǒng)的安全和性能等質(zhì)量要素;服務(wù)總線提供服務(wù)中介的能力,使得服務(wù)使用者能夠以技術(shù)透明和位置透明的方式來(lái)訪問(wèn)服務(wù);服務(wù)注冊(cè)庫(kù)支持存儲(chǔ)和訪問(wèn)服務(wù)的描述信息,是實(shí)現(xiàn)服務(wù)中介、管理服務(wù)的重要基礎(chǔ);而服務(wù)組裝引擎,則將服務(wù)組裝為服務(wù)流程,完成一個(gè)業(yè)務(wù)過(guò)程;服務(wù)網(wǎng)關(guān)用于在不同服務(wù)計(jì)算環(huán)境的邊界進(jìn)行服務(wù)翻譯,比如安全。
面向服務(wù)的計(jì)算環(huán)境是開(kāi)放的、標(biāo)準(zhǔn)的,由如圖1-2所示的技術(shù)標(biāo)準(zhǔn)協(xié)議棧所定義和支持。例如,Transport層的HTTP協(xié)議,Service Description層的WSDL,Business Process層的WS-CDL等,與Policy相關(guān)的WS-Policy。本書(shū)后面的章節(jié)將討論所有統(tǒng)稱(chēng)為WS-*的標(biāo)準(zhǔn)和協(xié)議。
圖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)整合:將人、過(guò)程、應(yīng)用和數(shù)據(jù)全面整合起來(lái)。
(2)虛擬化:將分布、異構(gòu)的物理資源(服務(wù)器、存儲(chǔ)設(shè)備等)整合起來(lái),呈現(xiàn)為統(tǒng)一的邏輯對(duì)象,以安全和可管理的方式供使用。
(3)自主計(jì)算:如同生物體一樣,系統(tǒng)具備一些高級(jí)生物系統(tǒng)的能力,包括自我診斷和修復(fù)問(wèn)題,自動(dòng)配置和調(diào)整以適應(yīng)環(huán)境的變化,自動(dòng)優(yōu)化資源的使用效率、增強(qiáng)工作負(fù)荷的處理的能力,自我保護(hù)數(shù)據(jù)和信息的安全。
(4)開(kāi)放標(biāo)準(zhǔn):整個(gè)環(huán)境建立在開(kāi)放的標(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ù)來(lái)介紹在J2EE平臺(tái)上實(shí)現(xiàn)的服務(wù)計(jì)算環(huán)境。
主機(jī)通過(guò)增加對(duì)互聯(lián)網(wǎng)技術(shù)和標(biāo)準(zhǔn)的支持,來(lái)創(chuàng)建主機(jī)上的面向服務(wù)計(jì)算環(huán)境。比如IBM的CICS 3.1,提供了SOAP和Web服務(wù)的支持,可以將主機(jī)上的應(yīng)用以Web服務(wù)的方式提供出來(lái),供消費(fèi)者使用。
多年來(lái),IT界的主要技術(shù)提供者,一直攜手努力定義和推動(dòng)Web服務(wù)的相關(guān)標(biāo)準(zhǔn),并且在主要的幾個(gè)計(jì)算平臺(tái)上實(shí)現(xiàn)了高度兼容,包括.NET,J2EE和開(kāi)源平臺(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提供訪問(wèn)已有應(yīng)用或遺留系統(tǒng)的能力,將已有系統(tǒng)中的功能和信息轉(zhuǎn)化為服務(wù),IBM提供了訪問(wèn)不同系統(tǒng)的適配器和相應(yīng)的框架來(lái)幫助轉(zhuǎn)化。Business App Services指那些通過(guò)新的計(jì)算平臺(tái)J2EE(如IBM的WebSphere Application Server)來(lái)實(shí)現(xiàn)的新應(yīng)用,它們所實(shí)現(xiàn)的功能和信息也都轉(zhuǎn)化為服務(wù)提供出來(lái)。Partner Service指那些來(lái)自合作伙伴的服務(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ù)對(duì)象來(lái)訪問(wèn)。Process Service是指把多個(gè)服務(wù)聚合成為一個(gè)服務(wù)流程對(duì)應(yīng)業(yè)務(wù)過(guò)程的服務(wù),這種復(fù)合服務(wù)通常是長(zhǎng)時(shí)間運(yùn)行的過(guò)程。Interaction Service是把人的活動(dòng),通過(guò)人機(jī)交互以服務(wù)的方式出現(xiàn)在整個(gè)業(yè)務(wù)過(guò)程中,作為Process Service中的一部分。
在面向服務(wù)計(jì)算環(huán)境中,企業(yè)服務(wù)總線處于非常重要的位置,它提供服務(wù)的中介,解耦服務(wù)請(qǐng)求者和服務(wù)提供者,是服務(wù)計(jì)算環(huán)境中的核心。 ESB是過(guò)去消息中間件的發(fā)展,采用了"總線"這樣一種模式來(lái)管理和簡(jiǎn)化應(yīng)用之間的集成拓?fù)浣Y(jié)構(gòu),以廣為接受的開(kāi)放標(biāo)準(zhǔn)為基礎(chǔ)來(lái)支持應(yīng)用之間在消息、事件和服務(wù)級(jí)別上的動(dòng)態(tài)互聯(lián)互通。
ESB的基本特征和能力包括:描述服務(wù)的元數(shù)據(jù)和服務(wù)注冊(cè)管理;在服務(wù)請(qǐng)求者和提供者之間傳遞數(shù)據(jù)及對(duì)這些數(shù)據(jù)進(jìn)行轉(zhuǎn)換的能力,并支持由實(shí)踐中總結(jié)出來(lái)的一些模式如同步模式,異步模式等;發(fā)現(xiàn)、路由、匹配和選擇的能力,以支持服務(wù)之間的動(dòng)態(tài)交互,解耦服務(wù)請(qǐng)求者和服務(wù)提供者。高級(jí)一些的能力,包括對(duì)安全的支持、服務(wù)質(zhì)量保證、可管理性和負(fù)載平衡等。
ESB所提供的基于標(biāo)準(zhǔn)的連接服務(wù),將應(yīng)用中實(shí)現(xiàn)的功能或者數(shù)據(jù)資源,轉(zhuǎn)化為服務(wù)請(qǐng)求者能以標(biāo)準(zhǔn)的方式來(lái)訪問(wèn)的服務(wù);當(dāng)請(qǐng)求者來(lái)請(qǐng)求一個(gè)服務(wù)時(shí),ESB中這種中介轉(zhuǎn)化過(guò)程可能簡(jiǎn)單到什么也沒(méi)有,也可能要很復(fù)雜的中介服務(wù)支持,包括動(dòng)態(tài)地查找、選擇一個(gè)服務(wù),消息的傳遞、路由和轉(zhuǎn)換、協(xié)議的轉(zhuǎn)換。這種中介過(guò)程,是ESB借助于服務(wù)注冊(cè)管理及問(wèn)題域相關(guān)的知識(shí)(如業(yè)務(wù)方面的一些規(guī)則等)自動(dòng)進(jìn)行的,不需要服務(wù)請(qǐng)求者和提供者介入,從而實(shí)現(xiàn)了解耦服務(wù)請(qǐng)求者和提供者的技術(shù)基礎(chǔ)。這使得服務(wù)請(qǐng)求者不需要關(guān)心服務(wù)提供者的位置和具體實(shí)現(xiàn)技術(shù),雙方在保持接口不變的情況下,各自可以獨(dú)立地演變。
所以,ESB采用總線結(jié)構(gòu)模式簡(jiǎn)化了應(yīng)用之間的集成拓?fù)洌ㄟ^(guò)源自實(shí)踐的模式,提供了基于標(biāo)準(zhǔn)的通用連接服務(wù),使得服務(wù)請(qǐng)求者和服務(wù)提供者之間可以以松散耦合、動(dòng)態(tài)的方式交互,從而在不同層次上使得SOA解決方案是一個(gè)松散耦合、靈活的架構(gòu)。
需要注意的是,ESB是一種架構(gòu)模式,不能簡(jiǎn)單地等同于特定的技術(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,支持用戶(hù)以圖形界面的方式來(lái)完成相關(guān)的開(kāi)發(fā)任務(wù),如發(fā)布服務(wù)、使用各種模式、轉(zhuǎn)換消息和定義路由等。
1.2.5 面向服務(wù)的編程模型:服務(wù)組件架構(gòu)(SCA)和服務(wù)數(shù)據(jù)對(duì)象(SDO)
為了促進(jìn)面向服務(wù)應(yīng)用的開(kāi)發(fā),IT公司聯(lián)合起來(lái),在2005年11月發(fā)布了服務(wù)組件架構(gòu)(Service Component Architecture)和服務(wù)數(shù)據(jù)對(duì)象(Service Data Object)規(guī)范,這些公司包括IBM,BEA,Oracle,SAP等。
SCA的目標(biāo)是大大地簡(jiǎn)化服務(wù)開(kāi)發(fā),直接采用Web服務(wù)和XML開(kāi)發(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ù)對(duì)象擁有清晰定義的信息模型,獨(dú)立于數(shù)據(jù)源和具體數(shù)據(jù)訪問(wèn)技術(shù),使得服務(wù)訪問(wèn)數(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ì)原則
軟件開(kāi)發(fā)一直是一件很難的事情,因?yàn)槲覀円幚淼膯?wèn)題越來(lái)越復(fù)雜,人們處理這種復(fù)雜性最主要的手段就是抽象。回顧歷史,我們的抽象層次越來(lái)越高,反映在各個(gè)方面,從編程語(yǔ)言、平臺(tái)、開(kāi)發(fā)過(guò)程、工具到模式。尤其是模式,大量出現(xiàn)在那些結(jié)構(gòu)上設(shè)計(jì)得很好的軟件系統(tǒng)中,無(wú)論是微觀層次上(對(duì)象、組件)穩(wěn)定出現(xiàn)的結(jié)構(gòu)范式,還是在宏觀層面上出現(xiàn)的架構(gòu)模式。使用哪些抽象手段來(lái)為問(wèn)題域建模?如何定義組成部分之間的協(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ì)原則,來(lái)自實(shí)踐的結(jié)構(gòu)式樣、組成要素和關(guān)系,以及在整個(gè)開(kāi)發(fā)生命周期中它們是如何被識(shí)別、描述和控制的。體系結(jié)構(gòu)從過(guò)去單個(gè)應(yīng)用包羅一切的客戶(hù)/服務(wù)器的模式,逐漸演變到三層和多層結(jié)構(gòu)的各種分布式計(jì)算模式。今天,人們開(kāi)始談?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ǔ)上來(lái)實(shí)現(xiàn)?如圖1-6所示是IBM總結(jié)的SOA架構(gòu)概念模式。
SOA架構(gòu)中,繼承了來(lái)自對(duì)象和組件設(shè)計(jì)的各種原則,如封裝、自我包含等。那些保證服務(wù)的靈活性、松散耦合和重用能力的設(shè)計(jì)原則,對(duì)SOA架構(gòu)來(lái)說(shuō)同樣是非常重要的。
結(jié)構(gòu)上,服務(wù)總線是SOA的架構(gòu)模式之一。
關(guān)于服務(wù),一些常見(jiàn)和討論的設(shè)計(jì)原則如下:
(1)無(wú)狀態(tài)。以避免服務(wù)請(qǐng)求者依賴(lài)于服務(wù)提供者的狀態(tài)。
(2)單一實(shí)例。避免功能冗余。
圖1-5 SOA中的重要抽象手段
圖1-6 SOA的概念架構(gòu)模式
(3)明確定義的接口。服務(wù)的接口由WSDL定義,用于指明服務(wù)的公共接口與其內(nèi)部專(zhuān)用實(shí)現(xiàn)之間的界線。WS-Policy用于描述服務(wù)規(guī)約,XML模式(Schema)用于定義所交換的消息格式(即服務(wù)的公共數(shù)據(jù))。使用者依賴(lài)服務(wù)規(guī)約來(lái)調(diào)用服務(wù),所以服務(wù)定義必須長(zhǎng)時(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)程過(guò)程調(diào)用(RPC),通常消息量比較大,但是服務(wù)之間的交互頻度較低。
(6)服務(wù)之間的松耦合性。服務(wù)使用者看到的是服務(wù)的接口,其位置、實(shí)現(xiàn)技術(shù)、當(dāng)前狀態(tài)等對(duì)使用者是不可見(jiàn)的,服務(wù)私有數(shù)據(jù)對(duì)服務(wù)使用者是不可見(jiàn)的。
(7)重用能力。服務(wù)應(yīng)該是可以重用的。
(8)互操作性、兼容和策略聲明。為了確保服務(wù)規(guī)約的全面和明確,策略成為一個(gè)越來(lái)越重要的方面。這可以是技術(shù)相關(guān)的內(nèi)容,比如一個(gè)服務(wù)對(duì)安全性方面的要求;也可以是跟業(yè)務(wù)有關(guān)的語(yǔ)義方面的內(nèi)容,比如需要滿(mǎn)足的費(fèi)用或者服務(wù)級(jí)別方面的要求,這些策略對(duì)于服務(wù)在交互時(shí)是非常重要的。WS- Policy用于定義可配置的互操作語(yǔ)義,來(lái)描述特定服務(wù)的期望、控制其行為。在設(shè)計(jì)時(shí),應(yīng)該利用策略聲明確保服務(wù)期望和語(yǔ)義兼容性方面的完整和明確。
1.4 軟件工程的演變和面向服務(wù)體系結(jié)構(gòu)
軟件工程方法和過(guò)程伴隨著軟件實(shí)踐不斷發(fā)展。軟件危機(jī)發(fā)生之后,從瀑布模型、原型方法等講究過(guò)程、文檔密集、控制較多的方法,逐漸發(fā)展到輕量級(jí)、敏捷和迭代的方法。這些方法更加人性化,避免因?yàn)檫^(guò)重的過(guò)程而扼殺人的主動(dòng)性和創(chuàng)造性。這些方法更強(qiáng)調(diào)快速地交付對(duì)客戶(hù)有價(jià)值的軟件、直接的溝通、持續(xù)集成和持續(xù)質(zhì)量保證。
SOA和當(dāng)前軟件工程過(guò)程的一個(gè)共同交叉點(diǎn)就是業(yè)務(wù)價(jià)值驅(qū)動(dòng)(Business Centric),強(qiáng)調(diào)速度。SOA從軟件的靈活性和重用能力入手,而敏捷過(guò)程則從軟件交付效率出發(fā)。
SOA的架構(gòu)特性,使得敏捷過(guò)程非常適合SOA項(xiàng)目的實(shí)施。在SOA架構(gòu)中,服務(wù)的獨(dú)立性,使得每個(gè)服務(wù)可以被單獨(dú)地開(kāi)發(fā)、測(cè)試和集成。一個(gè)企業(yè)中的IT系統(tǒng),如果是基于SOA的計(jì)算環(huán)境,那么這個(gè)環(huán)境就是一個(gè)服務(wù)的生態(tài)系統(tǒng),每開(kāi)發(fā)一個(gè)服務(wù),馬上就可以獨(dú)立部署,成為這個(gè)生態(tài)系統(tǒng)中的一部分。這樣既很好地支持了持續(xù)集成、持續(xù)質(zhì)量保證,又很好地使得這個(gè)服務(wù)馬上產(chǎn)生業(yè)務(wù)價(jià)值,而不是苦等其他服務(wù)的到位。服務(wù)的特性,使得敏捷過(guò)程和SOA架構(gòu)可以有一個(gè)很好的結(jié)合,讓二者相得益彰。以我們與不同客戶(hù)合作的實(shí)踐,我們已經(jīng)充分體會(huì)到這二者在實(shí)現(xiàn)過(guò)程中的風(fēng)險(xiǎn)控制、業(yè)務(wù)需求改變的適應(yīng)能力方面相互配合的好處。比如我們?cè)谥羞h(yuǎn)集運(yùn),從瀑布過(guò)程轉(zhuǎn)向了迭代的開(kāi)發(fā)過(guò)程,采用了敏捷方法的原則。
在韓國(guó)的項(xiàng)目里,我們的團(tuán)隊(duì)來(lái)自IBM中國(guó),IBM韓國(guó)及韓國(guó)客戶(hù)自己的工程師,分處漢城和北京兩個(gè)地方,這些工程師怎樣協(xié)作才能很快地交付高質(zhì)量的系統(tǒng)而不相互牽扯?對(duì)于北京的工程師,北京的團(tuán)隊(duì)無(wú)法復(fù)制客戶(hù)在漢城的已有系統(tǒng),如何測(cè)試自己開(kāi)發(fā)的服務(wù)?通過(guò)服務(wù)建模,系統(tǒng)被分解為若干相互獨(dú)立的服務(wù),我們將那些要重用已有系統(tǒng)來(lái)實(shí)現(xiàn)的服務(wù)交給漢城的隊(duì)員,其他的交給北京的隊(duì)員,并且要求每個(gè)服務(wù)開(kāi)發(fā)人員提供一個(gè)簡(jiǎn)單的"偽"實(shí)現(xiàn)(Mock Service)。一開(kāi)始,這些簡(jiǎn)單實(shí)現(xiàn)被部署在北京和漢城的測(cè)試環(huán)境中,然后各個(gè)服務(wù)開(kāi)發(fā)小組開(kāi)始各自獨(dú)立地開(kāi)發(fā)自己所負(fù)責(zé)的服務(wù),而流程開(kāi)發(fā)人員也在同一時(shí)間開(kāi)始開(kāi)發(fā)他的流程,不過(guò)所基于的服務(wù)是在那些簡(jiǎn)單實(shí)現(xiàn)之上,但是這些簡(jiǎn)單實(shí)現(xiàn)足以支持有意義的單元和集成測(cè)試。隨后,一旦某個(gè)服務(wù)被實(shí)現(xiàn),它就被部署到實(shí)際的環(huán)境中,通過(guò)調(diào)整ESB的服務(wù)中介配置,對(duì)此服務(wù)的請(qǐng)求被路由到真實(shí)實(shí)現(xiàn)。一旦真實(shí)實(shí)現(xiàn)有問(wèn)題,還可以換回簡(jiǎn)單實(shí)現(xiàn),以避免影響其他服務(wù)、流程的單元和集成測(cè)試。這種靈活性帶來(lái)的隨時(shí)開(kāi)發(fā)、隨時(shí)部署、隨時(shí)集成和測(cè)試對(duì)于采用敏捷過(guò)程是非常有利的。

 |

|
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ù)注冊(cè)庫(kù)、服務(wù)網(wǎng)關(guān)和流程引擎。通常,還會(huì)包括服務(wù)管理、業(yè)務(wù)活動(dòng)監(jiān)控(Business Activity Monitoring)和業(yè)務(wù)績(jī)效管理(Business Performance Management,BPM)。另外,在服務(wù)建模、開(kāi)發(fā)和編排服務(wù)等方面,我們需要相應(yīng)的工具來(lái)支持。在分析、設(shè)計(jì)方面,我們需要基于服務(wù)的分析、設(shè)計(jì)方法,就是我們通常說(shuō)的服務(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ù)的最主要手段。我們首先來(lái)了解跟Web Service相關(guān)的標(biāo)準(zhǔn),它們大多以"WS-"作為名字的前綴,所以統(tǒng)稱(chēng)WS-*。 Web服務(wù)最基本的協(xié)議包括UDDI,WSDL和SOAP,通過(guò)它們,我們可以提供直接而又簡(jiǎn)單的Web Service支持,如圖1-7所示。
但是基本協(xié)議無(wú)法保證企業(yè)計(jì)算需要的安全性和可靠性,所以我們需要增加這方面的協(xié)議,比如WS-Security,WS-Reliability和WS-ReliableMessaging;對(duì)于復(fù)雜的業(yè)務(wù)場(chǎng)景,我們需要WS-BPEL和WS-CDL這樣的語(yǔ)言來(lái)將多個(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ù)的接受情況
posted on 2007-11-05 12:05
白切面片 閱讀(367)
評(píng)論(0) 編輯 收藏