云計算多租戶幾乎用于所有軟件即服務 (Software as a Service, SaaS) 應用程序,因為計算資源是可伸縮的,而且這些資源的分配由實際使用決定。話雖如此,用戶可以通過 Internet 訪問多種類型的 SaaS 應用程序,從小的基于 Internet 的小部件到大型企業軟件應用程序。根據存儲在企業網絡之外的軟件供應商的基礎架構上的數據不同,安全需求也在不斷增長。應用程序需要多租戶是有許多原因的,其中最明顯的原因就是成本:在大多數情況下,為每個客戶增加幾個服務器和一個數據庫是遠遠不夠的,盡管在安全要求很高的情況下這么做有點用處。
多租戶就是說多個租戶共用一個實例,租戶的數據既有隔離又有共享,說到底就是如何解決數據存儲的問題。
現在SaaS Multi-Tenant在數據存儲上存在兩大類共三種主要的方案,分別是:獨立數據庫和共享數據庫,其中共享數據庫又可分為共享數據庫,隔離數據架構和共享數據庫,共享數據架構。下面就分別對這三種方案進行介紹:
獨立數據庫:
這是第一種方案,即一個Tenant一個Database,這種方案的用戶數據隔離級別最高,安全性最好,但成本也高。
優點:
為不同的租戶提供獨立的數據庫,有助于簡化數據模型的擴展設計,滿足不同租戶的獨特需求;如果出現故障,恢復數據比較簡單。
缺點:
增大了數據庫的安裝數量,隨之帶來維護成本和購置成本的增加。
這種方案與傳統的一個客戶、一套數據、一套部署類似,差別只在于軟件統一部署在運營商那里。如果面對的是銀行、醫院等需要非常高數據隔離級別的租戶,可以選擇這種模式,提高租用的定價。如果定價較低,產品走低價路線,這種方案一般對運營商來說是無法承受的。
共享數據庫,隔離數據架構
這是第二種方案,即多個或所有租戶共享Database,但一個Tenant一個Schema
優點:
為安全性要求較高的租戶提供了一定程度的邏輯數據隔離,并不是完全隔離;每個數據庫可以支持更多的租戶數量。
缺點:
如果出現故障,數據恢復比較困難,因為恢復數據庫將牽扯到其他租戶的數據;如果需要跨租戶統計數據,存在一定困難。
共享數據庫,共享數據架構
這是第三種方案,即租戶共享同一個Database、同一個Schema,但在表中通過TenantID區分租戶的數據。這是共享程度最高、隔離級別最低的模式。
優點:
三種方案比較,第三種方案的維護和購置成本最低,允許每個數據庫支持的租戶數量最多。
缺點:
隔離級別最低,安全性最低,需要在設計開發時加大對安全的開發量;數據備份和恢復最困難,需要逐表逐條備份和還原。
如果希望以最少的服務器為最多的租戶提供服務,并且租戶接受以犧牲隔離級別換取降低成本,這種方案最適合。
總結
三種方案好比學生分宿舍,隔離數據庫就好比10名學生一人一個宿舍,每個人拿著自己宿舍的鑰匙,一般貴族學校才有的待遇,學生都得是土豪;共享數據庫,隔離數據架構就好比10名學生一個宿舍,沒人一把宿舍鑰匙,一般家庭的學生都能住;共享數據庫,共享數據架構就是家里條件比較差的學生,10個人一個宿舍,連宿舍鑰匙都配不起,大家只有一把鑰匙。
簡單的舉個例子,這三種方案各有優缺點,根據實際情況選擇合適的方案。以上內容是本人通過網上大牛的分享以及和小伙伴的交流加上自己的理解,有不足之處,請大家批評指正。