招商網(wǎng)站大全seo技術(shù)推廣
前言:多租戶是SaaS(Software-as-a-Service)下的一個(gè)概念,意思為軟件即服務(wù),即通過網(wǎng)絡(luò)提供軟件服務(wù)。SaaS平臺供應(yīng)商將應(yīng)用軟件統(tǒng)一部署在自己的服務(wù)器上,客戶可以根據(jù)工作的實(shí)際需求,通過互聯(lián)網(wǎng)向廠商租用所需的應(yīng)用軟件服務(wù),按定購的服務(wù)多少和時(shí)間長短向廠商支付費(fèi)用,并通過互聯(lián)網(wǎng)獲得SaaS平臺供應(yīng)商提供的服務(wù)。SaaS服務(wù)尤其利于一些中小企業(yè),以低成本實(shí)現(xiàn)自己的軟件需求。
?一、SaaS多租戶簡介
1.1、SaaS多租戶概念
多租戶技術(shù)是一種軟件架構(gòu)技術(shù),它是在探討與實(shí)現(xiàn)如何于多用戶的環(huán)境下共用相同的系統(tǒng)或程序組件,并且仍可確保各用戶間數(shù)據(jù)的隔離性。它是為共用的數(shù)據(jù)中心內(nèi)如何以單一系統(tǒng)架構(gòu)與服務(wù)提供多數(shù)客戶端相同甚至可定制化的服務(wù),并且仍可保障客戶的數(shù)據(jù)隔離。簡單來說是一個(gè)單獨(dú)的實(shí)例可以為多個(gè)組織服務(wù)。
1.2、SaaS多租戶的優(yōu)勢
-
開發(fā)和運(yùn)維成本低
-
按需付費(fèi),節(jié)約成本
-
即租即用,軟件版本更新快
-
故障排查更及時(shí)
-
大數(shù)據(jù)和AI的能力支持更強(qiáng)大
1.3、為什么要搭建多租戶系統(tǒng)?
多租戶是SaaS領(lǐng)域的特有產(chǎn)物,探究何為多租戶需回歸到對SaaS的理解上。
SaaS服務(wù)是指部署在云上的,客戶可以按需購買,并通過網(wǎng)絡(luò)請求就能獲取到的服務(wù);也就是說,在這樣的場景下,會有N個(gè)客戶同時(shí)使用同一套SaaS服務(wù)。
那么對SaaS服務(wù)供應(yīng)商來說,構(gòu)建SaaS體系需要完成兩部分工作:上層服務(wù)+底層多租戶系統(tǒng)。
上層服務(wù)是供應(yīng)商對外售賣的軟件服務(wù),其可以為客戶創(chuàng)造價(jià)值、為公司帶來營收;而底層多租戶系統(tǒng)則是SaaS模式實(shí)現(xiàn)的具體方式,公司在對外售賣SaaS服務(wù)時(shí),需要考慮如何實(shí)現(xiàn)客戶之間的數(shù)據(jù)隔離、服務(wù)的權(quán)限控制、計(jì)費(fèi)管理等;因此需要引入多租戶概念來解決上述問題。
通過多租戶系統(tǒng),公司可以更好的管理客戶和上層服務(wù),客戶也可以更好的使用軟件服務(wù)。這也就是多租戶系統(tǒng)存在的意義了。
1.4、多租戶模型
如圖所示,涉及主要模型有以下幾類:
(1)租戶:指一個(gè)企業(yè)客戶或是個(gè)人客戶,租戶之間數(shù)據(jù)與行為隔離,上下級租戶間通過授權(quán)實(shí)現(xiàn)數(shù)據(jù)共享。每個(gè)租戶只能操作歸屬或授權(quán)給該租戶的數(shù)據(jù);
(2)組織:如果租戶是一個(gè)企業(yè)客戶,通常就會擁有自己的組織架構(gòu);
(3)用戶:租戶下的具體使用者,擁有用戶名、密碼、郵箱等賬號信息的自然人;
(4)角色:用戶操作權(quán)限的集合;
(5)員工:組織內(nèi)的某位員工;
(6)解決方案:為了解決客戶的某類型業(yè)務(wù)問題,SaaS供應(yīng)商一般都將產(chǎn)品和服務(wù)組合在一起,為客戶提供整體的打包方案;
(7)產(chǎn)品能力:能夠幫助客戶實(shí)現(xiàn)場景解決方案閉環(huán)的能力;
(8)資源域:用來運(yùn)行1個(gè)或多個(gè)產(chǎn)品應(yīng)用的一套云資源環(huán)境;
(9)云資源:SaaS產(chǎn)品一般都部署在各種云平臺上,例如阿里云、騰訊云、華為云等。對這些云平臺提供的計(jì)算、存儲、網(wǎng)絡(luò)、容器等資源,抽象為云資源。
?二、SaaS多租戶的數(shù)據(jù)隔離設(shè)計(jì)方案??
2.1、三種多租戶數(shù)據(jù)隔離方案
多租戶對于用戶來說,最主要的一點(diǎn)就在于數(shù)據(jù)隔離。不能出現(xiàn),我登了A用戶單位的號,但是看到了B用戶單位的數(shù)據(jù)。因此,多租戶的數(shù)據(jù)庫設(shè)計(jì)方案和代碼實(shí)現(xiàn)就相當(dāng)有必要考慮了。
目前開發(fā)者們普遍接受的SaaS多租戶設(shè)計(jì)方案,常見的大概就3種:
即為每個(gè)租戶提供獨(dú)立的數(shù)據(jù)庫、獨(dú)立的表空間、按字段區(qū)分租戶,每種方案都有其各自的適用情況。
- 一個(gè)租戶獨(dú)立一個(gè)數(shù)據(jù)庫
一個(gè)租戶獨(dú)立使用一個(gè)數(shù)據(jù)庫,那就意味著我們的SaaS系統(tǒng)需要連接多個(gè)數(shù)據(jù)庫,這種實(shí)現(xiàn)方案其實(shí)就和分庫分表架構(gòu)設(shè)計(jì)是一樣的,好處就是數(shù)據(jù)隔離級別高、安全性好,畢竟一個(gè)租戶單用一個(gè)數(shù)據(jù)庫,但是物理硬件成本,維護(hù)成本也變高了。
- 獨(dú)立的表空間
這種方案的實(shí)現(xiàn)方式,就是所有租戶共用一個(gè)數(shù)據(jù)庫系統(tǒng),但是每個(gè)租戶在數(shù)據(jù)庫系統(tǒng)中擁有一個(gè)獨(dú)立的表空間。
- 按租戶id字段隔離租戶
這種方案是多租戶方案中最簡單的數(shù)據(jù)隔離方法,即在每張表中都添加一個(gè)用于區(qū)分租戶的字段(如tenant_id或org_id啥的)來標(biāo)識每條數(shù)據(jù)屬于哪個(gè)租戶,當(dāng)進(jìn)行查詢的時(shí)候每條語句都要添加該字段作為過濾條件,其特點(diǎn)是所有租戶的數(shù)據(jù)全都存放在同一個(gè)表中,數(shù)據(jù)的隔離性是最低的,完全是通過字段來區(qū)分的,很容易把數(shù)據(jù)搞串或者誤操作。
2.2、三種數(shù)據(jù)隔離架構(gòu)設(shè)計(jì)的對比如下:
隔離方案 | 成本 | 支持租戶數(shù)量 | 優(yōu)點(diǎn) | 缺點(diǎn) |
---|---|---|---|---|
獨(dú)立數(shù)據(jù)庫系統(tǒng) | 高 | 少 | 數(shù)據(jù)隔離級別高,安全性,可以針對單個(gè)租戶開發(fā)個(gè)性化需求 | 數(shù)據(jù)庫獨(dú)立安裝,物理成本和維護(hù)成本都比較高 |
獨(dú)立的表空間 | 中 | 較多 | 提供了一定程度的邏輯數(shù)據(jù)隔離,一個(gè)數(shù)據(jù)庫系統(tǒng)可支持多個(gè)租戶 | 數(shù)據(jù)庫管理比較困難,表繁多,同時(shí)數(shù)據(jù)修復(fù)稍復(fù)雜 |
按租戶id字段區(qū)分 | 低 | 多 | 維護(hù)和購置成本最低,每個(gè)數(shù)據(jù)庫能夠支持的租戶數(shù)量最多 | 隔離級別最低,安全性也最低 |
大部分公司都是采用第三種多租戶設(shè)計(jì)方案:按租戶id字段隔離租戶?架構(gòu)設(shè)計(jì)實(shí)現(xiàn)多租戶數(shù)據(jù)隔離的。
2.3、MyBatis-Plus多租戶插件優(yōu)雅實(shí)現(xiàn)數(shù)據(jù)隔離?
該系統(tǒng)只有一個(gè)數(shù)據(jù)庫,所有租戶共用數(shù)據(jù)表。在每一個(gè)數(shù)據(jù)表中增加一列租戶ID,用以區(qū)分租戶的數(shù)據(jù)。增刪查改時(shí),一定要帶上租戶ID,否則就會操作到其他租戶的數(shù)據(jù)。因此,這里的設(shè)計(jì)一定要重點(diǎn)考慮。
? 我們要保證的就是一定不要忘記帶上租戶ID。一個(gè)很好的方案就是通過AOP的方案,隱式的為我們的每一個(gè)SQL帶上這個(gè)租戶ID。我個(gè)人是更喜歡使用MyBatisPlus來操作數(shù)據(jù)庫的。它提供了插件的機(jī)制,我們可以通過攔截它提供的四大組件的某些對象,某些方法,來操作SQL,動(dòng)態(tài)的為我們的SQL拼接上租戶ID字段。
? 當(dāng)然,MyBatis-Plus高版本提供了更加方便的攔截器,并且已經(jīng)將多租戶插件放入JAR包,我們只需稍加實(shí)現(xiàn),并將該插件加入到MyBatis的攔截器鏈中,就可以不用再顯式的拼接租戶ID字段了,降低了出錯(cuò)的概率。
篇幅有限,如果有興趣查看我寫的這篇文章:MyBatisPlus實(shí)現(xiàn)多租戶功能
參考鏈接:
數(shù)云融合丨 一文讓你弄懂多租戶數(shù)據(jù)庫設(shè)計(jì)?案
SaaS架構(gòu):多租戶系統(tǒng)架構(gòu)設(shè)計(jì)
SaaS模式下,多租戶系統(tǒng)數(shù)據(jù)隔離實(shí)現(xiàn)方案
談?wù)剬Χ嘧鈶鬝aaS系統(tǒng)的簡要理解 - 知乎