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

 |

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