吊打面試官!全網最全多租戶系統設計方案

架构师汤师爷發表於2024-11-21

大家好,我是湯師爺~

在當今的軟體行業中,SaaS(軟體即服務)模式正在迅速崛起。它改變了傳統的軟體使用方式。

多租戶技術是SaaS模式的核心,這項技術讓多個客戶可以共享同一個軟體系統,但每個客戶的資料都是獨立的,互不干擾。

本章將深入探討多租戶系統的概念、架構和實現方法。

多租戶概述

什麼是多租戶?

多租戶是SaaS(軟體即服務)領域裡特有的一個概念。在SaaS服務中,“租戶”指的就是使用這個SaaS系統的客戶。

那麼租戶和使用者有什麼區別呢?舉個例子,假設你正在使用一款面向企業(ToB)的SaaS產品,"使用者"通常指的是公司裡實際操作這個SaaS系統的員工。而"租戶"則代表整個公司或組織。也就是說,一個租戶下可能包含多個使用者。

多租戶技術是一種軟體架構,它允許多個租戶共享同一個系統例項,同時確保每個租戶的資料和行為互相獨立、互不干擾。換句話說,儘管所有租戶使用的是同一套系統,但各自的資料完全隔離,並且能夠保障安全性。

傳統軟體模式 VS SaaS模式

傳統的軟體專案,一般是指軟體公司根據客戶的需求,專門開發一套特定的軟體系統。然後,這個軟體被部署在一個獨立的環境裡,通常就是企業內部的伺服器上。

SaaS模式則不同,它將軟體服務部署在雲端環境中。不同的客戶都能透過瀏覽器或網路訪問,使用相同的軟體服務。就好比一家自助餐廳,準備了各種各樣的菜品,任何人都可以進來品嚐,不需要自己下廚做飯。

多租戶使用場景

對於面向企業(ToB)的SaaS產品,多租戶的使用場景一般涉及到三個使用角色:企業主、員工、SaaS平臺運營。

1、企業主

企業主,也就是公司的管理者,他們是SaaS平臺的直接客戶。企業主想要訂購和使用SaaS產品,首先要在SaaS平臺上建立一個“企業賬號”(也就是租戶)。

在這個過程中,企業主需要註冊一個公司賬戶並填寫相關資訊。完成後,SaaS平臺系統會為企業主建立一個專屬的"租戶空間"。

企業主隨後可以在這個空間內訂購所需的產品,並新增員工賬號。一旦員工被加入到租戶中,他們就能透過登入SaaS平臺來使用這些產品。

2. 員工

一個員工可能會被多個企業新增,即該使用者屬於多個租戶。這意味著員工在使用SaaS平臺時,需要根據情況,切換到對應的租戶。

例如,今天處理A公司的任務就切換到A公司,明天處理B公司的任務就切換到B公司。這種租戶切換設計讓員工能夠在多個企業賬號間自由切換,避免身份混淆影響使用體驗。

3. SaaS平臺運營

SaaS平臺運營團隊的主要職責是管理租戶。他們需要確保每個租戶的許可權、資源分配、產品都得到妥善管理。

例如,當企業主新增員工時,平臺必須確保該員工只能訪問所屬企業的資料。如果企業主想調整訂購的產品,SaaS平臺運營也能夠迅速響應。

租戶管理涉及許可權控制、資源排程、能力配置、計費管理等一系列複雜操作。SaaS平臺運營團隊的職責就是確保這一切運轉順暢。

SaaS多租戶隔離模式

SaaS多租戶隔離模式

在SaaS模式下,多租戶之間的資源隔離是基礎且關鍵的一環。SaaS服務商需要在確保運營效率和控制成本的前提下,搭建一個讓多個租戶能夠同時訪問的共享環境。

雖然大家都在用同一套SaaS產品服務,但資源訪問必須嚴格隔離,確保租戶之間互不干擾。SaaS資源隔離通常包含以下幾個層次:

1. 基礎設施的隔離

第一層主要指SaaS系統執行所依賴的基礎設施資源,比如計算資源(CPU、記憶體)、儲存資源(資料庫、檔案系統)、網路資源(IP、頻寬)等。

這些資源的隔離主要是為了確保不同租戶在使用系統時,互相之間不會因為資源競爭而受到影響。

2. 組織許可權的隔離

第二層隔離涉及組織許可權的隔離,包括組織資訊、使用者賬號、角色、許可權配置、產品授權關係等。這些資料決定了誰能用什麼功能,誰有操作哪些內容的許可權。

組織許可權隔離的目的是讓每個租戶擁有自己獨立的組織架構和許可權設定,不會因為其他租戶的操作而發生衝突。

3. 業務資料的隔離

最後一層隔離涉及系統執行過程中產生的業務資料,如訂單、發票、操作記錄和資料包表等。透過精細的資料許可權配置,這些資訊可以在不同組織單元間實現完全隔離,從而保障業務資訊的隱私性和安全性。

多租戶架構主要解決第一層的隔離問題,即計算、儲存和網路等資源的隔離。為了實現多租戶隔離架構,我們需要先了解幾種常見的多租戶隔離模式。

豎井隔離模式

有些 SaaS 服務商選擇豎井隔離模式,也就是每個租戶都執行在獨立的資源環境中。

有人會覺得,這不就是傳統軟體模式嗎?為什麼還是 SaaS?其實,如果這些獨立資源具備標準化的租戶身份識別、入駐流程、計費體系、部署和運營流程,那它仍然符合 SaaS 的定義,只不過是給每個客戶都提供了一整套獨立的基礎設施。

優點

  • 滿足強隔離需求:有些客戶對系統和資料的安全性有極高要求,期望能在完全獨立的環境中執行,避免與其他租戶的應用例項或資料混合。
  • 計費邏輯簡單:對 SaaS 服務商來說,資源使用計費可能很複雜,尤其是涉及計算、儲存和網路資源的場景。但在豎井模式下,每個租戶都是獨立環境,計費模式相對來說會簡單許多。
  • 降低故障影響面:因為每個客戶的系統都是獨立的,一個環境出問題不會影響其他客戶的使用體驗。

缺點

  • 規模化困難:每新增一個租戶就要建立一套獨立的環境,少量租戶還能應付,但面對成千上萬的租戶,管理和運營這些環境的難度會成倍增加。
  • 成本高:每個租戶單獨的環境讓機器成本上升,導致 SaaS 服務的盈利能力大打折扣。
  • 敏捷迭代受限:SaaS 的優勢之一是快速迭代響應市場需求,但豎井隔離模式讓這點變得不易操作,因為更新和管理每個租戶的獨立環境非常耗時、複雜。
  • 系統管理和監控複雜:在同一個環境中管理和監控基礎設施相對簡單,但每個租戶都獨立後,這種分散模式下的管理和監控會變得極具挑戰性。

共享模式

相信很多 SaaS 服務商會優先選擇共享模式,也就是多租戶共享一套基礎設施資源,這樣能讓 SaaS 軟體服務更加高效、敏捷、低成本。

優勢

  • 高效管理:在共享模式下,可以集中管理和運營所有租戶,極大提升管理效率。同時,基礎設施的配置管理和監控也更加簡單。相比豎井模式,共享模式下的產品迭代更新速度更快。
  • 成本低:SaaS 服務商的成本中,基礎設施佔很大比例。在共享模式下,服務商可以根據租戶的實際資源使用情況動態調整系統,極大提高基礎設施的利用率,從而降低整體成本。

劣勢

  • 租戶相互影響:因為所有租戶共享同一套資源,如果有租戶大量佔用資源,可能會影響其他租戶的使用體驗。為了解決這一問題,通常需要在技術架構上設計一些限制措施(如限流、降級、伺服器隔離等),以控制影響範圍。
  • 租戶計費困難:在豎井模式下,很容易統計單個租戶的資源消耗。而在共享模式中,由於所有租戶共用資源,準確計算每個租戶的使用成本會更加複雜,需要更多的精力和技術投入來實現合理的計費。

分域隔離模式

傳統大企業往往更青睞私有化部署和個性化交付的傳統模式,因為它們需要更強的管控能力和更高的安全性。而中小企業因為預算有限,需求通常也更標準化,因此更傾向於選擇價格低、訂購方便的 SaaS 產品。

為滿足不同客戶的需求,還有一種融合了豎井模式和共享模式的分域隔離模式。

在這種模式下,將資源細分為基礎域和專用域:基礎域使用共享模式,所有租戶共享一套資源;專用域則採用豎井模式,每個租戶擁有獨立的資源環境。

大多數中小客戶通常在基礎域中使用 SaaS 產品,而只有少數具備強付費能力並有強隔離需求的大客戶會選擇在專用域中執行 SaaS 產品。

需要注意的是,為避免產生多個產品版本,SaaS 服務商需確保基礎域和專用域的產品版本保持一致。

個性化需求儘可能透過 PaaS 平臺來實現,讓 ISV(獨立軟體開發商)參與建設。否則,一旦 SaaS 產品的標準化程度降低,多版本的維護將變得極其困難。

多租戶系統的定位

在瞭解了多租戶的使用場景,以及各種多租戶隔離模式後,我們可以總結一下多租戶系統的定位:

多租戶系統的核心目的是讓多個企業使用者共享一套SaaS產品,但同時確保企業之間的資料和行為是完全隔離的。透過這種設計,系統能夠在滿足不同使用者需求的同時,提供靈活的資源配置和高效的管理方式。

根據不同的使用者需求,多租戶系統可以在資源上做出調整,靈活支援資源的共享或隔離。例如,對於注重成本的客戶,可以採用共享的資源模式;而對於資料敏感度高的客戶,則可以採用豎井隔離等獨立的資源分配方式。

這種靈活性讓SaaS服務商可以在資源效率和客戶個性化需求之間找到平衡,不論是降低成本,還是滿足高安全需求,都有相應的方案。多租戶系統需要具備的能力包括:

  • 支援多個租戶共享同一套雲資源,如計算、儲存和網路資源等。同時,也支援單個租戶獨享一套雲資源。
  • 實現租戶之間的資料和行為隔離,並能夠對租戶進行分權分域控制。
  • 支援租戶內部的組織架構管理,方便對產品進行授權和管理。
  • 根據客戶需求,不同的產品功能可選擇執行在不同的雲資源上。

多租戶概念模型

我們已經瞭解了多租戶系統的定位和它需要具備的能力。現在,讓我們深入探討一下多租戶系統的概念模型。概念模型是多租戶系統的"骨架",幫助我們理解系統各部分的組織和運作方式。

多租戶的核心概念模型

  • 租戶:通常指一個企業客戶,不同租戶之間的資料和行為是相互隔離的。
  • 使用者:某個租戶內的具體使用者,使用賬號、密碼等資訊登入到 SaaS 系統,使用軟體服務。
  • 組織:如果租戶是企業客戶,通常會有自己的組織架構。
  • 員工:指組織內部的具體成員。
  • 解決方案:為解決客戶的特定業務問題,SaaS 服務商將產品與服務組合打包,提供整體解決方案。
  • 產品:SaaS 服務商售賣給客戶的軟體應用,能夠幫助客戶實現端到端流程的閉環解決方案。
  • 資源域:用於執行一個或多個軟體應用的一套雲資源環境。
  • 雲資源:SaaS 產品一般部署在各類雲平臺上(如阿里雲、騰訊雲、華為雲等),這些平臺提供的計算、儲存、網路、容器等資源,被抽象為雲資源。

SaaS平臺可以建立和管理多個平臺使用者、租戶和資源域,這樣的模型結構,可以讓多個企業客戶和使用者能在同一平臺上執行,而彼此之間的資料和資源獨立。

一個平臺使用者可以關聯到多個租戶。例如,張三作為一個平臺使用者,可以同時屬於租戶A和租戶B。這種設計讓平臺使用者能夠靈活切換所屬租戶,方便在不同企業賬號間工作。

在單個租戶中,也可以擁有多個使用者,讓企業內多名員工共享租戶的資源和服務。

單個租戶可以訂購多個解決方案,一個解決方案往往包含多個產品,以滿足企業客戶的多樣需求。這些產品可以執行在特定的資源域,保證不同產品在同一租戶中的高效管理和資源隔離。

租戶內的組織架構支援上下級關係,在單個組織單元內,可以配置多個員工,並將員工與平臺使用者繫結,便於員工透過自己的賬戶訪問相關服務。

概念模型的應用場景示例

1、租戶與內部模型關係

在SaaS產品中,租戶是最頂層的概念,可以理解為一個大房子的租賃人,而房子內部的組織、使用者、產品、雲資源等模型就像是這個房子裡的各種傢俱和設施。

換句話說,租戶是SaaS產品為每個客戶或企業專門劃分出的獨立空間,而組織、使用者、產品、雲資源等模型則是租戶內部的細分結構,為不同的使用需求和許可權分配提供支援。

  • 租戶:相當於整套房子的所有權,即租戶擁有這套房子在SaaS平臺中的使用權,是所有內部資源的頂層管理者。
  • 組織:類似房間的佈局,每個房間有特定的功能(比如子公司、部門),組織架構幫助企業在平臺內對映現實中的管理層級關係。
  • 使用者:就像在房子裡活動的人員,使用者被賦予不同的角色和許可權,決定了誰可以進入哪些房間,誰可以使用哪些傢俱。
  • 產品:如同家裡各種各樣的傢俱、電器、設施,滿足不同的需求。不同租戶可以選擇不同的產品組合,隨需增加或減少,來滿足他們的業務需求。
  • 雲資源:類似於水電煤等基礎設施,支援房子裡的各項功能正常執行,確保產品穩定、流暢地提供服務。

透過這種類比可以看出,SaaS產品將租戶作為最頂層的概念,為企業提供了一套獨立空間,租戶內部的各項資源則在這個框架下被靈活管理和使用,讓企業客戶可以獲得定製化的服務和資源隔離的安全保障。

2、租戶身份識別

在多租戶SaaS系統中,無論採用哪種隔離模式,準確識別租戶身份並獲取相應資源配置是非常關鍵的。

當使用者登入SaaS系統後,系統會生成並返回租戶上下文資訊。這個上下文資訊包括使用者關聯的租戶和對應的隔離模式(如共享或獨立資源)。

租戶上下文資訊會附加在每次系統互動中,貫穿整個系統呼叫鏈。從使用者請求到系統內部處理的每一步,都保留了租戶上下文。這樣,上游的請求處理模組就可以知道如何路由和訪問下游資源。

租戶上下文資訊讓系統能夠在請求傳遞過程中精準識別租戶身份和配置。系統會根據上下文動態選擇資料庫、應用例項或網路資源,實現資料和資源隔離,確保不同租戶的訪問互不干擾。

3、租戶計費計量管理

租戶的計費計量管理,是SaaS平臺不可或缺的一部分。不同的隔離模式下,計費方式有所不同。

豎井隔離模式下,計費相對簡單。因為每個租戶使用的資源(計算、儲存、網路等)都是單獨分配的,就像每個租戶有自己的一塊“獨立地盤”。

因此,我們只需統計每個租戶佔用的資源量,就能計算出費用。這種模式邏輯清晰,一目瞭然。

共享模式下,計費則比較複雜。因為多個租戶共享同一資源池,理想情況是,確保每個租戶只為自己實際用到的部分買單。

通常,我們會綜合考量幾個指標,比如請求的數量、儲存容量、建立的資料物件數量等。透過這些資料的組合,我們可以相對準確算出每個租戶的費用。

多租戶系統應用架構

我們剛剛探討了多租戶系統的概念模型和關鍵設計。現在,讓我們看下多租戶系統的應用架構是如何從一層層構建起來的。

1、應用層設計

應用層的主要作用是為具體的使用者場景提供應用服務,幫助使用者在特定場景下完成操作。透過編排領域層的各項能力,實現SaaS產品的核心功能。應用層包含兩個關鍵模組:

  • 租戶運營平臺模組:這個模組負責SaaS平臺的整體運營管理,包含客戶管理、租戶管理、雲資源管理、訂單管理、平臺使用者管理和資料分析等功能。它就像是平臺的“指揮中心”,保證租戶運營順暢,幫助平臺方掌控整體業務。
  • 商家後臺模組:這個模組主要為企業客戶服務,幫助他們自主管理相關功能。包括能力訂購管理、費用賬單管理、續費管理和能力授權管理。商家後臺讓客戶在平臺上方便管理自己訂購的服務,並能隨時檢視賬單和費用情況。
  • 開放平臺模組:該模組為第三方開發者或合作伙伴提供訪問和整合介面的能力。

2、領域層設計

領域層的核心是圍繞核心業務物件,提供可複用的業務能力,這是對系統整體複用和抽象的結果。它包含以下模組:

  • 租戶管理模組:負責租戶的入駐管理,包括租戶的資質認證與稽核,租戶隔離模式配置等。這個模組確保新租戶順利入駐,並設定合適的資源隔離模式。為租戶提供一個安全、獨立的使用環境。
  • 產品管理模組:負責產品版本配置、產品能力管理、產品生命週期管理等。
  • 雲資源管理模組:雲資源的管理、資源池管理、彈性伸縮策略等都在這個模組中實現。它為平臺提供強大的資源管理能力,確保資源配置合理。
  • 計費計量管理模組:涉及計費方案管理、訂購管理、履約、續費和賬單報表。這個模組是SaaS平臺收益的關鍵,確保平臺能夠精準收取租戶的費用,並且賬單清晰,續費順暢。
  • 運營管理模組:包括客戶運營、營銷管理、訂單管理和資料包表。該模組為平臺提供全面的運營支撐,幫助平臺提升客戶體驗、最佳化營銷策略,保持訂單和資料分析的良好運作。

本文已收錄於,我的技術網站:tangshiye.cn 裡面有,演算法Leetcode詳解,面試八股文、BAT面試真題、簡歷模版、架構設計,等經驗分享。

相關文章