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