一、什么是多租戶
????????引申自百度百科:多租戶簡(jiǎn)單來說是指一個(gè)單獨(dú)的實(shí)例可以為多個(gè)組織服務(wù)。多租戶技術(shù)為共用的數(shù)據(jù)中心內(nèi)如何以單一系統(tǒng)架構(gòu)與服務(wù)提供多數(shù)客戶端相同甚至可定制化的服務(wù),并且仍然可以保障客戶的數(shù)據(jù)隔離。
????????個(gè)人對(duì)于多租戶的理解:通過一套統(tǒng)一的程序界面,來支持多個(gè)不同組織的業(yè)務(wù)需求(具有共性業(yè)務(wù)),通知保證不同組織之間的數(shù)據(jù)隔離。這種系統(tǒng)又稱為SaaS平臺(tái),
????????舉例來說,小A,小B,小C三人在合租一套三室一廳的房子,其中三人的臥室是屬于每個(gè)人的獨(dú)立空間,必須用各自門上的鑰匙才能打開,保證自己空間的私密性。同時(shí)三人又同時(shí)擁有如客廳、廚房、衛(wèi)生間等公共區(qū)域,屬于三人共同享有的資源。這個(gè)例子中的ABC三人,就屬于使用多租戶系統(tǒng)的不同機(jī)構(gòu)或企業(yè),他們所使用的軟件服務(wù)都運(yùn)行在統(tǒng)一系統(tǒng)平臺(tái)(同一套房子內(nèi)),多家機(jī)構(gòu)將會(huì)共用一套程序界面的系統(tǒng),使用系統(tǒng)提供的基本組件和工具(公用客廳廚房等公共區(qū)域),而且保證了不同機(jī)構(gòu)用戶數(shù)據(jù)的私密性(擁有各自的臥室)。但從字面意思上理解,租戶意思是只是租用,僅有系統(tǒng)的使用權(quán),可向房東申請(qǐng)空調(diào)、冰箱等的工具,但不能更改系統(tǒng)整體架構(gòu)。
? ? ? ? 多租戶系統(tǒng)更多的是對(duì)企業(yè)和組織的業(yè)務(wù)運(yùn)轉(zhuǎn)提供服務(wù),對(duì)于企業(yè)或組織而言,能夠賦予他們?cè)谄脚_(tái)上固有的身份特征,限制了其對(duì)于系統(tǒng)的操作行為和可控制系統(tǒng)權(quán)限。而對(duì)于實(shí)際操作系統(tǒng)用戶來說,可以給不同身份的用戶賦予不同業(yè)務(wù)動(dòng)作,來保障整體業(yè)務(wù)的正常運(yùn)轉(zhuǎn)
二、多租戶的基本框架
多租戶系統(tǒng)權(quán)限管理
???????一般來說多租戶系統(tǒng)的機(jī)構(gòu)比較簡(jiǎn)單,在創(chuàng)建租戶后,通過賦予用戶角色權(quán)限,來達(dá)到用戶控制租戶后臺(tái)權(quán)限功能的目的,這是大多數(shù)多租戶系統(tǒng)的設(shè)計(jì)解決方案,但在產(chǎn)品設(shè)計(jì)階前,就需要先梳理清楚多租戶系統(tǒng)的業(yè)務(wù)架構(gòu),就好像是蓋房子一樣,先搭好框架,立好支柱,完善樓層,然后再確定房門、窗的位置等。在一般的企業(yè)或機(jī)構(gòu)后臺(tái)中權(quán)限管理的大體模式如下:

多租系統(tǒng)的權(quán)限管理邏輯如下:
? ??????1.將平臺(tái)資源打包成為獨(dú)立的功能權(quán)限,資源包括平臺(tái)功能菜單、用戶使用產(chǎn)生的數(shù)據(jù),以及列表字段等
? ??????2.設(shè)定角色權(quán)限以訪問系統(tǒng)資源,完成角色權(quán)限與平臺(tái)內(nèi)功能的關(guān)聯(lián)
? ??????3.角色可以關(guān)聯(lián)用戶或用戶組,也就是將系統(tǒng)資源授權(quán)給用戶或用戶組處理,完成訪問系統(tǒng)資源的操作
????????在實(shí)際操作上,每個(gè)租戶下的用戶都需要單獨(dú)生成訪問賬號(hào),用戶通過賬號(hào)才能登錄租戶系統(tǒng)使用軟件服務(wù)。租戶和用戶是一對(duì)多的關(guān)系,在實(shí)際業(yè)務(wù)場(chǎng)景種,一個(gè)租戶系統(tǒng)內(nèi)要根據(jù)業(yè)務(wù)模式區(qū)分為前端銷售、后端運(yùn)營(yíng)、服務(wù)人員等多種用戶角色,這些用戶都是在同一租戶下共享同一租戶數(shù)據(jù),但又因?yàn)闃I(yè)務(wù)模式不同,所享受的功能權(quán)限是不一樣的,這樣既能夠保證業(yè)務(wù)流轉(zhuǎn)過程中前后端數(shù)據(jù)統(tǒng)一,又能讓每個(gè)用戶業(yè)務(wù)單獨(dú)運(yùn)營(yíng),更能滿足多樣化的業(yè)務(wù)場(chǎng)景。
????????另外,多租戶系統(tǒng)的設(shè)計(jì)邏輯并不是一成不變的,有時(shí)也需要根據(jù)當(dāng)前業(yè)務(wù)不同對(duì)多租戶管理系統(tǒng)進(jìn)行改造,比如A機(jī)構(gòu)作為一家教育公司,自身不負(fù)責(zé)ToC業(yè)務(wù),而是與一些其他B端教育培訓(xùn)公司合作,將平臺(tái)商品打包售出,同時(shí)將銷售、運(yùn)營(yíng)等動(dòng)作交付給ToB機(jī)構(gòu),而自身只負(fù)責(zé)整體業(yè)務(wù)支撐和運(yùn)營(yíng)管理,就需要引入更多的概念已完成業(yè)務(wù)邏輯:

多租戶系統(tǒng)的搭建
針對(duì)前期合作機(jī)構(gòu)的共性需求,和前期內(nèi)部業(yè)務(wù)這一年的摸索,梳理出平臺(tái)多租戶系統(tǒng)的基本功能清單:

1.應(yīng)用管理
應(yīng)用創(chuàng)建是多租戶平臺(tái)最基礎(chǔ)信息,一般應(yīng)用接入都需要獨(dú)立的品牌信息,以注冊(cè)公眾號(hào)、小程序、軟件等信息。同時(shí)應(yīng)用是企業(yè)與企業(yè)之間數(shù)據(jù)隔離的關(guān)鍵,根據(jù)企業(yè)的要求,賦予功能或應(yīng)用定制的功能,功能可基于應(yīng)用層面進(jìn)行配置,具體所需功能需要上午提前線下溝通,再由線上手動(dòng)配置完成。
2.租戶管理
租戶管理可支持平臺(tái)應(yīng)用下細(xì)分多個(gè)租戶登錄系統(tǒng),同時(shí)租戶與租戶之間數(shù)據(jù)保持隔離,在應(yīng)用所有的權(quán)限下,可為不同租戶配置不同權(quán)限。而應(yīng)用層面的管理員可獲取所有租戶數(shù)據(jù)信息,對(duì)租戶賬戶、賬戶權(quán)限有直接管理權(quán)。
3.權(quán)限管理
一個(gè)賬號(hào)所擁有權(quán)限與角色息息相關(guān),當(dāng)角色權(quán)限設(shè)置完成后,再賦予到賬號(hào)上,這樣這個(gè)賬號(hào)就用了查看系統(tǒng)里指定功能的權(quán)利,如果需要修改某個(gè)賬號(hào)的權(quán)限,實(shí)際上修改的是賬號(hào)所關(guān)聯(lián)的角色,只需要對(duì)角色權(quán)限進(jìn)行修改即可。對(duì)于賬號(hào)而言,角色是賬號(hào)的一個(gè)屬性,沒有角色的賬號(hào)只有系統(tǒng)的登錄訪問權(quán)限,沒有數(shù)據(jù)查看和操作權(quán)。
4.數(shù)據(jù)安全
數(shù)據(jù)安全隔離其實(shí)對(duì)于某一個(gè)賬號(hào)來說是沒有感知的,但實(shí)際上每個(gè)使用環(huán)節(jié)都由數(shù)據(jù)隔離的體現(xiàn)。比如作為應(yīng)用可以給租戶配置哪些權(quán)限,單獨(dú)一個(gè)租戶可以看到哪些用戶信息等。而數(shù)據(jù)隔離的形式也分為三種:
? ??????1.獨(dú)立數(shù)據(jù)庫(kù);? ??2.共享數(shù)據(jù)庫(kù)通過數(shù)據(jù)表隔離;? ??3.共享數(shù)據(jù)庫(kù)和表字段
具體的這三種數(shù)據(jù)隔離形式如何區(qū)分可以參考:業(yè)務(wù)系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)常見的隔離和共享模式??進(jìn)行了解。
基于我們的業(yè)務(wù)場(chǎng)景選擇的是第三種數(shù)據(jù)隔離形式,實(shí)現(xiàn)成本更低,更易于后續(xù)維護(hù)。
三、具體的設(shè)計(jì)方案闡述
多租戶模型主要解決不同角色身份之間的相互流轉(zhuǎn),在實(shí)際業(yè)務(wù)運(yùn)轉(zhuǎn)中就涉及到幾個(gè)重要的環(huán)節(jié):庫(kù)存管理、銷售管理、運(yùn)營(yíng)管理
圍繞上面的業(yè)務(wù)需求,我首先介紹一下我們公司的多租戶平臺(tái)產(chǎn)品架構(gòu):

在這個(gè)業(yè)務(wù)模式中,最優(yōu)先保證的是平臺(tái)的基礎(chǔ)功能建設(shè),來滿足以下幾個(gè)層面的需求:
????? ??1.租戶賬號(hào)權(quán)限、身份認(rèn)證等基礎(chǔ)建設(shè)。
????? ??2.各租戶商品的采購(gòu)及商品流轉(zhuǎn),搭建完整的銷售鏈路,并具備基本的服務(wù)功能。
????? ??3.學(xué)生課時(shí)、課程信息、個(gè)人信息的增刪改查。
????? ??4.擴(kuò)展運(yùn)營(yíng)場(chǎng)景,提供統(tǒng)計(jì)報(bào)表。消息中心等服務(wù)。
????????在設(shè)計(jì)過程中,因?yàn)椴煌緲I(yè)務(wù)模式不同,設(shè)計(jì)方案也會(huì)不一樣。從上往下看,各企業(yè)或組織業(yè)務(wù)屬性要基本一致,需要統(tǒng)一的產(chǎn)品架構(gòu)來滿足基本的業(yè)務(wù)需求。從下網(wǎng)上看,不同機(jī)構(gòu)之間會(huì)有細(xì)微的需求差異,一些獨(dú)特的需求需要單獨(dú)配置,同時(shí)要根據(jù)獨(dú)特的需求來反推后續(xù)有哪些擴(kuò)展的共性需求。
四、后記
多租戶系統(tǒng)搭建基本框架就已經(jīng)建立起來的,在前期的構(gòu)架建立中,功能一般只是給到業(yè)務(wù)支撐來滿足基本業(yè)務(wù)運(yùn)轉(zhuǎn)的需要,會(huì)耗費(fèi)比較多時(shí)間且短期內(nèi)不容易見效的工作。然而真正的困難點(diǎn)在于接下來的運(yùn)營(yíng)過程中怎么樣去支持不同應(yīng)用之間的不同業(yè)務(wù)訴求,怎么樣讓產(chǎn)品、技術(shù)架構(gòu)怎么樣做的更靈活,同時(shí)產(chǎn)品預(yù)期不過于超前:
? ??????1.短視容易讓產(chǎn)品功能越來越臃腫,后期拓展的開發(fā)成本過高。
? ??????2.過于超前也容易帶來不必要的開發(fā)成本,拉長(zhǎng)開發(fā)周期且不容易見效。
以上就是我基于在所經(jīng)歷業(yè)務(wù)所整理的多租戶權(quán)限管理設(shè)計(jì)方案,文中有不正確的地方歡迎大家指正,歡迎大家隨時(shí)與我探討。