楠木軒

談談對多租户系統的簡要理解

由 費莫白竹 發佈於 科技

編輯導語:如今很多企業都引入了SaaS產品,那多租户也必然是SaaS的天然屬性之一;多租户意味着應用邏輯層面的隔離,如何好單租户以及多租户才是SaaS 應用多租户設計的核心關注點;本文作者詳細介紹了多租户系統的簡要理解,我們一起來看一下。

SaaS領域一般都會涉及到租户的概念,在設計SaaS體系時,最重要的環節之一就是租户系統的構建了;本文從如何構建多租户系統出發,簡要闡述對多租户系統的理解。

一、為什麼要搭建多租户系統

多租户是SaaS領域的特有產物,探究何為多租户需迴歸到對SaaS的理解上。

SaaS服務是指部署在雲上的,客户可以按需購買,並通過網絡請求就能獲取到的服務;也就是説,在這樣的場景下,會有N個客户同時使用同一套SaaS服務。

那麼對SaaS服務供應商來説,構建SaaS體系需要完成兩部分工作:上層服務+底層多租户系統。

上層服務是供應商對外售賣的軟件服務,其可以為客户創造價值、為公司帶來營收;而底層多租户系統則是SaaS模式實現的具體方式,公司在對外售賣SaaS服務時,需要考慮如何實現客户之間的數據隔離、服務的權限控制、計費管理等;因此需要引入多租户概念來解決上述問題。

通過多租户系統,公司可以更好的管理客户和上層服務,客户也可以更好的使用軟件服務。

這也就是多租户系統存在的意義了。

二、什麼是多租户系統

這裏借用一下百度百科對多租户的定義:多租户技術,是一種軟件架構技術,它是在探討與實現如何於多用户的環境下共享相同的系統或程序組件,並且仍可確保各用户間資料的隔離性;簡單來説是指一個單獨的實例可以為多個組織服務。

其中涉及到了很多的細節點,需要進行説明一下,加深對多租户的理解。

首先是對租户概念的理解。租户是指被賦予了SaaS服務使用權的企業組織,即客户。

SaaS服務供應商根據客户購買需求在多租户系統中配置對應的軟件服務版本,生成租户賬號,客户拿到租户賬號之後就可以使用SaaS服務,那麼該客户就是該SaaS服務的一個租户。

一般來説,租户和客户兩者是一對一的關係,客户買了a軟件服務,開通了一個租户賬號,後來又買了b軟件服務;此時只需在給之前的租户賬號上配置b軟件服務的使用權就可以,不需要在重新建立租户賬號。

由租户又可延伸到用户和角色這兩個概念,這三者是多租户系統中賬號和權限體系的重要組成部分,這裏面又是有非常大的可鑽研空間,後續會單獨補充。

其次是多租户與單租户的區別。租户可分為多租户和單租户,簡單一點理解就是——多租户是多個客户使用同一個實例,數據存儲在相同的位置,通過數據庫、數據表和tenantID字段三種方式進行數據隔離,適合標準化程度較高的場景;單租户是指多個客户使用多個實例,各個客户使用的實例和數據存儲單獨運行,更適合定製化需求場景。

最後是多租户系統與開放平台、aPaaS之間的區別;在查關於多租户系統資料的時候,容易把這幾個平台概念和作用搞混,特此進行説明。

1)aPaaS指應用程序平台即服務,由PaaS衍生而來,PaaS面向開發者,提供軟件開發所需的平台環境(各類中間件等)或者以API、SDK的形式被客户應用調用;但由於應用開發成本和門檻較高,aPaaS出現,其幫助客户實現低代碼甚至0代碼開發應用

2)開放平台實際上是PaaS的一種表現形式,我們先來看一下開放平台的定義:軟件系統通過開放API或函數使得外部程序可以增加該軟件系統的功能或者使用該軟件系統的資源;常見的開放平台如微信開放平台、支付寶開放平台、釘釘開放平台等。舉例來説,第三方可以調用微信對外開放的微信登錄和微信支付接口來實現自己的服務,或者,ISV在微信開放平台上開發自己的小程序等

三者之間的區別是,aPaaS/PaaS/開放平台是軟件服務供應商為第三方提供幫助/服務的工具,多租户系統則是軟件服務商為自己的軟件服務提供幫助的工具。

三、如何搭建多租户系統

區別於傳統的軟件供應,在服務模式上,SaaS服務採用按需訂購模式;在底層設計上,SaaS服務核心點在於數據隔離與數據安全;那麼多租户系統作為SaaS模式實現的具體方式,自然也是關注上述幾個點。

具體來説,針對多租户使用者(客户和公司),多租户系統主要解決以下幾個層面的需求:

  • 租户註冊與身份認證、賬號管理、權限配置;
  • 計費方式、定價、收費、支付、欠費;
  • 應用增刪改查、代碼接入教程、應用監控、統計報表、消息中心;
  • 數據存儲方案、安全機制;

針對產品需求進行剖析,由需求引申到功能,梳理出多租户系統的基本功能清單。

備註:筆者負責的產品是基於SDK開發出來的SaaS服務,因此客户使用服務時需配置應用集成SDK,並非是提供SDK標準接口供第三方直接調用或二次開發;所以本次多租户系統的搭建會和直接部署使用SaaS服務(如ERP、CRM)的有所不同,但又會和開放平台的搭建存在相似之處。

多租户系統使用者是客户和公司內部管理員,可將多租户系統的功能劃分為兩類:面向公司內部管理員和麪向客户,兩類功能通過權限來進行數據範圍訪問控制。

面向公司內部管理員的功能主要有:租户管理、產品管理、計費管理中的計費方案、權限管理、運營管理;面向客户的功能主要有:權限管理、應用管理、運營管理、計費管理中的充值、賬單等。

1. 租户管理

客户接入服務時,需提供公司名稱、機構代碼等信息,經過審核後創建租户賬號,租户賬號中的產品權限、功能權限等配置可根據客户選擇接入的產品版本自動配置;或者由商務線下溝通,線上手動完成配置。

2. 產品管理、計費管理

SaaS服務對外售賣時會分為多個不同的版本,比如按用量或按功能來劃分,因此一般需設計多種計費方案,公司按照不同的計費方案來配置產品版本和權限。

客户使用不同的產品版本時,涉及到購買、賬户充值、支付、賬單管理,以及續費、欠費、產品升級等。

3. 權限管理

客户的公司在使用服務時,總會涉及到權限問題:哪些人只能使用服務的一個功能,哪些數據只能高層看等等,這時可以通過對角色和用户進行權限分配。

一般來説,先設置角色,對角色賦予權限,然後再將角色賦予到用户上,這樣用户就有了該角色所擁有的權限,需要進行權限修改時,只需修改角色的權限就可。

在用户管理中可以導入客户公司的組織架構,包括人員、崗位、部門等,對特定人員、崗位、部門賦予角色權限就可。

4. 應用管理

有的SaaS服務需要先接入SDK進行使用,這時就需要客户先創建應用,添加SDK代碼;公司提供SDK接入教程、接口規則、接入限制等;當應用調用服務時,一般需要校驗簽名、防止亂塞數據。

5. 運營管理

客户和公司都需要對服務的使用情況進行監控,通過統計報表進行可視化展示,當出現異常情況或服務快到期時,進行消息提醒。

6. 數據隔離與安全

數據隔離和數據安全是圖中沒有體現出來的部分,但實際上體現在每一個使用環節。

數據隔離方式分為三類:獨立數據庫、共享數據庫通過數據表隔離、共享數據庫和表通過字段隔離;一般來説,數據隔離可以按租户和租户下面的應用兩種方式進行隔離。

數據安全包括應用和敏感數據加密、身份認證、權限控制、網絡監控、數據傳輸、IP地址管控、黑白名單等。

四、多租户系統的設計

有了功能模塊之後,如何將功能模塊串聯起來,只有在實際的業務場景中跑的通的系統才有價值,這也能幫助我們對多租户系統的設計有更全面的認知。

一個典型的SaaS服務購買流程是:免費試用申請→demo體驗→付費購買→使用服務→續費or取消服務。

將這一過程展開,可得到下面具體的業務流程。

有幾個注意事項:

1)多租户系統和SaaS服務系統使用同一套賬號體系,同一用户免費試用和正式付費階段賬號不變,通過權限控制訪問範圍就可。

2)免費試用階段可以給客户提供兩個選擇,接入SDK和不接入SDK試用demo,後者是mock數據讓客户體驗,但正式付費後還是需要接入SDK。

3)SDK接入之後,會先在測試環境跑通,在發佈到生產環境,兩個環境通過參數進行區分。

4)計費方案中期限和使用額度應該配置在租户賬號下還是配置在具體的應用下?分不同情況而定:

一般來説,對於按量(調用次數、人數等)售賣的SaaS服務來説,期限和使用額度配置在租户賬號下,也就是説,SaaS服務供應商不需要關心客户具體是怎麼使用的服務的,只需要在租户層面控制服務的使用期限和使用額度就好。

另外一種情況,對於按以單個應用為服務整體不可拆分的SaaS服務來説,使用期限配置在應用層面,比如騰訊雲的移動應用安全產品。

5)免費試用到期和正式付費後不再續費的租户,一般會由商務進行跟進,如果完成不了轉化,對於這些到期賬號下的數據,一般在保存1個月後自動刪除

五、後記

至此,一個簡單的多租户系統就搭建起來了,可大概窺見全貌;但是,實際上,這套多租户體系中仍然有非常多需要深挖的細節,比如權限管理、計費方案設計等,後續會出文章補充。

文中如有不正確的地方歡迎指正,也歡迎同行一起溝通交流呀~

本文由 @細嗅薔薇 原創發佈於人人都是產品經理,未經許可,禁止轉載

題圖來自 Unsplash,基於 CC0 協議