|
可伸縮性是一種對軟件系統(tǒng)處理能力的設(shè)計指標(biāo),高可伸縮性代表一種彈性,在系統(tǒng)擴(kuò)展過程中,能夠保證旺盛的生命力,通過很少的改動,就能實現(xiàn)整個系統(tǒng)處理能力的增長。
在系統(tǒng)設(shè)計的時候,充分地考慮系統(tǒng)的可伸縮性,一方面能夠極大地減少日后的維護(hù)開銷,并幫助決策者對于投資所能獲得的回報進(jìn)行更加精準(zhǔn)的估計;另一方面,高可伸縮性的系統(tǒng)往往會具有更好的容災(zāi)能力,從而提供更好的用戶體驗。
WEB交互式系統(tǒng)的可伸縮性主要體現(xiàn)在兩個方面:
- 平臺的可伸縮性:隨著WEB技術(shù)的發(fā)展,越來越多的平臺開始使用WEB技術(shù)來構(gòu)建系統(tǒng),一方面不同的平臺提供的環(huán)境支持存在著各種差異;另一方面隨著平臺的發(fā)展,不斷的會有一些舊平臺退出歷史舞臺,新平臺轉(zhuǎn)而成為主流平臺;因此構(gòu)建的WEB系統(tǒng)需要能夠快速的響應(yīng)此類變化就需要其具備良好的平臺伸縮性
- 模塊的可伸縮性:隨著系統(tǒng)功能不斷增刪更新需求的變化,系統(tǒng)可能會變得越來越復(fù)雜,冗余信息也可能會越來越多,改動所帶來的影響范圍也可能會越來越大,因此良好的模塊伸縮性可保證系統(tǒng)具有良好的可維護(hù)性,讓系統(tǒng)始終處于最佳狀態(tài)
WEB交互式系統(tǒng)的主要應(yīng)用包括:
- 桌面端/移動端網(wǎng)站類系統(tǒng)(如 網(wǎng)易云課堂、易信WebIM、Lofter移動WEB版等)
- 移動混合應(yīng)用(如 網(wǎng)易云相冊IPad版、Lofter等)
- 桌面混合應(yīng)用(如 網(wǎng)易云音樂PC版、網(wǎng)易郵箱助手等)
本系列文章主要分為兩個主要部分對可伸縮性進(jìn)行闡述,分別是平臺的可伸縮性和模塊的可伸縮性。本文是系列文章的第一篇,討論平臺的可伸縮性。
平臺的可伸縮性
WEB交互式系統(tǒng)對平臺的可伸縮性主要表現(xiàn)為:
- 可擴(kuò)展性:對于新興平臺能夠快速進(jìn)行支持
- 可縮減性:對于過時的平臺冗余信息能夠以最小的修改方式剔除
我們先介紹一下WEB交互式系統(tǒng)的目標(biāo)平臺的情況。
平臺分類
根據(jù)系統(tǒng)所在容器的差異,我們將平臺分為瀏覽器平臺和混合應(yīng)用平臺兩大類。各分類的詳細(xì)說明見下文所述。
瀏覽器平臺
按引擎劃分
瀏覽器平臺,按照主流引擎可以劃分為以下幾類:
混合應(yīng)用平臺
根據(jù)混合應(yīng)用的宿主平臺的差異,我們將混合應(yīng)用的目標(biāo)平臺分為以下幾類:
宿主 | 說明 |
Android | Android系統(tǒng)的混合應(yīng)用,瀏覽器引擎會自動適配至Webkit |
ios | ios系統(tǒng)的混合應(yīng)用,瀏覽器引擎會自動適配至Webkit |
WinPhone | Windows Phone系統(tǒng)的混合應(yīng)用,瀏覽器引擎會自動適配至Trident |
PC | 桌面應(yīng)用,采用CEF做為容器,瀏覽器引擎會自動適配至Webkit |
平臺適配
AOP(ASPect-Oriented Programming):面向切面的編程范式,其核心思想是將橫切關(guān)注點從主關(guān)注點中分離出來,因此特定領(lǐng)域的問題代碼可以從標(biāo)準(zhǔn)業(yè)務(wù)邏輯中分離出來,從而使得主業(yè)務(wù)邏輯和領(lǐng)域性業(yè)務(wù)邏輯之間不會存在任何耦合性。
這里我們可以借鑒AOP思想來實現(xiàn)平臺的適配策略,結(jié)合不同的平臺實現(xiàn)邏輯,我們可以認(rèn)為對于使用規(guī)范、標(biāo)準(zhǔn)來實現(xiàn)業(yè)務(wù)邏輯的部分為我們的主關(guān)注點,而不同平臺可以做為若干的切面關(guān)注點進(jìn)行封裝,各平臺只需關(guān)注自己平臺下對標(biāo)準(zhǔn)的修正邏輯即可,因此可以通過增加、刪除平臺修正的切面邏輯來實現(xiàn)對不同平臺的適配。
實現(xiàn)時我們首先提取標(biāo)準(zhǔn)業(yè)務(wù)邏輯,然后各平臺根據(jù)實際情況實現(xiàn)對業(yè)務(wù)邏輯的修正:
- 標(biāo)準(zhǔn)業(yè)務(wù)邏輯:主關(guān)注點,這里主要是使用根據(jù)W3C、ES標(biāo)準(zhǔn)來實現(xiàn)的業(yè)務(wù)邏輯
- 前置平臺修正邏輯:領(lǐng)域特定關(guān)注點,主要是根據(jù)平臺特性對標(biāo)準(zhǔn)在該平臺下的修正,修正邏輯會先于標(biāo)準(zhǔn)邏輯執(zhí)行
- 后置平臺修正邏輯:同前置平臺修正邏輯,也是領(lǐng)域特定關(guān)注點,修正邏輯會在標(biāo)準(zhǔn)邏輯執(zhí)行后再執(zhí)行
根據(jù)此思路我們對比以下兩段代碼:
代碼一:目前常用的平臺適配方式
function doSomething(){ if(isTrident){ // TODO trident implement }else if(isWebkit){ // TODO webkit implement }else if(isGecko){ // TODO gecko implement }else if(isPresto){ // TODO presto implement }else{ // TODO w3c implement }}// 上層應(yīng)用使用doSomething(1,2,3);
it知識庫:構(gòu)建高可伸縮性的WEB交互式系統(tǒng)(上),轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。