saas系統多租戶數據隔離的實現(一)數據隔離方案


0. 前言

前幾天跟朋友聚會的時候,朋友說他們公司准備自己搞一套saas系統,以實現多個第三方平台的業務接入需求。聊完以后,實在手癢難耐,於是花了兩天時間自己實現了兩個saas系統多租戶數據隔離實現方案。俗話說“獨樂樂不如眾樂樂”,所以我把我的“研究成果”寫出來,讓大家樂呵樂呵。

在分享我的研究成果之前,我們先了解一下相關的定義吧。如果對這部分內容熟悉的同學,可以直接略過。

 

1. 什么是saas系統

引用百度百科上面的描述, “SaaS平台是運營saas軟件的平台。SaaS提供商為企業搭建信息化所需要的所有網絡基礎設施及軟件、硬件運作平台,並負責所有前期的實施、后期的維護等一系列服務,企業無需購買軟硬件、建設機房、招聘IT人員,即可通過互聯網使用信息系統。SaaS 是一種軟件布局模型,其應用專為網絡交付而設計,便於用戶通過互聯網托管、部署及接入。”

也就是說,我只需要能連接上互聯網,並且給saas平台交租金,我就能用saas平台給我提供的系統服務。這方面最典型的例子就是各種雲平台,例如阿里雲。既然我能通過互聯網使用saas平台提供的服務,那么其他人當然也是可以的。於是這就產生了一個多租戶的問題。

 

2. 什么是多租戶

多租戶問題,簡單來說,是一種架構設計方式,就是在一台或者一組服務器上運行的saas系統,可以為多個租戶(客戶)提供服務,目的是為了讓多個租戶在互聯網環境下使用同一套程序,且保證租戶間的數據隔離。從這種架構設計的模式上,不難看出來,多租戶架構的重點就是同一套程序下多個租戶數據的隔離。由於租戶數據是集中存儲的,所以要實現數據的安全性,就是看能否實現對租戶數據的隔離,防止租戶數據不經意或被他人惡意地獲取和篡改。

 

3. 數據隔離方案 

目前saas多租戶系統的數據隔離有三種解決方案,即為每個租戶提供獨立的數據庫、獨立的表空間、按字段區分租戶,每種方案都有其各自的適用情況。下面我們依次講解這3種方案。

3.1 每個租戶提供獨立的數據庫系統

這種方案的實現方式是所有租戶共享同一個應用,但應用后端會連接多個數據庫系統,一個租戶單獨使用一個數據庫系統。這種方案的用戶數據隔離級別最高,安全性最好,租戶間的數據能夠實現物理隔離。但成本較高。

 

 

 

 

3.2 每個租戶提供獨立的表空間

這種方案的實現方式,就是所有租戶共享同一個應用,應用后端只連接一個數據庫系統,所有租戶共享這個數據庫系統,每個租戶在數據庫系統中擁有一個獨立的表空間。

 

 

 

 

3.3 按租戶id字段區分租戶

這種方案是多租戶方案中最簡單的設計方式,即在每張表中都添加一個用於區分租戶的字段(如租戶id或租戶代碼)來標識每條數據屬於哪個租戶,其作用很像外鍵。當進行查詢的時候每條語句都要添加該字段作為過濾條件,其特點是所有租戶的數據全都存放在同一個表中,數據的隔離性是最低的,完全是通過字段來區分的。

 

 

4. 三種數據隔離方案的優劣勢分析

隔離方案

成本

支持租戶數量

優點

不足

獨立數據庫系統 隔離級別最高,安全性最好,能夠滿足不同租戶的獨特需求,出現故障時恢復數據比較容易 數據庫需要獨立安裝,維護成本和購置成本高
共享數據庫,獨立表空間 較多 提供了一定程度的邏輯數據隔離,一個數據庫系統可支持多個租戶 出現故障的情況下,數據恢復相對而言比較復雜
按租戶id字段區分 非常多 維護和購置成本最低,每個數據庫能夠支持的租戶數量最多 隔離級別最低,安全性也最低,數據備份和恢復非常復雜,需要逐表逐條備份和還原

 

5. 為土豪准備的解決方案

前面咱們說的那三種數據隔離解決方案,都是多個租戶共享一個應用實例的。如果你是土豪,非常的不差錢,那這里就還有一種一個租戶一個應用實例的解決方案,直接為土豪量身定制,純24k鈦合金的。

 

這種方案是在多實例系統的基礎上進行負載均衡,將租戶的訪問請求路由到其專屬的租戶系統上去。這種多實例的部署架構,可以為每個租戶定制代碼,以及提供特色服務。當然,使用這種解決方案提供服務的租戶,那也肯定不差錢,能負擔高額租金的“大客戶”了。

 

總結

saas系統中需要解決的最核心的問題是租戶的數據隔離問題,我們看到解決這個問題有好幾種方式,這就需要我們在業務場景中去根據實際情況進行選擇。

下一篇文章,我們就來看一下,如何根據租戶id字段來實現同一張表中不同租戶的數據的crud(即增刪改查)。提前劇透一下,我們將使用 springboot + mybatis plus 來實現這種數據隔離方案。

 

參考資料

https://www.mingzhe.org/blog/2017/08/01/multiple-tenants-architecture-introduction/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM