遷移到面向服務(wù)的體系結(jié)構(gòu),第 1 部分-----簡介和概述
這是一系列文章第一部分,這一系列文章旨在幫助您更好的理解面向服務(wù)的體系結(jié)構(gòu)(SOA)的價(jià)值,制訂出一個(gè)實(shí)際的計(jì)劃來評估您現(xiàn)在的基礎(chǔ)架構(gòu),并把它轉(zhuǎn)變成一個(gè)真正的面向服務(wù)的體系結(jié)構(gòu)。其目的在于,當(dāng)您讀完本文時(shí),您將理解為什么聲稱 SOA 是把現(xiàn)有資產(chǎn)帶到未來的最好的平臺(tái),同時(shí)也使得迅速而正確地開發(fā)未來的程序成為可能。另外,您將對在計(jì)劃這樣一次遷移的過程中主要考慮的事項(xiàng)有更好的理解。
開發(fā)面向服務(wù)的體系結(jié)構(gòu)的情況
在過去的40年里,軟件體系結(jié)構(gòu)試圖處理日益增長的軟件復(fù)雜性。但是,復(fù)雜性仍在繼續(xù)增加,傳統(tǒng)的體系結(jié)構(gòu)好像已經(jīng)達(dá)到了它們處理此類問題的極限。同時(shí),IT 組織的傳統(tǒng)需要仍然繼續(xù)存在;比如,需要對新的業(yè)務(wù)需求進(jìn)行快速的反應(yīng),需要不斷地減少業(yè)務(wù)中 IT 的成本,以及吸收、集成新的業(yè)務(wù)伙伴和新的客戶群。作為一個(gè)產(chǎn)業(yè),我們經(jīng)歷了能夠提供完全的分布式處理的多種計(jì)算體系結(jié)構(gòu)和能夠運(yùn)行在任何平臺(tái)上的編程語言,從而大大縮短了實(shí)現(xiàn)的時(shí)間表,我們還經(jīng)歷了無數(shù)的連接性產(chǎn)品,這些產(chǎn)品能夠更快更好地集成應(yīng)用程序。然而,我們還是沒有找到完全的解決方案。現(xiàn)在,業(yè)界提出面向服務(wù)的體系結(jié)構(gòu)(SOA)作為軟件體系結(jié)構(gòu)中下一個(gè)發(fā)展的階段來幫助 IT 組織滿足他們面臨的越來越多的復(fù)雜性的挑戰(zhàn)。可是,這種體系結(jié)構(gòu)現(xiàn)實(shí)嗎?即使它可以被概括和描述出來,它也能真的被實(shí)現(xiàn)嗎?本文的論點(diǎn)就是斷定 SOA 是現(xiàn)實(shí)的;在所有天花亂墜的宣傳塵埃落定之后,所有夸大的期望又回到了現(xiàn)實(shí)之中,您將發(fā)現(xiàn)至少現(xiàn)在 SOA 是 IT 組織可以將其現(xiàn)有的資產(chǎn)帶到未來同時(shí)又構(gòu)建新的應(yīng)用程序系統(tǒng)最好的基礎(chǔ)。這是一系列文章的第一部分,它旨在幫助您更好地理解面向服務(wù)的體系結(jié)構(gòu)(SOA)的價(jià)值,并且制訂出一個(gè)切實(shí)可行的計(jì)劃來評估您現(xiàn)有的基礎(chǔ)架構(gòu),然后將其遷移到一個(gè)真正的面向服務(wù)的體系結(jié)構(gòu)。
曾幾何時(shí),現(xiàn)有的 Web 服務(wù)技術(shù)刺激了關(guān)于面向服務(wù)的體系結(jié)構(gòu)(SOA)的討論。這個(gè)討論并不新鮮;從 CORBA 擴(kuò)展到在完全不同的異類平臺(tái)上應(yīng)用程序一直到現(xiàn)在,這個(gè)概念已經(jīng)發(fā)展10多年了。集成這樣的應(yīng)用程序的問題不斷出現(xiàn),通常是因?yàn)橛心敲炊嗖煌模ǚ?CORBA 兼容的)對象模型流行起來;因而,很多架構(gòu)師和工程師都陷入了解決此類問題的泥淖中,開發(fā)一種更健壯的體系結(jié)構(gòu)來實(shí)現(xiàn)簡單、快速和安全的系統(tǒng)和應(yīng)用程序集成的承諾并沒有兌現(xiàn)。然而,問題卻在繼續(xù)增加,并且日益復(fù)雜。基本的業(yè)務(wù)需求,諸如降低成本、減少開發(fā)周期、跨企業(yè)集成、企業(yè)到企業(yè)(B2B)和企業(yè)到顧客(B2C)集成、更大的投資回報(bào)率(ROI)、創(chuàng)建自適應(yīng)的和自響應(yīng)的業(yè)務(wù)模型等等,使我們不停地尋找更好的解決方案;但是,我們越來越覺得“點(diǎn)解決方案(point solutions)”不能解決這樣的基本問題。在很多情況下,問題在于缺乏一個(gè)一致的體系結(jié)構(gòu)框架,在這種體系結(jié)構(gòu)中,可以快速地開發(fā)、集成和重用應(yīng)用程序。更重要的是,我們需要一個(gè)這樣的體系結(jié)構(gòu)框架,它能夠裝配組件和服務(wù),以便快速甚至動(dòng)態(tài)地交付應(yīng)用程序。為什么像 Web 服務(wù)這樣的某種技術(shù)是好的,但是我們真正需要的是一種不受技術(shù)約束的體系結(jié)構(gòu),有很多文章對此進(jìn)行了討論。讓我們首先考慮一些基本的問題,這些問題是我們尋求更好的基礎(chǔ)的依據(jù),如何解決這些問題將決定我們工作的成敗。
一些事情總是相同的,特別是 IT 組織所面對的業(yè)務(wù)問題。公司管理層總是努力爭取更好地利用 IT、獲取更大的投資回報(bào)率(ROI)、集成歷史上分離的系統(tǒng)和更快地實(shí)現(xiàn)新系統(tǒng);但是時(shí)至今日,事情發(fā)生了些許變化。現(xiàn)在,您遇到的是更復(fù)雜的環(huán)境。必須重用而不是替換遺留系統(tǒng),因?yàn)榭紤]到更有限的預(yù)算,替換的成本是高昂的。您將發(fā)現(xiàn)費(fèi)用低廉、無處不在的 Internet 訪問使得建立一個(gè)全新的業(yè)務(wù)模型成為可能。公司至少需要評估這個(gè)模型,因?yàn)楦偁幨谷弧:喜⒑褪召彽脑鲩L已經(jīng)成為家常便飯,因此必須將整個(gè) IT 組織、應(yīng)用程序和基礎(chǔ)架構(gòu)集成和融合在一起。在這樣復(fù)雜的環(huán)境,點(diǎn)解決方案只會(huì)使問題進(jìn)一步惡化,而決不會(huì)引導(dǎo)我們走出重林。必須在一個(gè)以異構(gòu)為基礎(chǔ)的環(huán)境中開發(fā)系統(tǒng),因?yàn)樗鼈儽仨毴菁{種類繁多的硬件、操作系統(tǒng)、中間件、語言和數(shù)據(jù)存儲(chǔ)。長達(dá)數(shù)十年的發(fā)展和演化積累起來的影響導(dǎo)致了嚴(yán)重的復(fù)雜性。面對所有這些對 IT 業(yè)務(wù)的挑戰(zhàn),很多 CIO 將應(yīng)用程序集成作為首要任務(wù)也就不是令人驚訝的事情了,如 圖1所示。

考慮一個(gè)銀行有一些分離的“地窖”——在銀行內(nèi)不為其他系統(tǒng)所知的自包含應(yīng)用程序系統(tǒng)。這些應(yīng)用程序系統(tǒng)中的第一個(gè)可能是優(yōu)秀的設(shè)計(jì),同樣,第二個(gè)、第三個(gè)等等可能都是。但是每一個(gè)都是針對銀行中不同業(yè)務(wù)的,是單獨(dú)投資的孤立項(xiàng)目。因而,例如 獲取賬戶余額的功能在 ATM 系統(tǒng)、分行出納員交付系統(tǒng)、信用卡計(jì)分系統(tǒng)都是重復(fù)的,即便它們存取相同數(shù)據(jù)庫中的相同會(huì)計(jì)數(shù)據(jù)數(shù)據(jù)。現(xiàn)在,假設(shè)該銀行必須為客戶開發(fā) Internet 服務(wù)、在線銀行或在線貸款發(fā)放系統(tǒng)以保持競爭力,結(jié)果會(huì)怎么樣。新系統(tǒng)只會(huì)給已經(jīng)存在的冗余編程問題雪上加霜,除非通過某種方式使得現(xiàn)有的代碼可以重用。
同樣考慮 n(n-1)集成問題。任何組織都會(huì)碰到某些類型的集成問題;或許是因?yàn)橐淮喂镜暮喜ⅰ⒁粋€(gè)新的商業(yè)聯(lián)盟或者僅僅是需要互連現(xiàn)有的系統(tǒng)。如果 n 個(gè)應(yīng)用程序系統(tǒng)必須直接互連,那么將會(huì)產(chǎn)生 n(n-1) 個(gè)連接或接口。在 圖2中,每個(gè)箭頭表示一個(gè)接口。

因此,如果另一個(gè)應(yīng)用程序系統(tǒng) A(第 n+1 個(gè))必須集成進(jìn)來,將需要產(chǎn)生、文檔化、測試和維護(hù) 2n 個(gè)新的接口。雖然在上圖中,5個(gè)應(yīng)用程序組成的集合需要20個(gè)直接接口,但是添加第6個(gè)應(yīng)用程序?qū)⑿枰?0個(gè)新接口!而更糟的是,必須修改每個(gè)已有的應(yīng)用程序中的代碼以包括進(jìn)新的接口,因而將發(fā)生大量的測試費(fèi)用。您可以立即為 n 個(gè)應(yīng)用程序找到產(chǎn)生最小接口數(shù)目(n)的最優(yōu)解決方案,只為每個(gè)附加的系統(tǒng)添加一個(gè)新的接口,但是,通過直接連接是做不到的。
在過去的40多年來,軟件開發(fā)的實(shí)踐經(jīng)歷了幾個(gè)不同的編程模型。而進(jìn)行的每一次轉(zhuǎn)變在某種程度上都是為了處理更高級別的軟件復(fù)雜性,并且使得可以通過部件、組件或服務(wù)來裝配應(yīng)用程序。近來,Java 技術(shù)促成了平臺(tái)中立的編程,而 XML 促成了自描述,因而也促成了平臺(tái)中立的數(shù)據(jù)。現(xiàn)在,Web 服務(wù)通過允許應(yīng)用程序以對象模型中立的方式實(shí)現(xiàn)互連,從而克服了另一個(gè)障礙。使用簡單的基于 XML 的消息傳遞 Scheme,Java 應(yīng)用程序能夠調(diào)用基于 DCOM、遵循 CORBA 甚至是 COBOL 的應(yīng)用程序。在新加坡的一臺(tái)大型機(jī)上的 CICS 或 IMS 事務(wù)能夠被一臺(tái)在慕尼黑的 Domino 服務(wù)器上運(yùn)行的 Lotus 腳本驅(qū)動(dòng)的基于 COM 的應(yīng)用程序調(diào)用。最好的情況是,調(diào)用程序很有可能根本不知道該事務(wù)在哪里運(yùn)行、它是由哪種語言編寫的以及消息的傳輸路徑。只需提出服務(wù)請求,然后就會(huì)得到答案。
與其任何一個(gè)前身相比,Web 服務(wù)更有可能成為提供提供有效的、可靠的和可擴(kuò)展的機(jī)器到機(jī)器交互的標(biāo)準(zhǔn),這是幾個(gè)技術(shù)和文化上必須具備的先決條件適時(shí)結(jié)合的產(chǎn)物。這些先決條件包括:
- 無處不在的、開放標(biāo)準(zhǔn)的、低成本的網(wǎng)絡(luò)基礎(chǔ)架構(gòu)和技術(shù)。它有助于一個(gè)分布式環(huán)境的形成,這個(gè)環(huán)境更有利于采用 Web 服務(wù),而不是 CORBA 和 DCE
- 在一個(gè)以網(wǎng)絡(luò)為中心的領(lǐng)域內(nèi)達(dá)到的接受程度和技術(shù)成熟水平。它要求互操作性以實(shí)現(xiàn)關(guān)鍵的業(yè)務(wù)目標(biāo)(比如,分布式協(xié)作)
- 一致同意基于 Internet 的開放標(biāo)準(zhǔn)和相關(guān)技術(shù)是實(shí)現(xiàn)低成本互操作性的最好方法。
- 基于網(wǎng)絡(luò)的技術(shù)(比如 TCP/IP)、工具集(IDE、UML等等)、平臺(tái)(比如 J2EE 平臺(tái))和相關(guān)的方法(比如 OO、服務(wù)等等)的成熟水平。它們提供了簡化松散耦合的、可互操作的、機(jī)器到機(jī)器的交互(一種比 CORBA 用戶體驗(yàn)到的高級得多的狀態(tài))所需的基礎(chǔ)架構(gòu)。
面向服務(wù)的體系結(jié)構(gòu)允許設(shè)計(jì)這樣的軟件系統(tǒng),它通過發(fā)布的可發(fā)現(xiàn)的接口為其他的應(yīng)用程序提供服務(wù),而其中的服務(wù)可以通過網(wǎng)絡(luò)進(jìn)行調(diào)用。當(dāng)您用 Web 服務(wù)技術(shù)來實(shí)現(xiàn)面向服務(wù)的體系結(jié)構(gòu)時(shí),您是在一個(gè)更強(qiáng)大、更靈活的編程模型中創(chuàng)建一種新的構(gòu)建應(yīng)用程序的方式,從而降低開發(fā)成本、持有成本以及實(shí)現(xiàn)風(fēng)險(xiǎn)。SOA 既是體系結(jié)構(gòu)模型,又是編程模型,是一種考慮構(gòu)建軟件的方式。
然而,還有更重要的機(jī)會(huì)剛剛出現(xiàn)。其中第一個(gè)就是網(wǎng)格計(jì)算,網(wǎng)格計(jì)算不僅是使用擁有大量 MIPS 的應(yīng)用程序來進(jìn)行計(jì)算的解決方案,而且還將提供一個(gè)框架,通過此框架可以動(dòng)態(tài)地定位、重定位、平衡和管理大量的服務(wù),這樣,無論系統(tǒng)上的負(fù)載如何,總可以保證安全地獲取所需的應(yīng)用程序。而這又明顯地需要按需計(jì)算的概念(on-demand computing),按需計(jì)算可能是在任何配置下實(shí)現(xiàn)的,從簡單的服務(wù)器集群到有1024個(gè)節(jié)點(diǎn)的 SP2 網(wǎng)絡(luò)。用戶需要解決問題和適當(dāng)?shù)挠糜诮鉀Q問題的計(jì)算資源——不多也不少——并且為實(shí)際使用的資源付費(fèi)。
這些新功能的有效使用將需要重新構(gòu)造許多現(xiàn)有的應(yīng)用程序。現(xiàn)有的單一應(yīng)用程序能夠在這些環(huán)境中運(yùn)行,但沒有以最優(yōu)的方式來使用可用的資源。這個(gè)問題和先前討論過的問題一起可以產(chǎn)生如下結(jié)論:必須作出根本的改變——遷移到面向服務(wù)的體系結(jié)構(gòu)。
![]() ![]() |
![]()
|
根據(jù)上面討論的問題,可以很明顯地看出,應(yīng)該開發(fā)一種體系結(jié)構(gòu)來滿足所有的需求,這些需求包括:
- 首要的一點(diǎn)就是利用現(xiàn)有的資產(chǎn)。現(xiàn)有系統(tǒng)很少可以拋棄,它們通常都包含對于企業(yè)很有價(jià)值的東西。從戰(zhàn)略上講,目標(biāo)是構(gòu)造一個(gè)新的體系結(jié)構(gòu)來創(chuàng)造所有想要的價(jià)值,但是,從戰(zhàn)術(shù)上講,必須集成現(xiàn)有系統(tǒng),以便隨著時(shí)間的推移,可以在可管理、漸進(jìn)式項(xiàng)目中分化或取代它們。
- 支持所有必需的集成類型或“樣式”。這包括:
- 用戶交互——能夠提供單一的、交互式的用戶體驗(yàn)
- 應(yīng)用程序連接性——通信層構(gòu)成了所有體系結(jié)構(gòu)的基礎(chǔ)
- 流程集成——編排應(yīng)用程序和服務(wù)
- 信息集成——聯(lián)合和移動(dòng)企業(yè)數(shù)據(jù)
- 依集成需求而構(gòu)建——構(gòu)建和部署新的應(yīng)用程序和服務(wù)。
- 允許漸進(jìn)式實(shí)現(xiàn)和資產(chǎn)遷移——這將支持開發(fā)這種體系結(jié)構(gòu)的一個(gè)最關(guān)鍵的方面:獲得更大的投資回報(bào)率(ROI)的能力。數(shù)不清的集成項(xiàng)目由于它們的復(fù)雜性、成本和不切實(shí)際的實(shí)現(xiàn)進(jìn)度安排而失敗。
- 包括一個(gè)以標(biāo)準(zhǔn)的組件框架為基礎(chǔ)構(gòu)建的開發(fā)環(huán)境,促進(jìn)更好地重用模塊和系統(tǒng),允許將遺留資產(chǎn)轉(zhuǎn)移到這個(gè)框架中,并且考慮到新技術(shù)的及時(shí)實(shí)現(xiàn)。
- 允許實(shí)現(xiàn)新的計(jì)算模型;特別是,新的基于 Portal 的客戶端模型、網(wǎng)格計(jì)算和按需計(jì)算(on-demand computing)。
面向服務(wù)的體系結(jié)構(gòu)——不只是 Web 服務(wù)
Web 服務(wù)的出現(xiàn)產(chǎn)生了根本的改變,因?yàn)楹芏?Web 服務(wù)項(xiàng)目的成功顯示這種技術(shù)事實(shí)上確實(shí)存在,借此您可以實(shí)現(xiàn)真正的面向服務(wù)的體系結(jié)構(gòu)。它使您又往回走了一步,不僅分析您的應(yīng)用程序的體系結(jié)構(gòu),而且還要分析您正設(shè)法解決的基本業(yè)務(wù)問題。從業(yè)務(wù)的角度來看,它不再是一個(gè)技術(shù)問題,而是要開發(fā)一種應(yīng)用程序體系結(jié)構(gòu)和框架,可以在其中定義業(yè)務(wù)問題,還可以以一致的可重復(fù)的方式來實(shí)現(xiàn)解決方案。
不過,首先必須理解 Web 服務(wù)并不等同于 面向服務(wù)的體系結(jié)構(gòu)。Web 服務(wù)是包括 XML,SOAP,WSDL 和 UDDI 在內(nèi)的技術(shù)的集合,它使您能夠針對特定的消息傳遞和應(yīng)用程序集成問題構(gòu)建編程解決方案。隨著時(shí)間的推移,您有理由相信這些技術(shù)將逐漸成熟并最終為更好、更有效、更健壯的技術(shù)所取代,但是,就目前的情況而言,它們可以發(fā)揮作用。至少,它們是 SOAs 能夠最終實(shí)現(xiàn)這種觀念的證明。那么,面向服務(wù)的體系結(jié)構(gòu)實(shí)際上是由什么組成的呢?
SOA 只不過是一種體系結(jié)構(gòu)。它不是任何諸如 Web 服務(wù)這樣的特定技術(shù)的集合;而是超越它們的,在理想的情況下,是完全獨(dú)立于它們的。在業(yè)務(wù)環(huán)境中,SOA 的純粹的體系結(jié)構(gòu)定義可能會(huì)是這樣的“一種應(yīng)用程序體系結(jié)構(gòu),在這種體系結(jié)構(gòu)中,所有功能都定義為獨(dú)立的服務(wù),這些服務(wù)帶有定義明確的可調(diào)用接口,可以以定義好的順序調(diào)用這些服務(wù)來形成業(yè)務(wù)流程”。請注意這里的表述:
- 所有功能都定義為服務(wù)。這僅僅包括業(yè)務(wù)功能、由底層功能組成的業(yè)務(wù)事務(wù)和系統(tǒng)服務(wù)功能。這將會(huì)產(chǎn)生粒度問題,后面我們將對此進(jìn)行討論。
- 所有的服務(wù)都是獨(dú)立的。它們就像“黑匣子”一樣運(yùn)行:外部組件既不知道也不關(guān)心它們?nèi)绾螆?zhí)行它們的功能,而僅僅關(guān)心它們是否返回期望的結(jié)果。
- 在其最一般的意義上來說,接口是可調(diào)用的;也就是說,在體系結(jié)構(gòu)的層面上,它們究竟是本地的(在本系統(tǒng)內(nèi))還是遠(yuǎn)程的(在直接系統(tǒng)外)、是用什么互連 Scheme 或協(xié)議來調(diào)用或需要什么樣的基礎(chǔ)架構(gòu)組件來連接,都是無關(guān)緊要的。服務(wù)可能是在相同的應(yīng)用程序中,也可能是在公司內(nèi)部網(wǎng)內(nèi)完全不同的系統(tǒng)上的不對稱多處理器的不同地址空間中,還有可能是在用于 B2B 配置的合作伙伴的系統(tǒng)上的應(yīng)用程序中。
在所有這些表述中,接口是最關(guān)鍵的,同時(shí)也是調(diào)用應(yīng)用程序關(guān)注的焦點(diǎn)。它定義了必需的參數(shù)和結(jié)果的類型;因而,它定義了服務(wù)的類型,而不是實(shí)現(xiàn)服務(wù)的技術(shù)。系統(tǒng)的責(zé)任是實(shí)現(xiàn)和管理服務(wù)的調(diào)用,而不是調(diào)用應(yīng)用程序。這使得可以認(rèn)識(shí)到兩個(gè)關(guān)鍵的特征:其一,服務(wù)是真正獨(dú)立的;其二,它們是可以管理的。管理包括許多功能,其中有:
- 安全性——請求的授權(quán)、加密和解密(在需要時(shí))、確認(rèn)等等
- 部署——出于性能、可用性冗余或其他方面的原因,允許服務(wù)在網(wǎng)絡(luò)內(nèi)重新部署(移動(dòng))
- 日志——用于審核、測量等等
- 動(dòng)態(tài)重新路由——用于故障排除(fail over)或負(fù)載平衡
- 維護(hù)——管理服務(wù)的新版本
![]() ![]() |
![]()
|
在第一部分中,您已經(jīng)簡要地分析了一些導(dǎo)致需要考慮 SOA 的問題,這些需求寄希望于新的體系結(jié)構(gòu)。而在第二部分中,我們將研究服務(wù)的類型,構(gòu)造一個(gè)基于服務(wù)的組件的應(yīng)用程序框架和一些將來的計(jì)算環(huán)境,這些環(huán)境將使得 SOA 的開發(fā)更加勢在必行。
posted on 2006-04-17 02:44 wsdfsdf 閱讀(272) 評論(1) 編輯 收藏 引用 所屬分類: 技術(shù)文章