1. 程式人生 > >區塊鏈領域填坑的java程式猿

區塊鏈領域填坑的java程式猿

概念:

多租戶(Multi Tenancy/Tenant)是一種軟體架構,其定義是:在一臺伺服器上執行單個應用例項,它為多個租戶提供服務。

在SaaS實施過程中,有一個顯著的考量點,就是如何對應用資料進行設計,以支援多租戶,而這種設計的思路,是要在資料的共享、安全隔離和效能間取得平衡。

傳統的應用,僅僅服務於單個租戶,資料庫多部署在企業內部網路環境,對於資料擁有者來說,這些資料是自己“私有”的,它符合自己所定義的全部安全標準。而在雲端計算時代,隨著應用本身被放到雲端,導致資料層也經常被公開化,但租戶對資料安全性的要求,並不因之下降。同時,多租戶應用在租戶數量增多的情況下,會比單租戶應用面臨更多的效能壓力。

SaaS(Software-as-a-Service)–軟體即服務,實施多租戶模式在資料儲存上存在三種主要的方案:

獨立資料庫

獨立資料庫是一個租戶獨享一個數據庫例項,它提供了最強的分離度,租戶的資料彼此物理不可見,備份與恢復都很靈活;這種方案的使用者資料隔離級別最高,安全性最好,但成本也高。

優點:

為不同的租戶提供獨立的資料庫,有助於簡化資料模型的擴充套件設計,滿足不同租戶的獨特需求;如果出現故障,恢復資料比較簡單。

缺點:

增大了資料庫的安裝數量,隨之帶來維護成本和購置成本的增加。

說明:

這種方案與傳統的一個客戶、一套資料、一套部署類似,差別只在於軟體統一部署在運營商那裡。如果面對的是銀行、醫院等需要非常高資料隔離級別的租戶,可以選擇這種模式,提高租用的定價。如果定價較低,產品走低價路線,這種方案一般對運營商來說是無法承受的。

共享資料庫、獨立 Schema(共享資料庫,隔離資料架構)

將每個租戶關聯到同一個資料庫的不同 Schema,即多個或所有租戶共享Database,但一個Tenant一個Schema。租戶間資料彼此邏輯不可見,上層應用程式的實現和獨立資料庫一樣簡單,但備份恢復稍顯複雜;

優點:

為安全性要求較高的租戶提供了一定程度的邏輯資料隔離,並不是完全隔離;每個資料庫可以支援更多的租戶數量。

缺點:

1.如果出現故障,資料恢復比較困難,因為恢復資料庫將牽扯到其他租戶的資料;
2 .如果需要跨租戶統計資料,存在一定困難。

共享資料庫、共享 Schema、共享資料表

租戶資料在資料表級別實現共享,它提供了最低的成本,但引入了額外的程式設計複雜性(程式的資料訪問需要用 tenantId 來區分不同租戶),備份與恢復也更復雜。

優點:

三種方案比較,第三種方案的維護和購置成本最低,允許每個資料庫支援的租戶數量最多。

缺點:

1.隔離級別最低,安全性最低,需要在設計開發時加大對安全的開發量;
2.資料備份和恢復最困難,需要逐表逐條備份和還原。

說明:

如果希望以最少的伺服器為最多的租戶提供服務,並且租戶接受以犧牲隔離級別換取降低成本,這種方案最適合。

比較:

這三種模式的特點可以用一張圖來概括:

這裡寫圖片描述

總結:

上圖所總結的是一般性的結論,而在常規場景下需要綜合考慮才能決定那種方式是合適的。例如,在佔用成本上,認為獨立資料庫會高,共享模式較低。但如果考慮到大租戶潛在的資料擴充套件需求,有時也許會有相反的成本耗用結論。

而多租戶採用的選擇,主要是成本原因,對於多數場景而言,共享度越高,軟硬體資源的利用效率更好,成本也更低。但同時也要解決好租戶資源共享和隔離帶來的安全與效能、擴充套件性等問題。畢竟,也有客戶無法滿意於將資料與其他租戶放在共享資源中。