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