學(xué)習(xí)和研究在企業(yè)中實(shí)施面向服務(wù)架構(gòu)(SOA),簡單回顧SOA和ESB,重點(diǎn)關(guān)注微軟在SOA領(lǐng)域的相關(guān)指導(dǎo)和.NET社區(qū)的相關(guān)開源的解決方案,和大家一起來探討如何在企業(yè)里實(shí)現(xiàn)SOA,期望有實(shí)施SOA經(jīng)驗(yàn)的同學(xué)發(fā)表意見。
一、SOA的歷史
1996年,Gartner最早提出SOA。2002年12月,Gartner提出SOA是"現(xiàn)代應(yīng)用開發(fā)領(lǐng)域最重要的課題",SOA并不是一個(gè)新事 物,IT組織已經(jīng)成功建立并實(shí)施SOA應(yīng)用軟件很多年了,BEA、IBM、等廠商看到了它的價(jià)值,紛紛跟進(jìn)。SOA的目標(biāo)在于讓IT變得更有彈性,以更快 地響應(yīng)業(yè)務(wù)單位的需求,實(shí)現(xiàn)實(shí)時(shí)企業(yè)(Real-Time Enterprise,這是Gartner為SOA描述的愿景目標(biāo))。而BEA的CIO Rhonda早在2001年6月就提出要將BEA的IT基礎(chǔ)架構(gòu)轉(zhuǎn)變?yōu)镾OA,并且從對整個(gè)企業(yè)架構(gòu)的控制能力、提升開發(fā)效率、加快開發(fā)速度、降低在客戶 化和人員技能的投入等方面取得了不錯(cuò)的成績。
SOA是在計(jì)算環(huán)境下設(shè)計(jì)、開發(fā)、應(yīng)用、管理分散的邏輯(服務(wù))單元的一種規(guī)范。這個(gè)定義決定了SOA的廣泛性。SOA要求開發(fā)者從服務(wù)集成的 角度來設(shè)計(jì)應(yīng)用軟件,即使這么做的利益不會(huì)馬上顯現(xiàn)。SOA要求開發(fā)者超越應(yīng)用軟件來思考,并考慮復(fù)用現(xiàn)有的服務(wù),或者檢查如何讓服務(wù)被重復(fù)利用。SOA 鼓勵(lì)使用可替代的技術(shù)和方法(例如消息機(jī)制),通過把服務(wù)聯(lián)系在一起而非編寫新代碼來構(gòu)架應(yīng)用。經(jīng)過適當(dāng)構(gòu)架后,這種消息機(jī)制的應(yīng)用允許公司僅通過調(diào)整原 有服務(wù)模式而非被迫進(jìn)行大規(guī)模新的應(yīng)用代碼的開發(fā),使得在商業(yè)環(huán)境許可的時(shí)間內(nèi)對變化的市場條件做出快速的響應(yīng)。
SOA也不僅僅是一種開發(fā)的方法論--它還包含管理。例如,應(yīng)用SOA后,管理者可以方便的管理這些搭建在服務(wù)平臺(tái)上的企業(yè)應(yīng)用,而不 是管理單一的應(yīng)用模塊。其原理是,通過分析服務(wù)之間的相互調(diào)用,SOA使得公司管理人員方便的拿到什么時(shí)候、什么原因、哪些商業(yè)邏輯被執(zhí)行的數(shù)據(jù)信息,這 樣就幫助了企業(yè)管理人員或應(yīng)用架構(gòu)師迭代地優(yōu)化他們的企業(yè)業(yè)務(wù)流程、應(yīng)用系統(tǒng)。
SOA的一個(gè)中心思想就是使得企業(yè)應(yīng)用擺脫面向技術(shù)的解決方案的束縛,輕松應(yīng)對企業(yè)商業(yè)服務(wù)變化、發(fā)展的需要。企業(yè)環(huán)境中單個(gè)應(yīng)用程序 是無法包容業(yè)務(wù)用戶的(各種)需求的,即使是一個(gè)大型的ERP解決方案,仍然不能滿足這個(gè)需求在不斷膨脹、變化的缺口,對市場快速做出反應(yīng),商業(yè)用戶只能 通過不斷開發(fā)新應(yīng)用、擴(kuò)展現(xiàn)有應(yīng)用程序來艱難的支撐其現(xiàn)有的業(yè)務(wù)需求。通過將注意力放在服務(wù)上,應(yīng)用程序能夠集中起來提供更加豐富、目的性更強(qiáng)的商業(yè)流 程。其結(jié)果就是,基于SOA的企業(yè)應(yīng)用系統(tǒng)通常會(huì)更加真實(shí)地反映出與業(yè)務(wù)模型的結(jié)合。服務(wù)是從業(yè)務(wù)流程的角度來看待技術(shù)的--這是從上向下看的。這種角度 同一般的從可用技術(shù)所驅(qū)動(dòng)的商業(yè)視角是相反的。服務(wù)的優(yōu)勢很清楚:它們會(huì)同業(yè)務(wù)流程結(jié)合在一起,因此能夠更加精確地表示業(yè)務(wù)模型、更好地支持業(yè)務(wù)流程。相 反我們可以看到以應(yīng)用程序?yàn)橹行牡钠髽I(yè)應(yīng)用模型迫使業(yè)務(wù)用戶將其能力局限為應(yīng)用程序的能力。
企業(yè)流程(enterprise process)是流經(jīng)企業(yè)框架的空氣,它賦予業(yè)務(wù)模型里的組件以生命,并更加清晰地定義了它們之間的關(guān)系。流程定義了同業(yè)務(wù)模型進(jìn)行交互操作的專門方 法。例如,會(huì)計(jì)可能是企業(yè)服務(wù)系統(tǒng)的一個(gè)組件--但是將發(fā)票寄給客戶卻是一個(gè)業(yè)務(wù)流程。服務(wù)被定義用來支持業(yè)務(wù)流程,因而貫穿整個(gè)流程始終的是:各種服務(wù) 組件在流程和邏輯實(shí)現(xiàn)過程中的裝配操作。理解業(yè)務(wù)流程是定制服務(wù)的關(guān)鍵所在。
二、SOA 的描述所適用的原則
- 利用顯式的與實(shí)現(xiàn)無關(guān)的接口來定義服務(wù)。
- 利用強(qiáng)調(diào)位置透明性和可互操作性的通信協(xié)議。
- 封裝可重用業(yè)務(wù)功能的服務(wù)的定義。
圖 1說明了這些原則。注意,雖然 Web 服務(wù)技術(shù)非常符合這些原則,但它并不是唯一符合這些原則的技術(shù)。
為了實(shí)現(xiàn) SOA,應(yīng)用程序和基礎(chǔ)架構(gòu)都必須支持 SOA 原則。啟用 SOA 應(yīng)用程序涉及到創(chuàng)建服務(wù)接口,服務(wù)接口可以直接也可以間接地通過使用適配器用于現(xiàn)有的或新的功能。從最基本的級別來看,啟用該基礎(chǔ)架構(gòu)涉及到規(guī)劃功能來將服務(wù)請求路由和傳遞給正確的服務(wù)提供者。然而,基礎(chǔ)架構(gòu)支持在不影響服務(wù)的客戶端的情況下由另一個(gè)服務(wù)實(shí)現(xiàn)替代原有的服務(wù)實(shí)現(xiàn)也是至關(guān)重要的。這不僅需要根據(jù) SOA 原則指定服務(wù)接口,而且需要基礎(chǔ)架構(gòu)允許客戶端代碼以獨(dú)立于所涉及的服務(wù)位置和通信協(xié)議的方式來調(diào)用服務(wù)。
三、ESB是什么?
根據(jù)維基百科的ESB定義,ESB有如下特性:
- 它是面向服務(wù)架構(gòu)的實(shí)現(xiàn)。
- 它通常是操作系統(tǒng)和編程語言無關(guān)的;它應(yīng)能在Java和.Net應(yīng)用程序之間工作。
- 它使用XML(可擴(kuò)展標(biāo)識(shí)語言)作為標(biāo)準(zhǔn)通信語言。
- 它支持Web服務(wù)標(biāo)準(zhǔn)。
- 它支持消息傳遞(同步、異步、點(diǎn)對點(diǎn)、發(fā)布-訂閱)。
- 它包含基于標(biāo)準(zhǔn)的適配器(如J2C/JCA),用于集成傳統(tǒng)系統(tǒng)。
- 它包含對服務(wù)編制(orchestration)和編排(choreography)的支持。
- 它包含智能、基于內(nèi)容的路由服務(wù)(itenerary路由)。
- 它包含標(biāo)準(zhǔn)安全模型,用于ESB的認(rèn)證、授權(quán)和審計(jì)。
- 它包含轉(zhuǎn)換服務(wù)(通常是使用XSLT),在發(fā)送應(yīng)用和接收應(yīng)用之間轉(zhuǎn)換格式,簡化數(shù)據(jù)格式和值的轉(zhuǎn)換。
- 它包含基于模式(schema)的驗(yàn)證,用于發(fā)送和接收消息。
- 它可以統(tǒng)一應(yīng)用業(yè)務(wù)規(guī)則,充實(shí)其它來源的消息,分拆和組合多個(gè)消息,以及處理異常。
- 它可以條件路由,或基于非集中策略的消息轉(zhuǎn)換,即不需要集中規(guī)則引擎。
- 它可監(jiān)視不同SLA(服務(wù)級別合約)的消息響應(yīng)門限,以及在SLA中定義的其它特性。
- 它(常常)簡化“服務(wù)類別”,向更高或更低優(yōu)先級用戶做出適當(dāng)?shù)捻憫?yīng)。
- 它支持隊(duì)列,在應(yīng)用臨時(shí)不可用時(shí)用來保存消息。
- 它由(地理)分布式環(huán)境中的選擇性部署應(yīng)用適配器組成
對于其中一些廠商(IBM、微軟)來說,ESB是將一系列能力聯(lián)結(jié)在一起的一種模式,而其他廠商認(rèn)為ESB是一種產(chǎn)品。在2005年,微軟Identity Platform的產(chǎn)品經(jīng)理Rich Turner寫道:
ESB[產(chǎn)品]是一根聰明的管子,用來連接各個(gè)愚笨的節(jié)點(diǎn)。[……]Web Service的途徑讓節(jié)點(diǎn)本身也變得聰明,減少了對底下聰明管道的需要,并確保了跨越任何平臺(tái)與設(shè)備的開放的通訊。