讀書筆記《互聯(lián)時(shí)代的軟件革命-SaaS架構(gòu)設(shè)計(jì)》葉偉(一)

讀書筆記《互聯(lián)時(shí)代的軟件革命-SaaS架構(gòu)設(shè)計(jì)》葉偉(二)

第一章

1.什么是SaaS

2.SaaS和ASP的區(qū)別
Application Service Provider(應(yīng)用服務(wù)提供商),ASP模式就是將軟件統(tǒng)一托管到應(yīng)用服務(wù)提供商的服務(wù)器中。SaaS,Software as a Service軟件即服務(wù)就是SaaS,SaaS的目標(biāo)是軟件的徹底服務(wù)化。``

3.SaaS的優(yōu)勢(shì)和不足
優(yōu)勢(shì):開(kāi)通簡(jiǎn)單、無(wú)需維護(hù)、按需購(gòu)買使用、不受時(shí)間空間限制、風(fēng)險(xiǎn)低、投入小、試錯(cuò)成本低
不足:依賴互聯(lián)網(wǎng)、數(shù)據(jù)安全性和保密性有可能會(huì)泄漏。

第二章 SaaS 成熟度模型

  1. SaaS的規(guī)模效應(yīng)

在傳統(tǒng)軟件方式下,一個(gè)租戶需要購(gòu)買一套軟件及硬件、網(wǎng)絡(luò)和人員的投入。SaaS模式下,租戶只需要購(gòu)買一套軟件服務(wù)即可,其它都是軟件提供商的投入成本,用戶不需要考慮。對(duì)于具備良好可擴(kuò)展性的SaaS系統(tǒng),通過(guò)用戶數(shù)量的擴(kuò)大,本均成本就越低。這就是SaaS系統(tǒng)的規(guī)模效應(yīng)。

在Multi-Tenant架構(gòu),多租戶架構(gòu)。

  1. SaaS成熟度模型
圖片1.png

Level 1 定制開(kāi)發(fā)

就按照客戶的需,求來(lái)定制一個(gè)版本,每個(gè)客戶的軟件都有一份獨(dú)立的代碼。

Level 2 可配置

每個(gè)客戶獨(dú)立部署一個(gè)運(yùn)行實(shí)例。只是每個(gè)運(yùn)行實(shí)例運(yùn)行的是同一份代碼,通過(guò)配置的不同來(lái)滿足不同客戶的個(gè)性化需求。

Level 3 多租戶架構(gòu)

Level 4 可伸縮的多租戶架構(gòu)

將多用戶的訪問(wèn)需求通過(guò)負(fù)載平衡層分配到不同的實(shí)例上,實(shí)現(xiàn)幾乎無(wú)限制水平擴(kuò)展。

SaaS系統(tǒng)特別可配置性、高性能、可伸縮性。

定制開(kāi)發(fā)

可配置

多用戶架構(gòu):

Multi-Tenant架構(gòu):多用戶架構(gòu)是實(shí)現(xiàn)SaaS的基礎(chǔ)要求

多用戶下的可伸縮性:優(yōu)化系統(tǒng)的性能。

可配置:抓住客戶主要需求,實(shí)現(xiàn)功能可配置。

可伸縮性:包括應(yīng)用層可伸縮和數(shù)據(jù)庫(kù)層可伸縮。

第三章 視圖

邏輯視圖,如果設(shè)計(jì)采用面向?qū)ο蟮姆椒ǎ壿嬕晥D就是對(duì)象模型。邏輯視圖重點(diǎn)在于功能,包括業(yè)務(wù)功能和系統(tǒng)功能。以及邏輯分層、模塊劃分和模塊之間的關(guān)系。

開(kāi)發(fā)視圖,描述軟件在開(kāi)發(fā)環(huán)境下的靜態(tài)組織。開(kāi)發(fā)視圖關(guān)注程序包,應(yīng)用的統(tǒng)一框架,引用的類庫(kù)、SDK和中間件,以及工程和包的劃分規(guī)則等,規(guī)范、約束開(kāi)發(fā)環(huán)境的結(jié)構(gòu)。

過(guò)程視圖,流程,描述系統(tǒng)的并發(fā)和同步等設(shè)計(jì)。視業(yè)務(wù)場(chǎng)景可省略。

場(chǎng)景視圖(業(yè)務(wù)場(chǎng)景),也叫用例視圖,描述用戶的業(yè)務(wù)場(chǎng)景和復(fù)雜度可省略。

物理視圖,也叫部署視圖,描述軟件如何映射到硬件,反映系統(tǒng)在分布/部署上的設(shè)計(jì)。物理視圖需要解決最終如何安裝和部署到服務(wù)器,以及網(wǎng)絡(luò)分布的問(wèn)題。

Multi-Tenant在數(shù)據(jù)存儲(chǔ)上存在三種主要的方案

  1. 獨(dú)立數(shù)據(jù)庫(kù),一個(gè)Tenant一個(gè)Database
  2. 共享數(shù)據(jù)庫(kù),隔離數(shù)據(jù)架構(gòu)。即多個(gè)或所有租戶共享Database,但一個(gè)Tenant一個(gè)Schema(表)。
  3. 共享數(shù)據(jù)庫(kù),共享數(shù)據(jù)架構(gòu)。即租戶共享同一個(gè)Database、同一個(gè)Schema(表),但在表中通過(guò),TenantID(租戶ID)區(qū)分租戶的數(shù)據(jù)。


    圖片2.png

SaaS成熟度模型不同等級(jí)的不同特點(diǎn):

  • Level 1:設(shè)備托管;

  • Level 2:設(shè)備共享、可配置化;

  • Level 3:多租戶、數(shù)據(jù)隔離、高性能。

第4章 高性能的Multi-Tenant的最佳方案

1. 數(shù)據(jù)庫(kù)的優(yōu)化

1) 建立索引 2)消除大數(shù)據(jù)表連接 3)避免復(fù)雜SQL


圖片3.png
2. 應(yīng)用層的優(yōu)化

1)Cache優(yōu)化:將常用到的用戶數(shù)據(jù)、權(quán)限數(shù)據(jù)放到Cache中,

實(shí)施方法:可以考慮在系統(tǒng)啟動(dòng)時(shí)即載入Cache,在發(fā)生變化的時(shí)候,更新Cache。角色則應(yīng)該在用戶登錄的時(shí)候,獲取用戶的角色信息,并放入用戶Session中。如果cache訪問(wèn)失敗,則訪問(wèn)數(shù)據(jù)庫(kù),并重新將其載入Cache中。

2)統(tǒng)計(jì)和報(bào)表計(jì)算

(1)對(duì)實(shí)時(shí)性要求不高的,制作定時(shí)任務(wù)計(jì)算。
⑵歷史數(shù)據(jù)可修改的,對(duì)于修改的歷史數(shù)據(jù),重新計(jì)算。
⑶對(duì)于實(shí)時(shí)性要求高的,在原定時(shí)任務(wù)基礎(chǔ)上增加增量的計(jì)算。

3)基礎(chǔ)Tenant的索引搜索
利用開(kāi)源搜索引擎

4)異步操作

  • 表現(xiàn)層異步
  • 后臺(tái)業(yè)務(wù)邏輯異步
3. Web層的性能優(yōu)化

1 內(nèi)容類:減少http請(qǐng)求數(shù)、減少DNS查找、避免無(wú)效的跳轉(zhuǎn)、緩存ajax等
2 服務(wù)器業(yè)與Cookie類:使用CDN、Gzip壓縮網(wǎng)頁(yè)、配置實(shí)體標(biāo)簽、減少cookie體積等。
3 Javascript、CSS、圖片類:把腳本置于頁(yè)面底部、使用外部jS 和CSS、減少不必要的JS和CSS等。
4 移動(dòng)應(yīng)用類:保持單個(gè)內(nèi)容小于25K、打包組件成復(fù)合文本

  1. 性能監(jiān)控

第五章 多用戶應(yīng)用的可配置性

一、數(shù)據(jù)可配置
  1. 定制字段
    根據(jù)客戶的需求在數(shù)據(jù)表上增加相應(yīng)的定制字段來(lái)保存擴(kuò)展數(shù)據(jù)。
  2. 預(yù)分配字段
    預(yù)分配字段是指在用戶可能有擴(kuò)展需求的表中預(yù)設(shè)一定數(shù)量的字段。當(dāng)用戶提出擴(kuò)展需求時(shí),使用其中的一個(gè)或多個(gè)字段來(lái)保存擴(kuò)展數(shù)據(jù)。
  3. 名稱值對(duì)
    慮將擴(kuò)展數(shù)據(jù)的保存與原數(shù)據(jù)表分離,另外用一張統(tǒng)一的擴(kuò)展數(shù)據(jù)表來(lái)保存。

三種方案優(yōu)勢(shì)比較


圖片4.png

二、功能可配置

實(shí)施流程

  1. 原子功能劃分

拆分原則:每一個(gè)原子功能都要能夠給用戶帶來(lái)某方面的價(jià)值。在保證原子功能對(duì)于用戶有價(jià)值的前提下,功能分解要盡量細(xì)化,直到不能再細(xì)分為止。

  1. 功能包設(shè)計(jì)

是根據(jù)用戶的類型和使用的場(chǎng)景,對(duì)原子功能進(jìn)行打包,然后為每一個(gè)用戶挑選其合適的功能包。功能包的設(shè)計(jì)要遵循高內(nèi)聚、低耦合的原則。

三、界面可配置
  1. 系統(tǒng)菜單可配置

主要是指不同的租戶可以同時(shí)購(gòu)買和使用系統(tǒng)內(nèi)不同的功能集合。

  1. 頁(yè)面元素可配置

各功能頁(yè)面上的內(nèi)容也是供用戶與系統(tǒng)交互的界面元素。無(wú)論是對(duì)頁(yè)面元素的個(gè)數(shù)、位置、順序,還是元素的含義,租戶都可能會(huì)有一些個(gè)性化的需求。

四、流程可配置

在流程可配置方面,SaaS應(yīng)用與傳統(tǒng)應(yīng)用在本質(zhì)上并沒(méi)有太大的區(qū)別。只是在多租戶的SaaS應(yīng)用中,租戶之間的流程和數(shù)據(jù)是要隔離的。除了應(yīng)用預(yù)置的流程模板以外,其他的都是由租戶自己來(lái)定義和設(shè)計(jì)的。

五、配置元數(shù)據(jù)管理

1.對(duì)同一種類的多項(xiàng)配置可以進(jìn)行統(tǒng)一實(shí)現(xiàn)。即脫離業(yè)務(wù)邏輯實(shí)現(xiàn)統(tǒng)一公共的數(shù)據(jù)可配置、功能可配置、界面可配置和流程可配置。
將數(shù)據(jù)可配置、功能可配置、界面可配置、流程可配置的配置參數(shù)進(jìn)行抽象,對(duì)于系統(tǒng)內(nèi)可配置的擴(kuò)展點(diǎn),以及租戶基于這些擴(kuò)展點(diǎn)進(jìn)行配置的內(nèi)容進(jìn)行統(tǒng)一的管理。

SaaS應(yīng)用中要管理的可配置參數(shù)包括以下幾種:表、原子功能、功能包、菜單、頁(yè)面、頁(yè)面元素、流程等。對(duì)于以上配置類型稱之為配置元。

配置元之間存在三種關(guān)系類型:包含、依賴、關(guān)聯(lián)。根據(jù)上面的抽象,可以得到配置元模型。

  1. 租戶配置數(shù)據(jù)

租戶配置數(shù)據(jù),是指基于配置元模型和配置元數(shù)據(jù),由租戶管理員根據(jù)租戶的需要來(lái)定義相應(yīng)的配置信息。

3.配置元數(shù)據(jù)服務(wù)

通過(guò)配置元數(shù)據(jù)管理將系統(tǒng)內(nèi)可以配置的元素,租戶配置數(shù)據(jù)管理將相應(yīng)的配置數(shù)據(jù)定義出來(lái)。配置元數(shù)據(jù)服務(wù),就是要提供一套統(tǒng)一操作這些元數(shù)據(jù)的服務(wù)接口,以及一套可以直接使用元數(shù)據(jù)的控件,供業(yè)務(wù)模塊開(kāi)發(fā)時(shí)使用。

六、可配置系統(tǒng)運(yùn)行

有關(guān)各類配置數(shù)據(jù)的使用邏輯及調(diào)度控制,通過(guò)3個(gè)特殊的引擎來(lái)完成。

1.工作流引擎:流程可配置數(shù)據(jù)的使用與控制。
2.擴(kuò)展數(shù)據(jù)引擎:有關(guān)擴(kuò)展數(shù)據(jù)的查詢、使用、提交及相應(yīng)的檢查等,
3.功能引擎:負(fù)責(zé)系統(tǒng)內(nèi)功能的調(diào)度和租戶對(duì)功能的使用。

  1. 系統(tǒng)菜單框架:系統(tǒng)菜單框架需要依賴功能引擎來(lái)裝載租戶菜單所對(duì)應(yīng)的功能。在菜單被單擊使用的時(shí)候,需要通過(guò)功能引擎來(lái)實(shí)現(xiàn)對(duì)原子功能的調(diào)度和使用。

  2. 功能頁(yè)面容器

功能頁(yè)面容器主要解決頁(yè)面要素展示、頁(yè)面功能可用性控制、可配置數(shù)據(jù)展示、可配置數(shù)據(jù)提交4個(gè)方面的問(wèn)題。

1)頁(yè)面要素展示就是要根據(jù)系統(tǒng)頁(yè)面的設(shè)計(jì)和租戶的配置,來(lái)展示頁(yè)面上的各種展示要素。如文字、圖片、音視頻。
2)頁(yè)面功能可用性控制,就是根據(jù)租戶購(gòu)買的原子功能列表,來(lái)確定頁(yè)面內(nèi)的功能是否可用。如:通話功能、直播發(fā)言功能。
3)可配置數(shù)據(jù)展示,就是根據(jù)租戶針對(duì)頁(yè)面實(shí)體定義可配置數(shù)據(jù)列表,在頁(yè)面內(nèi)自動(dòng)展示。如:數(shù)據(jù)列。
4)可配置數(shù)據(jù)提交,就是根據(jù)租戶針對(duì)頁(yè)面實(shí)體設(shè)計(jì)的可配置數(shù)據(jù)項(xiàng),當(dāng)頁(yè)面提交時(shí)從界面上收集可配置項(xiàng)的數(shù)據(jù)內(nèi)容,與數(shù)據(jù)實(shí)體一并提交。如:數(shù)據(jù)列可修改保存。

  1. 擴(kuò)展數(shù)據(jù)引擎

數(shù)據(jù)可配置性的實(shí)現(xiàn),主要包括擴(kuò)展數(shù)據(jù)的展示、擴(kuò)展數(shù)據(jù)的提交、擴(kuò)展數(shù)據(jù)的校驗(yàn)與保存。

  1. 功能引擎

功能引擎,就是要根據(jù)租戶所購(gòu)買的功能包,來(lái)查找租戶所有的“可用原子功能”集合,結(jié)合其購(gòu)買的期限,來(lái)確定當(dāng)前租戶是否可執(zhí)行相應(yīng)的功能或操作,以及實(shí)現(xiàn)對(duì)相應(yīng)原子功能的調(diào)度。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容