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






























