鄭則李
(廣東粵東高速公路實(shí)業(yè)發(fā)展有限公司,廣東 揭陽 515525)
架構(gòu)Web平臺(tái)的數(shù)據(jù)可以是通用的,例如用戶信息;可以是私有的,例如一個(gè)在線網(wǎng)盤;也可以是個(gè)人的,例如博客,微博;也可以是開放的,例如餐飲信息,旅游信息,天氣信息;也可以是需要嚴(yán)格保密的,例如銀行的賬戶信息。所有的數(shù)據(jù)通過Web呈現(xiàn)的面對(duì)用戶的所有功能都是提供一個(gè)給用戶操作的接口,通過接口訪問Web平臺(tái)專有的一組核心數(shù)據(jù)。
Web應(yīng)用,即使不為用戶提供也不使用任何用戶數(shù)據(jù)的平臺(tái),仍然是由功能應(yīng)用內(nèi)部需要的數(shù)據(jù)來驅(qū)動(dòng)的。假想一個(gè)提供餐飲信息查詢方面的網(wǎng)站,該Web站點(diǎn)的功能包括可查找的餐飲信息索引,關(guān)于每個(gè)菜式,餐飲店的基本信息,以及用戶對(duì)每個(gè)餐飲店做出的評(píng)論,用于獲取這些具體的信息構(gòu)成了這個(gè)應(yīng)用的核心,驅(qū)動(dòng)了這一類Web平臺(tái)的架構(gòu)。
隨著Web2.0的網(wǎng)絡(luò)技術(shù)逐漸流行,數(shù)據(jù)在系統(tǒng)中的核心地位越來越明顯,Web2.0展現(xiàn)的核心主題就是數(shù)據(jù)驅(qū)動(dòng),而且依賴用戶本身提供了絕大部分的數(shù)據(jù),核心的數(shù)據(jù)映射驅(qū)動(dòng)了網(wǎng)站的功能和體驗(yàn),與Web2.0之前網(wǎng)站的核心數(shù)據(jù)不同是,Web2.0數(shù)據(jù)是圍繞用戶與用戶之間的聯(lián)系來展開的層次架構(gòu)中。
圍繞用戶數(shù)據(jù)的Web平臺(tái)層次架構(gòu)中,在架構(gòu)的最上層數(shù)據(jù)展現(xiàn)層,輸入模塊將用戶的 Web輸入(Get,Pos,Cookie信息的集合)映射為對(duì)原始數(shù)據(jù)的請(qǐng)求,存儲(chǔ)于數(shù)據(jù)庫的中的原始數(shù)據(jù)被轉(zhuǎn)換為內(nèi)存中的數(shù)據(jù),通過業(yè)務(wù)邏輯進(jìn)行智能化處理,輸出模塊針對(duì)顯示原始數(shù)據(jù)對(duì)象進(jìn)行 HTML,JavaScript,CSS等轉(zhuǎn)換,是運(yùn)行在基礎(chǔ)設(shè)施之上的應(yīng)用程序N層棧;而業(yè)務(wù)邏輯層則是根據(jù)一些建立在系統(tǒng)的數(shù)據(jù)組件規(guī)則來執(zhí)行的,平臺(tái)開發(fā)者可以利用分離的業(yè)務(wù)邏輯和應(yīng)用棧將核心的數(shù)據(jù)映射應(yīng)用于其他的Web應(yīng)用,用戶在這些應(yīng)用里提供或消費(fèi)數(shù)據(jù)。架構(gòu)設(shè)計(jì)考慮創(chuàng)建統(tǒng)一可用的用戶關(guān)系數(shù)據(jù)上下文,體現(xiàn)用戶與數(shù)據(jù)之間的關(guān)系:數(shù)據(jù)可獲得性和用戶隱私。
架構(gòu)技術(shù)的要點(diǎn):
橫向協(xié)作,業(yè)務(wù)分布,數(shù)據(jù)分布,縱向分層,流水作業(yè);以空間換時(shí)間,資源的預(yù)準(zhǔn)備,資源池,兼顧同步和異步;應(yīng)用可以通過Web平臺(tái)的數(shù)據(jù)服務(wù)來訪問有用的關(guān)系數(shù)據(jù),為外部的Web應(yīng)用,桌面操作系統(tǒng)應(yīng)用和其它設(shè)備上的應(yīng)用提供關(guān)系上下文;應(yīng)用可以通過數(shù)據(jù)驅(qū)動(dòng)標(biāo)記語言來實(shí)現(xiàn)顯示,在Web平臺(tái)提供的頁面上集成自己的應(yīng)用;通過數(shù)據(jù)驅(qū)動(dòng)標(biāo)記語言針對(duì)架構(gòu)的改進(jìn)需求,開發(fā)者可以使用Web平臺(tái)的cookie和javascript讓滿足應(yīng)用的架構(gòu)改動(dòng)最??;架構(gòu)創(chuàng)建了統(tǒng)一的關(guān)系上下文,Web平臺(tái)應(yīng)用可獲得平臺(tái)提供的功能而不必放棄對(duì)于平臺(tái)的用戶數(shù)據(jù)和顯示提供的用戶體驗(yàn)期望。
DNS級(jí)負(fù)載均衡,動(dòng)態(tài)頁面靜態(tài)化,靜態(tài)頁面使用輕量級(jí)的Web服務(wù)器,圖片,JavaScript,CSS,,F(xiàn)lash,流媒體等資源使用專用的服務(wù)器,頁面中重要的部分同步處理,次要部分使用Ajax技術(shù)進(jìn)行異步處理。
平臺(tái)通過創(chuàng)建外部可以訪問的Web服務(wù)來提供平臺(tái)數(shù)據(jù)訪問的接口。Web服務(wù)API接口為外部應(yīng)用和平臺(tái)數(shù)據(jù)之間建立了關(guān)系,本質(zhì)上位外部應(yīng)用棧添加了平臺(tái)數(shù)據(jù),對(duì)于用戶而言,可顯式的通過授權(quán)外部應(yīng)用來獲得平臺(tái)關(guān)系數(shù)據(jù)。
在Web平臺(tái),目標(biāo)方法的名稱以及它的參數(shù)是在HTTP請(qǐng)求中傳遞的,請(qǐng)求還包括調(diào)用應(yīng)用相關(guān)的證書,與用戶-應(yīng)用相關(guān)的證書,與請(qǐng)求實(shí)例相關(guān)的證書。通過將HTTP的Get和Post輸入轉(zhuǎn)換成對(duì)內(nèi)部棧的調(diào)用,以XML格式輸出結(jié)果。
4.3 Web服務(wù)認(rèn)證
Web服務(wù)的客戶端在每次請(qǐng)求時(shí)發(fā)送Session Key,Web服務(wù)知道Session代表的用戶請(qǐng)求的應(yīng)用,當(dāng)用戶或Web平臺(tái)禁用該應(yīng)用,或者是用戶首次訪問的應(yīng)用,安全檢查將無法通過,Web服務(wù)返回錯(cuò)誤給請(qǐng)求的客戶端,當(dāng)安全檢查通過,外部應(yīng)用站點(diǎn)會(huì)把該Session Key計(jì)入自己的用戶記錄,或存放到用戶的cookie中。
Web平臺(tái)通過帶有用戶控制的認(rèn)證握手的Web服務(wù)將內(nèi)部庫擴(kuò)展到外部應(yīng)用,通過這個(gè)轉(zhuǎn)換,平臺(tái)的關(guān)系數(shù)據(jù)可以驅(qū)動(dòng)用戶決定認(rèn)證的其它應(yīng)用程序,通過關(guān)系上下文,在應(yīng)用的數(shù)據(jù)中創(chuàng)建新的關(guān)系;
隨著應(yīng)用越來越多地使用外部數(shù)據(jù)平臺(tái),由于網(wǎng)絡(luò)帶寬占用,CPU負(fù)載造成的請(qǐng)求延遲將很快體現(xiàn),通過建立關(guān)系數(shù)據(jù)查詢服務(wù)機(jī)制,讓開發(fā)者能在在平臺(tái)的數(shù)據(jù)上使用標(biāo)準(zhǔn)的數(shù)據(jù)查詢語義,將計(jì)算推到平臺(tái)可使用戶取得平臺(tái)數(shù)據(jù)等同于取得自己的數(shù)據(jù),該架構(gòu)的實(shí)現(xiàn),是一項(xiàng)訪問平臺(tái)數(shù)據(jù)的架構(gòu)改進(jìn),是標(biāo)準(zhǔn)的黑盒Web服務(wù),讓開發(fā)者能夠消除多次數(shù)據(jù)請(qǐng)求的來回。
數(shù)據(jù)架構(gòu)實(shí)現(xiàn)了讓平臺(tái)關(guān)系數(shù)據(jù)更加開放的要求,外部應(yīng)用和數(shù)據(jù)平臺(tái)的共同用戶可以共享信息,每個(gè)新的關(guān)系應(yīng)用不需要一個(gè)新的關(guān)系網(wǎng)絡(luò),為讓更多的用戶發(fā)現(xiàn)Web平臺(tái)的應(yīng)用,平臺(tái)把應(yīng)用的內(nèi)容和它自己的內(nèi)容等同看待,讓外部的應(yīng)用展現(xiàn)在平臺(tái)的門戶站點(diǎn)上,幫助開發(fā)者獲得足以支撐數(shù)據(jù)關(guān)系功能所需的關(guān)鍵性用戶數(shù)。
平臺(tái)提供各種開源小工具,例如跨語言進(jìn)程間通信(IPC)工具,序列化輸出工具,平臺(tái)內(nèi)部異常轉(zhuǎn)換為外部錯(cuò)誤代碼工具,XML或SOAP工具集等,通過使用這些小工具,應(yīng)用服務(wù)的設(shè)計(jì)者不必每次小改動(dòng)都需要花費(fèi)時(shí)間來更新代碼,而用戶更可以通過工具了解更多的平臺(tái)內(nèi)部架構(gòu)信息。
由于開發(fā)者創(chuàng)建的軟件運(yùn)行在Web平臺(tái)的服務(wù)之上,使得平臺(tái)數(shù)據(jù)得到了長(zhǎng)足的發(fā)展,但是仍有一些重要的,常見的Web使用場(chǎng)景和技術(shù),平臺(tái)的架構(gòu)不能支持,平臺(tái)通過下面的支持功能來修正存在的問題:
讓W(xué)eb平臺(tái)具有瀏覽器的職責(zé),在平臺(tái)自己的存儲(chǔ)庫中復(fù)制Cookie的功能,如同用戶操作瀏覽器保存Cookie信息,可有效地分離用戶在平臺(tái)上的應(yīng)用體驗(yàn)和應(yīng)用的HTML站點(diǎn)上的應(yīng)用體驗(yàn)。
Web平臺(tái)提供一些自定義的JavaScript庫,讓用戶場(chǎng)景更加容易實(shí)現(xiàn),同時(shí)場(chǎng)景受到平臺(tái)的控制,使應(yīng)用即動(dòng)態(tài)又安全。
通過互聯(lián)網(wǎng)提供訪問的系統(tǒng),伸縮性已經(jīng)成為非常重要的要求歐,Web平臺(tái)可能會(huì)突然發(fā)現(xiàn)有幾百萬的用戶訪問,即使是百萬用戶訪問的Web平臺(tái),也有集中的訪問和零散的訪問需求,這要求為系統(tǒng)投入的設(shè)備經(jīng)過能夠在最高承載下也能穩(wěn)定運(yùn)行;也可能發(fā)現(xiàn)沒有用戶感興趣,為系統(tǒng)投入的所有設(shè)備都閑置,消耗著能源和管理成本,這對(duì)于企業(yè)來說同樣是一種投入上的浪費(fèi)。在互聯(lián)網(wǎng)的世界里,一個(gè)Web站點(diǎn)可以在幾分鐘內(nèi)從其中一種狀態(tài)轉(zhuǎn)變?yōu)榱硪环N狀態(tài)。
圍繞用戶數(shù)據(jù)有效的提高了Web平臺(tái)上所有的頁面的效用,這些數(shù)據(jù)擁有通用性,當(dāng)數(shù)據(jù)與外部開發(fā)者的應(yīng)用棧結(jié)合在一起時(shí),數(shù)據(jù)的最佳使用開始出現(xiàn),通過Web平臺(tái)的展現(xiàn)層服務(wù),數(shù)據(jù)查詢服務(wù)和平臺(tái)特有的門戶API接口,協(xié)調(diào)不斷擴(kuò)展的數(shù)據(jù)訪問方法和網(wǎng)站容量的預(yù)期,針對(duì)平臺(tái)的新需求帶來的數(shù)據(jù)架構(gòu)改動(dòng)帶來的問題,平臺(tái)又通過對(duì)數(shù)據(jù)訪問模式的更強(qiáng)改進(jìn)來解決問題。
[1]應(yīng)用Web Services構(gòu)建多層架構(gòu)的高效.NET應(yīng)用 (ISBN:7030152999)科學(xué)出版社2005
[2]Web信息架構(gòu):設(shè)計(jì)大型網(wǎng)站(ISBN:9787121070372)電子工業(yè)出版社 2008