真正意義上的SaaS一定是多租戶的,但是多租戶根據隔離程度的不同又分為不同模式。
多租戶根據隔離程度和共享程度分為三種模型,其實就是在共享程度與隔離程度的權衡選擇。
共享程度越高,租戶成本自然越低,技術實現難度越高,運維難度越大。
隔離程度越高,租戶成本自然越高,技術實現難度越低,運維難度越低。
三種多租戶模式
第一個示例使用每租戶的獨立應用程序和其自己的數據庫。
第二個示例使用多租戶應用,並且每個租戶都具有一個數據庫。
第三個示例使用多租戶應用,並且具有分片式多租戶數據庫。
三種模型,從左向右,資源共享程度依次變高,當然成本也就逐步下降,但與之帶來的就是技術難度也在大幅增加。
Standalone APP :“每租戶一個獨立應用程序”模式
“每租戶一個獨立應用程序”模式使用單個租戶應用程序,並且每個租戶具有一個數據庫。 每個租戶的應用,包括其數據庫,均部署到單獨的資源組。 可在服務提供商的訂閱或租戶的訂閱中部署資源組,並由提供程序代表租戶進行管理。 每租戶獨立應用程序模式提供了最佳的租戶隔離,但是它的經濟成本通常是最高的,因為無法跨多個租戶共享資源。 此模式非常適合於較為復雜並部署到較小數量的租戶的應用程序。 相較其他模式,使用獨立部署,能夠更輕松地為每個租戶自定義應用程序。
Database per Tenant:“每個租戶一個數據庫”模式
“每個租戶一個數據庫”模式適用於注重租戶隔離並想要運行集中式服務以經濟高效地使用共享資源的服務提供商。 將為每個場所或租戶創建數據庫,並集中管理所有數據庫。 數據庫可以托管在彈性池中,以便可以均衡無法預測的租戶工作負載模式,輕松並經濟高效地進行性能管理。目錄數據庫將保管租戶與其數據庫之間的映射。 使用彈性數據庫客戶端庫的分片映射管理功能管理此映射,從而為應用程序提供高效的連接管理功能。
Sharded Multi-tenant:分片式多租戶數據庫模式
多租戶數據庫適用於希望降低每個租戶的成本並可接受租戶隔離性降低的服務提供商。 此模式可將大量租戶封裝到單個數據庫,從而降低每個租戶的成本。 可以通過跨多個數據庫將租戶分片來實現幾乎無限制的縮放。 目錄數據庫將租戶映射到數據庫。
此模式還可實現混合模型,在此模型中可以通過將多個租戶置於一個數據庫中來優化成本,或通過將單個租戶置於他們自己的數據庫中來優化隔離。 在預配租戶時或在此之后,可以根據租戶做出選擇,並且不會影響此應用程序。 如果需要以不同的方式處理不同租戶組,使用此模式可獲得良好效果。 例如,可將低成本租戶分配到共享數據庫,而將高級租戶分配到其自己的數據庫。
多租戶技術實現
通用的多租戶,從 SaaS 角度講,多租戶牽涉到多個層面:底層硬件、操作系統、應用服務器、數據層、應用代碼等。每個層面的虛擬化策略,甚至是沒有任何虛擬化僅僅是邏輯上的分離策略,都是這個架構的一部分。
多租戶的設計牽涉到兩層:
-
數據
-
應用 / 平台
數據層的多租戶
數據層的三種多租戶架構:
1、獨立數據庫
2、共享數據庫、獨立 Schema
3、共享數據庫、共享 Schema、共享數據表
獨立數據庫是一個租戶獨享一個數據庫實例,它提供了最強的分離度,租戶的數據彼此物理不可見,備份與恢復都很靈活;共享數據庫、獨立 Schema 將每個租戶關聯到同一個數據庫的不同 Schema,租戶間數據彼此邏輯不可見,上層應用程序的實現和獨立數據庫一樣簡單,但備份恢復稍顯復雜; 最后一種模式則是租戶數據在數據表級別實現共享,它提供了最低的成本,但引入了額外的編程復雜性(程序的數據訪問需要用 tenantId 來區分不同租戶),備份與恢復也更復雜。這三種模式的特點可以用一張圖來概括:
三種部署模式的異同
上圖所總結的是一般性的結論,而在常規場景下需要綜合考慮才能決定那種方式是合適的。例如,在占用成本上,認為獨立數據庫會高,共享模式較低。但如果考慮到大租戶潛在的數據擴展需求,有時也許會有相反的成本耗用結論。
而多租戶采用的選擇,主要是成本原因,對於多數場景而言,共享度越高,軟硬件資源的利用效率更好,成本也更低。但同時也要解決好租戶資源共享和隔離帶來的安全與性能、擴展性等問題。畢竟,也有客戶無法滿意於將數據與其他租戶放在共享資源中。
參考
多租戶 SaaS 數據庫租戶模式
https://docs.microsoft.com/zh-cn/azure/sql-database/saas-tenancy-app-design-patterns
企業級PAAS平台-多租戶
https://blog.csdn.net/u013407595/article/details/34440435
使用 IBM 中間件實現 SaaS 解決方案
https://www.ibm.com/developerworks/cn/webservices/ws-middleware/
使用 IBM 中間件實現 SaaS 解決方案,第 2 部分: 啟用多租戶的方法
http://www.uml.org.cn/soa/200909102.asp
從定制開發,到多租戶架構 ¦ 看SAAS 的4級成熟度模型
https://www.jianshu.com/p/a401f951d560
淺析多租戶在 Java 平台和某些 PaaS 上的實現
https://www.ibm.com/developerworks/cn/java/j-lo-mutiltenancy/index.html
數據層的多租戶淺談
https://www.ibm.com/developerworks/cn/java/j-lo-dataMultitenant/
zz:https://blog.csdn.net/pan_tian/article/details/88202074