AJAX聯(lián)手SOA新一代Web2.0應(yīng)用程序
一、引言當(dāng)今,各個(gè)企業(yè)都在想方設(shè)法提高自己的生產(chǎn)效率,并且對(duì)IT資產(chǎn)的重組也都在努力的探索當(dāng)中。借助于面 向服務(wù)的架構(gòu)(SOA)技術(shù),IT組織已經(jīng)在克服這些問題方面取得了一定的成效;但是,在大多數(shù)情況下仍然只是實(shí)現(xiàn)了整個(gè)IT服務(wù)組合的一小部分。目前, 有關(guān)這方面的大多數(shù)的努力也只不過是達(dá)到一種“剛剛滿足”的SOA應(yīng)用狀況—在改進(jìn)構(gòu)建應(yīng)用程序的能力以及使之與市場的結(jié)合更快更好更為便宜方面。而且正 如我們已了解的,要實(shí)現(xiàn)這些目標(biāo)說起來容易做起來難。
二、傳統(tǒng)的基于中間件的復(fù)合應(yīng)用程序
現(xiàn)有的事實(shí)是,SOA是一種中間件—而傳統(tǒng)情況下,中間件往往要依賴于更多的中間件才能把數(shù)據(jù)翻譯成一 種消費(fèi)者友好的狀態(tài)。當(dāng)你最后搞清楚構(gòu)建一種融入SOA技術(shù)的復(fù)合應(yīng)用程序不僅要求使用一種portal(中間件)而且還有可能要使用一種BPEL引擎 (甚至還是中間件)對(duì)它進(jìn)行編排時(shí),這當(dāng)然使你非常失望。更糟糕的是,你有可能在一家發(fā)布UDDI注冊(cè)表和注冊(cè)大量Web服務(wù)的組織內(nèi)工作。但遺憾的是, 在大多數(shù)情況下,還存在極少的實(shí)際消費(fèi)這些服務(wù)的應(yīng)用程序。怎么會(huì)是這種情況呢?
難道如果無法構(gòu)建消費(fèi)這些SOA服務(wù)的應(yīng)用程序我們就該得出結(jié)論—什么東西出錯(cuò)了嗎?是否是因?yàn)闃I(yè)務(wù)內(nèi) 容開發(fā)者太難構(gòu)建這種直接消費(fèi)SOA服務(wù)的應(yīng)用程序從而導(dǎo)致只好由其它的IT組織為我們創(chuàng)建這樣的應(yīng)用程序呢?是否由于缺乏一種SOA監(jiān)管架構(gòu)從而使我們 猶豫不決?我想,我對(duì)上面所有問題的回答都是“是的”。而且存在一種非常突出的理由:僅由業(yè)務(wù)開發(fā)者消費(fèi)和利用這種由IT組織暴露的SOA服務(wù)實(shí)在是太難 了!其實(shí),真正存在的問題是缺乏一種容易的方法來在SOA上加入一種界面—而這正是把AJAX技術(shù)與SOA結(jié)合到一起的優(yōu)點(diǎn)所在。
典型情況下,SOA服務(wù)被實(shí)現(xiàn)為一種松耦合的封裝和暴露業(yè)務(wù)功能的Web服務(wù)。這聽起來似乎非常直接, 但是實(shí)現(xiàn)起來卻非常復(fù)雜和困難。開發(fā)者經(jīng)常在SOA服務(wù)的開發(fā)粒度方面討論不止;但是現(xiàn)在,大多數(shù)開發(fā)人員都一致認(rèn)為“業(yè)務(wù)級(jí)”的開發(fā)粒度是最合適的。然 而,這仍然需要大量的相關(guān)領(lǐng)域?qū)<壹尤氩⑶乙c業(yè)務(wù)內(nèi)容合作才能最終確定這些服務(wù)的大小。
三、SOA的復(fù)興
幸運(yùn)的是,最近人們又對(duì)SOA產(chǎn)生了深厚的興趣。也許企業(yè)最終意識(shí)到SOA確實(shí)能夠幫助給它們帶來巨大 幫助。也許這是由于更好的開發(fā)工具和在Amazon,Yahoo和eBay宣傳下的Web服務(wù)所致的緣故。也許它就是AJAX?不錯(cuò)—這也正是本人撰寫此 文之原因。認(rèn)真地說,我確實(shí)認(rèn)為正是AJAX成為更新人們對(duì)于SOA的重新認(rèn)識(shí)的一種重要的驅(qū)動(dòng)力量,特別是在當(dāng)今各種新技術(shù)混合應(yīng)用領(lǐng)域。但是,這兩種 迥然不同的技術(shù)應(yīng)該如何結(jié)合并連接到一起才能迸發(fā)出更巨大的力量呢?先讓我們來看一下Wikipedia對(duì)當(dāng)前AJAX技術(shù)的定義。其中涉及到了Web頁 面,但是根本沒有提及SOA。其中的描述是:
“AJAX,代表了‘異步JavaScript+XML’,是一種創(chuàng)建交互式Web應(yīng)用程序的Web開 發(fā)技術(shù)。其目的是,通過在后臺(tái)與服務(wù)器實(shí)現(xiàn)少量的數(shù)據(jù)交換從而使前端Web頁面感覺起來更具響應(yīng)性;因此,每當(dāng)用戶作出一個(gè)改變時(shí),不必重載整個(gè)Web頁 面。其最終目的是進(jìn)一步提高Web頁面的交互性、響應(yīng)速度及可用性。”
此定義中沒有提及SOA并不奇怪,因?yàn)樵缙诘腁JAX應(yīng)用主要集中在增強(qiáng)頁面的功能與可用性方面。這一 點(diǎn)已經(jīng)在眾多應(yīng)用程序,例如Google Maps,F(xiàn)lickr和Yahoo Mail,中得到證實(shí)。然而,并不是這些面向消費(fèi)者的應(yīng)用程序使我對(duì)AJAX的潛力感到激動(dòng),而是運(yùn)行于公司的防火墻背后的業(yè)務(wù)應(yīng)用程序真正利用了 AJAX中的優(yōu)點(diǎn),因?yàn)樗蛭覀冋故玖藘蓚€(gè)關(guān)鍵特征:一個(gè)是客戶端編程模型,另一個(gè)是對(duì)服務(wù)器進(jìn)行異步調(diào)用的易實(shí)現(xiàn)。這兩種關(guān)鍵能力—在客戶端(瀏覽器) 應(yīng)用邏輯的能力和在不打斷Web頁面的情況下存取服務(wù)器數(shù)據(jù)的能力,正是它們拓寬了構(gòu)建新的更為豐富的Web 2.0企業(yè)應(yīng)用程序的如此眾多的可能性應(yīng)用領(lǐng)域。
前面,我曾提及SOA缺乏一種界面。這也正是AJAX“介于”這其中的原因—它能夠給SOA加上一個(gè)體 面的外觀。在此,請(qǐng)讓我多作一些解釋。我們不妨考慮一下,如果SOA服務(wù)以在線方式出現(xiàn)的話,情況會(huì)怎么樣?這樣的服務(wù)通常需要在一個(gè)注冊(cè)表或倉庫中進(jìn)行 注冊(cè)(如果我們幸運(yùn)的話),然后就可以用于消費(fèi)。例如,我們不妨去看一下StrikeIron網(wǎng)站(www.StrikeIron.com)中所提供的內(nèi) 容。StrikeIron已經(jīng)成功地創(chuàng)建了一種針對(duì)普通大眾的“Web服務(wù)市場”。乍看起來,StrikeIron網(wǎng)站中的目錄機(jī)制很象一個(gè)小型業(yè)務(wù)應(yīng)用 程序中所提供的列表。但是稍后,你就會(huì)意識(shí)到這并不是一些應(yīng)用程序—它們實(shí)際上是一些Web服務(wù)。由一家公司針對(duì)廣大消費(fèi)者提供WSDL/REST Web服務(wù)的概念本身就蘊(yùn)含了多種意義。但是,現(xiàn)在先讓我們來看一下這家公司所出售的內(nèi)容。根據(jù)StrikeIron提供的信息(他們?cè)试S存取這些服 務(wù)),它提供的大多數(shù)流行的Web服務(wù)包括:
·美國地址校驗(yàn)
·全球短信服務(wù)
·銷售和使用稅
·電子郵件校驗(yàn)
·逆向電話查詢
毫無疑問,所有這些Web服務(wù)都相當(dāng)有用,而且能被應(yīng)用于許多不同的領(lǐng)域。但同時(shí),它們又太“商品 化”。換句話說,我可能并不在意是誰提供的這些服務(wù),而僅想得到我所希望的信息。另一方面,我會(huì)簡單地使用任何Web服務(wù)來實(shí)現(xiàn)把現(xiàn)金從我的經(jīng)常帳戶轉(zhuǎn)到 我的儲(chǔ)蓄帳戶嗎?我不會(huì)這么做的。我首先需要建立對(duì)這種服務(wù)的信任,因此,我必須與提供該服務(wù)的供應(yīng)商建立一定的關(guān)系。存在于我(消費(fèi)者)和服務(wù)提供者之 間的這種“信任圈”也正代表了企業(yè)內(nèi)部及其合伙企業(yè)之間的關(guān)系。
四、AJAX+SOA技術(shù)相結(jié)合
上面同樣的方式也可以為企業(yè)所采用,從而把他們的Web服務(wù)提供給更廣大的用戶群。通過一種Web服務(wù) 市場,企業(yè)可以注冊(cè)各種Web服務(wù)—而這些Web服務(wù)通常情況下僅能為企業(yè)內(nèi)部或合作伙伴所使用。市場供應(yīng)商顯然希望這種情況發(fā)生,但是更重要的是,我們 看到了一種機(jī)會(huì)—應(yīng)用AJAX+SOA技術(shù)來驅(qū)動(dòng)一類新的Web 2.0業(yè)務(wù)應(yīng)用程序。
第一次,人們開始感覺到應(yīng)用程序開發(fā)與SOA終于走到了一起。我們擁有通過可重用形式—SOA服務(wù)—加 以描述的業(yè)務(wù)功能。我們擁有無所不在的連接—Web。我們擁有正在被證明成為新的應(yīng)用程序容器的瀏覽器。我們?cè)谶@類應(yīng)用程序容器/瀏覽器中擁有一種編程模 型—JavaScript。并且它們使用的都是開放式標(biāo)準(zhǔn)!我們還要求什么呢?其實(shí),還有其它一些內(nèi)容。
我特別希望看到一種更快的基于所有以上技術(shù)的開發(fā)應(yīng)用程序的方案—一種不必再依賴于與SOA服務(wù)集成到 一起的中間件即可構(gòu)建應(yīng)用程序的方法。這正是我所期望的Web應(yīng)用程序的能力—“直接連接SOA”。這種“直接連接SOA”應(yīng)該能夠穿過傳統(tǒng)型門戶屏障以 及重量級(jí)進(jìn)程引擎進(jìn)而直接(至少在概念上如此;稍后,我們將詳及)存取SOA服務(wù)。在此,我不僅是指Web服務(wù),它也可能是BPEL編制服務(wù),粗粒度 POJO服務(wù),RSS回饋或任何其它能夠被暴露為一種“服務(wù)”的東西。當(dāng)然,這其中的接口應(yīng)該使用開放型標(biāo)準(zhǔn)暴露。
這種新式的開發(fā)和運(yùn)行時(shí)刻模型創(chuàng)建了一種構(gòu)建應(yīng)用程序驅(qū)動(dòng)的復(fù)合應(yīng)用程序的新方法。它具有客戶機(jī)/服務(wù)器類型的吸引力,而沒有傳統(tǒng)型重量級(jí)客戶機(jī)/服務(wù)器所具有的沉重包袱。它運(yùn)行于瀏覽器端并且能夠依具體要求而實(shí)現(xiàn)。
五、基于用戶的復(fù)合應(yīng)用程序
在過去的幾年間,我們都聽說過“復(fù)合應(yīng)用程序”這一概念。但是,大多數(shù)供應(yīng)商卻在一直談?wù)撝?#8220;復(fù)合服務(wù)”—作為一種把他們的宿主服務(wù)重構(gòu)成另一些更好用的服務(wù)或門戶應(yīng)用程序的方法。讓我作個(gè)類比來作進(jìn)一步的說明。
AcmeGrid,我們?cè)诒疚闹刑摌?gòu)的一家網(wǎng)格計(jì)算供應(yīng)商,它提供一種服務(wù)—網(wǎng)格計(jì)算—能夠使你的應(yīng)用 程序運(yùn)行為一種服務(wù)。這家公司的顧客告訴它他們想通過一個(gè)方法實(shí)現(xiàn)把許多服務(wù)組合成一種粗粒度的服務(wù)。因此,很自然地,AcmeGrid發(fā)布了一種基于 Eclipse的AcmeGrid復(fù)合應(yīng)用程序構(gòu)造器(CAB)。有趣的是,CAB看上去很象一個(gè)BPEL設(shè)計(jì)器,但是與AcmeGrid發(fā)布的服務(wù)更為 緊密地集成到一起。盡管相當(dāng)漂亮,但是,它并不是一種真實(shí)的應(yīng)用程序,充其量也只是一種服務(wù)。實(shí)質(zhì)上,CAB更象一個(gè)服務(wù)構(gòu)造器。但是,當(dāng)我們?cè)谂?gòu)建 應(yīng)用程序時(shí)有誰會(huì)需要一種服務(wù)構(gòu)造器呢?不久,另一家虛構(gòu)的供應(yīng)商,我們暫且稱其為AcmePortal,宣布了它的Portal復(fù)合應(yīng)用程序構(gòu)造器 (PCAB)。它也發(fā)行了一種基于Eclipse的設(shè)計(jì)器;盡管它的外觀感覺也象一個(gè)BPEL設(shè)計(jì)器,但是,這個(gè)程序卻“知道”如何構(gòu)建portal。在 許多情況下,一個(gè)portal和一個(gè)應(yīng)用程序有一樣好的效果。但是,如果你硬性要求把一個(gè)portal轉(zhuǎn)換為一個(gè)應(yīng)用程序的話,也只是徒然。
實(shí)際上,我非常想實(shí)現(xiàn)一種基于用戶的復(fù)合應(yīng)用程序,而不是一種基于中間件的復(fù)合應(yīng)用程序。為此,我需要 一種開發(fā)和運(yùn)行時(shí)刻平臺(tái)—這種平臺(tái)不僅能夠使用AJAX和SOA,而且還能夠?qū)@二者進(jìn)行管理。一些經(jīng)銷商又進(jìn)一步推進(jìn)了AJAX應(yīng)用程序的概念—直接從 瀏覽器中調(diào)用基于WSDL的Web服務(wù),其實(shí)質(zhì)上是作一種SOAP調(diào)用。這種方法甚至還有一個(gè)名字—“客戶端/SOA”。這對(duì)于簡單的非企業(yè)或消費(fèi)者應(yīng)用 程序而言可能是不錯(cuò)的,但是對(duì)于真正的企業(yè)程序卻不是這樣。為什么呢?因?yàn)楫?dāng)你直接從瀏覽器端調(diào)用Web服務(wù)時(shí),監(jiān)管功能等于交給了瀏覽器—這簡直就是 說,根本不存在監(jiān)管問題。圖1展示了非監(jiān)管的Web服務(wù)消費(fèi)框圖。我還從來未遇到過一家不去監(jiān)管自己的服務(wù)的企業(yè),并且也不相信企業(yè)僅僅因?yàn)槲覀冊(cè)诩夹g(shù)上 實(shí)現(xiàn)非常有效就會(huì)允許這樣的事情發(fā)生。如果你不相信我的看法,那么你只須記住企業(yè)是從來不會(huì)對(duì)除HTTP和SSL以外的應(yīng)用程序開放其防火墻的。不管我們 如何勸告系統(tǒng)主管,他們是不會(huì)開放其它端口的。
六、我們需要一種新型的平臺(tái)
由上面可知,我們所討論的不僅是停留在AJAX和SOA技術(shù)方面。其實(shí),我們真正需要的是一種平臺(tái),它 能夠?yàn)锳JAX和SOA共存于企業(yè)之中提供必要的監(jiān)管能力。這個(gè)平臺(tái)還提供站在客戶端角度消費(fèi)SOA服務(wù)的能力,而且還能監(jiān)管服務(wù)消費(fèi)情況。圖2展示了如 何通過一個(gè)服務(wù)網(wǎng)關(guān)來監(jiān)管Web服務(wù)。一個(gè)服務(wù)網(wǎng)關(guān)實(shí)際上是一個(gè)服務(wù)端抽象,它能夠代表客戶端監(jiān)管并調(diào)節(jié)服務(wù)存取,這在剛才我們所討論的情況下是指基于瀏 覽器的AJAX應(yīng)用程序。使用服務(wù)網(wǎng)關(guān)的漂亮之處在于,你并不被限制僅訪問在企業(yè)內(nèi)運(yùn)行的服務(wù)。這種服務(wù)網(wǎng)關(guān)能夠監(jiān)管注冊(cè)到企業(yè)內(nèi)的任何服務(wù)。在基于 WSDL的Web服務(wù)中,企業(yè)會(huì)注冊(cè)WSDL,而WSDL又提供在運(yùn)行時(shí)刻到服務(wù)的綁定。這可能是運(yùn)行在企業(yè)的數(shù)據(jù)中心的一種服務(wù),但是它有可能與一個(gè)運(yùn) 行于一家合伙企業(yè)的數(shù)據(jù)中心的服務(wù)一樣容易。如果企業(yè)允許(通過監(jiān)管)應(yīng)用程序存取服務(wù)的話,那么,這些服務(wù)運(yùn)行于何處是無關(guān)緊要的。
七、結(jié)論
讀完本文,我希望你已開始欣賞起把AJAX和SOA結(jié)合到一起的強(qiáng)大威力來了—特別是這二者之間的共存 方式以及實(shí)現(xiàn)新式的具有企業(yè)要求的監(jiān)管能力的基于Web服務(wù)的應(yīng)用程序。我堅(jiān)信,我們正在進(jìn)入到一種充滿令人驚異的機(jī)會(huì)的新時(shí)代的前夕。Web 2.0時(shí)代社會(huì)性網(wǎng)絡(luò),圖片共享以及各種標(biāo)注技術(shù)都是偉大的,但是真正有影響力的還在于Web 2.0對(duì)企業(yè)的響應(yīng)。
posted on 2008-03-11 13:46 gembin 閱讀(481) 評(píng)論(0) 編輯 收藏 所屬分類: SOA 、Ajax