云平臺之多租戶的實踐—實現多租戶支持的思路
前言
在云領域我們經常會聽到一個詞:多租戶。這個詞在不同的語境中有著不同的含義,接下來將從理論到實踐對以往的項目進行一次總結,同時實戰一個Demo。本篇先從理論介紹云平臺中的多租戶的概念以及實現多租戶支持的思路。
多租戶是什么
多租戶技術(Multi-TenancyTechnology)又稱多重租賃技術:是一種軟件架構技術,是實現如何在多用戶環境下 (此處的多用戶一般是面向企業用戶)共用相同的系統或程序組件,并且可確保各用戶間數據的隔離性。簡單講: 在一臺服務器上運行單個應用實例,它為多個租戶(客戶)提供服務。從定義中我們可以理解:多租戶是一種架 構,目的是為了讓多用戶環境下使用同一套程序,且保證用戶間數據隔離。那么重點就很淺顯易懂了,多租戶的重 點就是同一套程序下實現多用戶數據的隔離。
需求分析
傳統軟件模式,指將軟件產品進行買賣,是一種單純的買賣關系,客戶通過買斷的方式獲取軟件的使用權,軟件的 源碼屬于客戶所有,因此傳統軟件是部署到企業內部,不同的企業各自部署一套自己的軟件系統。
Saas模式,指服務提供商提供的一種軟件服務,應用統一部署到服務提供商的服務器上,客戶可以根據自己的實際 需求按需付費。用戶購買基于WEB的軟件,而不是將軟件安裝在自己的電腦上,用戶也無需對軟件進行定期的維護與管理。
在SaaS平臺里需要使用共用的數據中心以單一系統架構與服務提供多數客戶端相同甚至可定制化的服務,并且仍可 以保障客戶的數據正常使用。由此帶來了新的挑戰,就是如何對應用數據進行設計,以支持多租戶,而這種設計的 思路,是要在數據的共享、安全隔離和性能間取得平衡。
多租戶的數據庫方案分析
目前基于多租戶的數據庫設計方案通常有如下三種:
- 獨立數據庫
- 獨立 Schema 共享數據庫
- 共享數據庫且共享數據表
獨立數據庫
針對獨立數據庫的這種方式,首先需要業務層能夠支持多數據源的配置,并且為每個租戶創建或初始化一個數據庫。應用程序和數據庫都是獨立的實例,因此它不會與任何其他獨立實例交互。只為一個租戶提供服務,擁有獨立的服務、獨立的數據庫以及獨立的請求處理。
獨立數據庫:每個租戶一個數據庫。
- 優點:為不同的租戶提供獨立的數據庫,有助于簡化數據模型的擴展設計,滿足不同租戶的獨特需求;如果 出現故障,恢復數據比較簡單;
- 缺點: 增多了數據庫的安裝數量,隨之帶來維護成本和購置成本的增加。
這種方案與傳統的一個客戶、一套數據、一套部署類似,差別只在于軟件統一部署在運營商那里。由此可見此方案用戶數據隔離級別高,安全性好,但是成本較高。
共享數據庫、獨立 Schema
共享數據庫、獨立Schema模式,是將多個或所有租戶的數據放在一個數據庫服務中,但是為每一個租戶建立一個獨立的schema。租戶間數據彼此邏輯不可見,上層應用程序的實現和獨立數據庫一樣簡單。(補充:mysql數據中的schema比較特殊,并不是數據庫的下一級,而是等同于數據庫。)
- 優點:對于安全性要求較高的租戶,是一種選擇。提供了一定程度的邏輯數據隔離,但并不是完全隔離;每個數據庫可支持更多的租戶數量。
- 缺點:如果出現故障,數據恢復比較困難,因為恢復數據庫將牽涉到其他租戶的數據;如果需要跨租戶統計數據,存在一定困難。這種方案是方案一的變種。只需要安裝一份數據庫服務,通過不同的Schema對不同租戶的數據進行隔離。由于數據庫服務是共享的,所以成本相對低廉。
這種方案是方案一的變種。只需要安裝一份數據庫服務,通過不同的Schema對不同租戶的數據進行隔離。由于數據庫服務是共享的,所以成本相對低廉。
共享數據庫、共享數據表
共享數據庫、共享數據表:即租戶共享同一個Database,同一套數據庫表(所有租戶的數據都存放在一個數據庫 的同一套表中)。在表中增加租戶ID等租戶標志字段,表明該記錄是屬于哪個租戶的。
- 優點:所有租戶使用同一套數據庫,所以成本低廉。
- 缺點:隔離級別低,安全性低,需要在設計開發時加大對安全的開發量,數據備份和恢復困難。
這種方案和基于傳統應用的數據庫設計并沒有任何區別,但是由于所有租戶使用相同的數據庫表,所以需要做好對每個租戶數據的隔離安全性處理,這就增加了系統設計和數據管理方面的復雜程度。
選擇合理的實現模式
衡量三種模式主要考慮的因素是隔離還是共享。
成本角度因素
隔離性越好,設計和實現的難度和成本越高,初始成本越高。共享性越好,同一運營成本下支持的用戶越多,運營成本越低。
安全因素
要考慮業務和客戶的安全方面的要求。安全性要求越高,越要傾向于隔離。
從租戶數量上考慮
主要考慮下面一些因素
- 系統要支持多少租戶?上百?上千還是上萬?可能的租戶越多,越傾向于共享。
- 平均每個租戶要存儲數據需要的空間大小。存貯的數據越多,越傾向于隔離。
- 每個租戶的同時訪問系統的最終用戶數量。需要支持的越多,越傾向于隔離。
- 是否想針對每一租戶提供附加的服務,例如數據的備份和恢復等。這方面的需求越多, 越傾向于隔離
技術儲備
共享性越高,對技術的要求越高。