SaaS “可配置”和“多租戶”架構的技術實現方式


轉載:https://www.jianshu.com/p/c11b19fc8110

 

依據是否具有“可配置”、“高性能”、“可伸縮”的特性 ,我們將SaaS划分為四級成熟度模型。

從上圖不難看出,初級成熟度模型並不具備“可配置”、“高性能”或“可伸縮”特性,而三、四級成熟度模型都是基於多租戶的。那么,繼開源框架構建CRM系統初級SaaS成熟度模型之后,如何通過技術手段,實現“可配置”和“多租戶”架構呢?今天我們就來探討這個話題。

一、SaaS “可配置”  架構的技術實現方式

利用元數據建模的MDA(Modle Driven  Architecture,模型驅動架構),是我們實現“可配置化”常用的技術架構。

MDA,是為應對“上世紀90年代以來,基礎平台和技術工具快速迭代,以及無數系統整合與改造需求陡增” 的趨勢而提出的,用以解決“企業和技術快速變化,給軟件從業者帶來的”難以應對難題的技術模型。

它通過“企業應用系統”與“技術實現平台”的分離、平台無關PIM(Platform Independent Model)建模語言統一化,以及特定平台PSM(Platform Specific Model)模型化的方式,分別封裝”企業應用系統”與“技術實現平台”兩者的變化,達到了降低技術干擾,簡化技術開發人員工作的目的。

1. MDA架構

 

 
 

內圈:MDA主要使用了UML(Unified Modeling Language) 、MOF(Meta-Object Facility)及CWM(Common Warehouse Metamodel)這三項建模標准,作為PIM及PSM的建模基礎。不過,一般的開發人員,只要熟知UML統一建模語言,就可以開發MDA項目了。

中圈:為公開標准或私有技術實現平台,包括CORBA,XMI/XML,.NET,JAVA及WEB SERVICE等等。MDA希望制定出各式平台專屬的PSM轉換規則,並由廠商配合設計MDA開發工具,將中立的PIM自動轉換為平台專屬的PSM模型。

外圈:代表跨平台的通用服務(Pervasive Services)——目錄服務(Directory Services),事務服務(Transaction Services)、安全服務(Security Services)和分布式事件及通知服務(Distributed Event and Notification Services),目的在於讓任何平台上的應用程序或客戶端,都可以通過MDA環境,取得跨平台服務。

圈外:代表MDA可以應用在各式不同的領域環境中,諸如電子商務(E-Commerce),電信(Telecom),醫療保健(HealthCare),運輸(Transportation),航空(Space),制造(Manufacturing),金融(Finance)等領域。

2.  MDA的四層模型

 

 
 

M0-實例層: M1 層模型的實例化,即對應UML模型的具體程序。

M1 -模型層:是建模人員通常所面對的模型,例如圖中的 UML 模型,是分析和設計,包括開發人員最為熟悉不過的了。

M2 -元模型層:對應着 M1 層模型的元模型( UML 、 SPEM 等),通過提取不同領域的抽象概念和關系結構,為 M1 層建模提供建模符號,為不同領域提供對應的建模語言。

M3:元-元模型層

MOF 就位於這一層, 提供了定義 M2 層元模型所需要的更抽象一級的建模支持。 MOF 是 M2 層所有元模型的元模型,同時,它也是自描述的, MOF 可以描述 MOF 元模型自身。注意,在 MDA 框架中, M3 層只有 MOF 這一個模型,它是 MDA 中最基礎和核心的標准,它為 MDA 框架中的所有模型 / 元模型提供了統一的語義基礎,使得基於 MOF 的統一的模型操作成為可能。

3. 用MDA開發的過程

第一階段: CIM(Computation Independent Model)- 聚焦於系統環境及需求,但不涉及系統內部的結構與運作細節。

第二階段:PIM(Platform Independent Model)- 聚焦於系統內部細節,但不涉及實現系統的具體平台。

第三階段:PSM(Platform Specific Model)- 聚焦於系統,落實特定平台的細節(如EJB,J2EE或.NET都是一種具體平台),並用統一編程語言UML將PSM模型化。

第四階段:Coding – 依據PSM的UML模型內容,按圖施工,編寫出適用於特定具體平台的代碼。

二、SaaS “多租戶”  架構的技術實現方式

1、數據存儲方式的選擇

多租戶(Multi-Tenant ),即多個租戶共用一個實例,租戶的數據既有隔離又有共享,說到底是要解決數據存儲的問題。

常用的數據存儲方式有三種。

方案一:獨立數據庫

 

 
 

”一個Tenant,一個Database“的數據存儲方式。隔離級別最高、最安全,但成本也高。

優點:

a.為不同租戶提供獨立數據庫,有助於簡化數據模型的擴展設計,滿足個性化需求;

b.數據恢復簡單;

缺點:增大了數據庫的安裝數量,購置和維護成本高;

方案二:共享數據庫,隔離數據架構

 

 
 

多個租戶或所有租戶共享Database,但一個Tenant,一個Schema的方式。

優點:

a.一定程度的邏輯數據隔離(並非完全),可滿足較高程度的安全性保障;

b.每個數據庫,可支持更多租戶數量;

缺點:

a.恢復數據較困難,因為將牽扯到其他租戶數據;

b.跨租戶統計數據,實現難度大;

方案三:共享數據庫,共享數據架構

 

 
 

一種租戶共享同一個Database、同一個Schema,而另行通過TenantID區分租戶數據的方式。

優點:每個數據庫可支持租戶數量多,維護和購置成本低;

缺點:

A. 隔離級別低,安全性低,開發時需做大量安全開發工作;

B. 逐表逐條備份和還原數據,數據備份和恢復困難。

三種數據存儲方案的比較

 

 
 

但究竟選擇何種方式,則取決於產品定價策略和租戶對數據安全的接受程度。

2. 系統安全性設計

系統級:

A. 使用HTTPS傳輸協議,以SSL(Security Socket Layer)交換數據,加強通信安全

B. 使用數字簽名,防止傳輸過程被篡改;

C. 使用DES數據加密算法,設計用戶身份識別;

D. 定時備份業務數據;

程序級:

A. 權限配置(功能權限、數據權限等)

B. 客戶端輸入校驗,防止JS和XXS攻擊、SQL注入等;

C. 輔助安全設計,如密碼控件、圖片驗證、手機驗證等。

3. 租戶管理

注冊、訂購、計費等管理。

注冊

 

 
 

Tenant:租戶

User: 租戶下 的用戶,同一租戶下可以有多個用戶;

Tenant的status屬性,用於定義租戶狀態(待審核、已審核、啟用、禁用、取消),賦予租戶能否登陸的權限。

訂購

 

 
 

PricePolicy:價格策略,支持按時間(年、月、日)、次數計價,以unit表示;

Subsciber: 訂購記錄,記錄租戶選用了何種價格策略,以及服務期限或服務次數。

計費

 

 
 

Journal:流水賬,記錄租戶使用服務的日志,用於生成賬單和報表;

4、數據隔離

 

 
 

為每個需要隔離的業務表加上Tenant_ID字段,以實現租戶數據間的隔離,這是最通常的做法。

(部分內容參考了網絡)

公眾號(ID:9z營銷大數據)



作者:橘色對白
鏈接:https://www.jianshu.com/p/c11b19fc8110
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM