今天談下云平臺下的多租戶架構(gòu),不論是在公有云還是私有云平臺,是設(shè)計(jì)一個面向最終組織或用戶的SaaS應(yīng)用還是面向業(yè)務(wù)系統(tǒng)的PaaS平臺,多租戶都是前期架構(gòu)設(shè)計(jì)的一個關(guān)鍵內(nèi)容,因此有必要對里面的一些核心要點(diǎn)進(jìn)一步說明。
多租戶架構(gòu)概述
首先還是看下百度百科對多租戶的一些關(guān)鍵說明如下:
多租戶技術(shù)可以實(shí)現(xiàn)多個租戶之間共享系統(tǒng)實(shí)例,同時又可以實(shí)現(xiàn)租戶的系統(tǒng)實(shí)例的個性化定制。通過使用多租戶技術(shù)可以保證系統(tǒng)共性的部分被共享,個性的部分被單獨(dú)隔離。
通過在多個租戶之間的資源復(fù)用,運(yùn)營管理維護(hù)資源,有效節(jié)省開發(fā)應(yīng)用的成本。而且,在租戶之間共享應(yīng)用程序的單個實(shí)例,可以實(shí)現(xiàn)當(dāng)應(yīng)用程序升級時,所有租戶都可以同時升級。同時,因?yàn)槎鄠€租戶共享一份系統(tǒng)的核心代碼,因此當(dāng)系統(tǒng)升級時,只需要升級相同的核心代碼即可。
這段描述可能理解起來比較啰嗦,我們還是從簡單的場景來進(jìn)行說明。
比如我們開發(fā)一個SaaS云服務(wù)的CRM系統(tǒng)。這個系統(tǒng)部署在公有云端可以開放給多個企業(yè)客戶使用。那么我們就遇到了一個關(guān)鍵問題。即是否當(dāng)新入駐一個新的企業(yè)客戶的時候,我們都需要重新在部署一套應(yīng)用給這個客戶使用?
如果是這樣,那么當(dāng)新客戶入駐的時候,將帶來具體的人工投入和資源投入成本。
因此實(shí)際的情況是我們希望新增加客戶的時候,仍然還是已有的那套應(yīng)用系統(tǒng)。但是對于最終的入駐客戶來說,我們又希望客戶完全感知不到這點(diǎn),就像是單獨(dú)給他們部署了一套系統(tǒng)一樣。雖然很多客戶使用同一套應(yīng)用,但是能夠很好地做到資源和數(shù)據(jù)的隔離。
而這正好就是多租戶架構(gòu)的一個關(guān)鍵點(diǎn)。
多租戶,多組織,用戶區(qū)別
接著談下一些常見概念的關(guān)鍵區(qū)別。
多租戶和多組織
實(shí)際上在云計(jì)算和多租戶這些概念出來前,就已經(jīng)有多組織的概念。
比如常說的類似Oracle,SAP等ERP系統(tǒng)都是支持多組織架構(gòu)。多組織架構(gòu)簡單來說就是對于一個大的集團(tuán)性質(zhì)企業(yè),企業(yè)本身涉及到子公司或分公司,子公司可能涉及到獨(dú)立法人也可能涉及到需要獨(dú)立輸出財務(wù)報表,或者相關(guān)公司還在海外涉及到不同的財務(wù)和會計(jì)準(zhǔn)則。
基于以上各種場景持續(xù)了多組織架構(gòu)。
一個多組織架構(gòu)支撐集團(tuán)所有的企業(yè)都上同一套ERP系統(tǒng),里面通過法人,財務(wù)賬簿,OU等設(shè)置進(jìn)行了多組織的支撐。而不是單獨(dú)為一個子公司再去部署一套獨(dú)立的應(yīng)用系統(tǒng)。
從這個概念來看多組織和多租戶相當(dāng)類似。
那么兩者的關(guān)鍵區(qū)別點(diǎn)在哪里?
簡單總結(jié)來說多組織架構(gòu)重點(diǎn)考慮的是數(shù)據(jù)層面的隔離,但是對于多租戶架構(gòu)更多的還需要考慮資源層面的隔離。
多組織架構(gòu)一般不會考慮類似云平臺中的計(jì)費(fèi)和計(jì)量管理,數(shù)據(jù)隔離更多是為了后續(xù)財務(wù)和數(shù)據(jù)安全管控要求,而多租戶架構(gòu)則需要考慮計(jì)費(fèi)和計(jì)量管理。多組織架構(gòu)下一般資源全共享,而多租戶架構(gòu)下資源是否共享和資源安全管控要求相關(guān)。
租戶和用戶
租戶和用戶實(shí)際是不同的兩個概念,租戶更多的是為了資源管理和計(jì)費(fèi)計(jì)量使用,而用戶更多的是為了業(yè)務(wù)功能和授權(quán)使用。
租戶和用戶有時候也是一一對應(yīng)的關(guān)系,比如你開發(fā)一個面向個人用戶的在線郵箱SaaS應(yīng)用,那么這個時候租戶和用戶本身是對應(yīng)的,租戶即用戶。
但是如果你開發(fā)的是一個面向企業(yè)的SaaS應(yīng)用系統(tǒng),那么這個時候租戶對應(yīng)的是組織這個層面,即入駐的企業(yè)是租戶,對應(yīng)企業(yè)入駐后,SaaS應(yīng)用會先給企業(yè)分配一個管理員賬號,這個時候管理員再去詳細(xì)的錄入企業(yè)里面的具體用戶賬號。
也就是說租戶是第一層,而下面的組織架構(gòu)和用戶是第二層。
SaaS應(yīng)用和PaaS平臺的多租戶
注意對于SaaS應(yīng)用和PaaS平臺本身都有多租戶的概念。
對于SaaS應(yīng)用來說,比如一個toB的SaaS應(yīng)用服務(wù)。最終面對的是企業(yè)和最終用戶,因此每一個入駐的企業(yè)組織就是租戶。
而對于PaaS平臺來說,比如我們在企業(yè)內(nèi)部建設(shè)一個公共流程平臺,這個流程平臺即企業(yè)私有云內(nèi)部的PaaS平臺一部分,那么這個平臺本身也需要進(jìn)行多租戶設(shè)計(jì),而這個平臺的租戶實(shí)際是各個需要使用流程引擎能力的業(yè)務(wù)系統(tǒng)。對于類似容器云PaaS平臺,消息,緩存各種PaaS技術(shù)服務(wù),都可以看到實(shí)際上各個業(yè)務(wù)系統(tǒng)就是最終的租戶。
還是拿上面的例子來說。
如果企業(yè)內(nèi)部的公共流程平臺提供給多個業(yè)務(wù)系統(tǒng)開發(fā)商使用,類似用友在該企業(yè)本身開發(fā)了CRM和SRM兩個業(yè)務(wù)系統(tǒng)。
那么實(shí)際管理方式可以是CRM和SRM單獨(dú)進(jìn)行租戶申請和注冊。也可以是兩層結(jié)構(gòu),即還是先進(jìn)行組織申請,組織作為第一層租戶。但是組織接入后還需要維護(hù)需要接入的業(yè)務(wù)系統(tǒng),業(yè)務(wù)系統(tǒng)作為第二層租戶。第一層的組織實(shí)際只是一個抽象的租戶集的概念。
而實(shí)際的資源管理,計(jì)量計(jì)費(fèi)等可以細(xì)粒度地管理到業(yè)務(wù)系統(tǒng)這個層級。
多租戶架構(gòu)設(shè)計(jì)和資源隔離
在多租戶和云結(jié)合的情況下,IaaS基礎(chǔ)資源層的共享已經(jīng)會變化為最基本的要求。那么在Iaas層之上來談主要則包括兩個方面的內(nèi)容,即應(yīng)用是一套還是多套?數(shù)據(jù)庫是一套還是多套?最徹底的多租戶即上圖中的第6種share everything的模式,在這種模式下數(shù)據(jù)庫和應(yīng)用都為一套。
多租戶我們首先考慮隔離,在多租戶下的隔離包括了幾個方面的內(nèi)容。
一個是系統(tǒng)本身元數(shù)據(jù)和基礎(chǔ)主數(shù)據(jù)的隔離(用戶,角色,權(quán)限,數(shù)據(jù)字典,流程模板),一個是系統(tǒng)運(yùn)行過程中產(chǎn)生的動態(tài)數(shù)據(jù)的隔離,一個是業(yè)務(wù)系統(tǒng)底層所涉及到的計(jì)算資源和存儲資源的隔離。
在應(yīng)用一套,數(shù)據(jù)庫多套或多schema分離情況,我們比較容易實(shí)現(xiàn)計(jì)算資源和存儲資源的單獨(dú)分配,但是在完全share everthing的情況下,對于計(jì)算和存儲資源的隔離則需要我們的PaaS應(yīng)用本身去考慮。
在當(dāng)前云原生和容器下,整個動態(tài)部署和持續(xù)交付都更加容易,那么為了更好地進(jìn)行資源隔離,我們完全可以為單獨(dú)的大租戶動態(tài)的擴(kuò)展一套獨(dú)立的容器集群為該租戶服務(wù),即實(shí)現(xiàn)該租戶能夠單獨(dú)使用一組容器資源池而非共享。
在私有云下的多租戶,往往隔離又不是絕對的,在能夠完全隔離的情況下又需要支撐跨租戶或組織的數(shù)據(jù)共享,可以看到如果存在這種需求,在Share everthing的情況下是比較容易滿足的。
多租戶除了隔離外,另外一個重點(diǎn)就是能夠?yàn)楦鱾€租戶按需要實(shí)時地提供各種計(jì)算資源和存儲資源,而且有清楚定義的數(shù)據(jù)采集和計(jì)費(fèi)模型。由于資源池是共享的,我們必須要能夠準(zhǔn)確地采集到各個租戶對實(shí)際資源的使用情況,以方便進(jìn)行多租戶的計(jì)費(fèi)。
共享資源時候的資源隔離
當(dāng)在IaaS云平臺的時候,一臺物理機(jī)可以虛擬化為多臺虛擬云主機(jī)提供給不同的租戶使用,虛擬機(jī)可以做到在計(jì)算,網(wǎng)絡(luò),存儲等方面的資源邏輯隔離。也就是說一個租戶本身導(dǎo)致的虛擬機(jī)使用異?;蛐阅軉栴},并不會影響到其它租戶使用的虛擬機(jī)。
到了SaaS層多租戶,實(shí)際上仍然需要考慮租戶下面的資源管理,特別是在多個租戶共享一套底層資源的情況下。
比如當(dāng)前有A,B,C,D四個租戶在使用SaaS版本的CRM系統(tǒng),那么我們就需要考慮是不是會出現(xiàn)由于A租戶出現(xiàn)的大并發(fā)和大數(shù)據(jù)量訪問而導(dǎo)致了剩余的三個租戶無法正常使用系統(tǒng)。要做到這點(diǎn),我們就必須做到面向租戶的服務(wù)容量控制,服務(wù)限流等能力。
多租戶下的資源計(jì)費(fèi)
如果是一個IaaS平臺的多租戶,可以看到對于彈性計(jì)算和彈性存儲資源都是單獨(dú)申請的,資源本身也是邏輯隔離,這個時候計(jì)費(fèi)相對簡單。
但是對于SaaS應(yīng)用來說,要做到按資源使用情況計(jì)費(fèi)就比較復(fù)雜。因此一般的SaaS應(yīng)用會簡單地根據(jù)用戶注冊數(shù),并發(fā)數(shù)或存儲容量分配來進(jìn)行組合計(jì)費(fèi)。當(dāng)然如果是非共享資源模式的多租戶架構(gòu),相當(dāng)來說就更加容易按資源使用來進(jìn)行計(jì)費(fèi)。
多租戶下的分域和分組
即使是資源完全共享下的多租戶架構(gòu),仍然不建議采用一個大集群來為所有租戶提供服務(wù),而是應(yīng)該對大集群進(jìn)行分域或分組,或者多大的集群資源進(jìn)行分區(qū)或分片處理。讓不同的租戶分配到不同的集群組或分片上面。
這樣做的好處可以避免單個大集群無限擴(kuò)展導(dǎo)致的性能問題和管理難度,同時也提升了整個應(yīng)用對外的容錯能力,比如A集群全部故障,還可以快速的將A集群流量切換到B集群。
多租戶下的數(shù)據(jù)庫擴(kuò)展
在公有云下的多租戶,如果采用完全共享的模式,還必須考慮數(shù)據(jù)庫的可擴(kuò)展性,多租戶架構(gòu)服務(wù)下的數(shù)據(jù)庫可以是獨(dú)立數(shù)據(jù)庫,共享數(shù)據(jù)庫但是Schema獨(dú)立,完全共享數(shù)據(jù)庫幾種模式。
獨(dú)立數(shù)據(jù)庫模式為每個租戶分配一個獨(dú)立的數(shù)據(jù)庫,其在SID層就是完全獨(dú)立的。而對于共享數(shù)據(jù)庫但是Schema獨(dú)立這種模式下,SID只有一個,但是當(dāng)入駐新的租戶的時候會單獨(dú)新生成一個獨(dú)立的Schema。
最后一種模式就是完全共享數(shù)據(jù)庫,SID和Schema都只有一套,在這種模式下核心是所有數(shù)據(jù)庫表都需要增加租戶ID字段對數(shù)據(jù)進(jìn)行多租戶隔離,以保障某一個租戶登錄系統(tǒng)只能夠看到自己租戶下的相關(guān)信息。如果是一個完整的多租戶應(yīng)用,還需要考慮第二層按用戶,組織,角色群組等進(jìn)行第二級的數(shù)據(jù)隔離,以滿足業(yè)務(wù)系統(tǒng)的使用需求。
可以看到獨(dú)立數(shù)據(jù)庫模式資源利用率低,但是數(shù)據(jù)隔離性最好;而完全共享模式下資源利用率高,但是數(shù)據(jù)隔離性最弱。因此具體采用哪種模式仍然需要根據(jù)實(shí)際租戶的需求來進(jìn)行靈活創(chuàng)建和配置,一個靈活的SaaS應(yīng)用實(shí)際需要同時靈活支撐上面三種模式。
數(shù)商云全鏈數(shù)字化產(chǎn)品解決方案, 實(shí)現(xiàn)供應(yīng)鏈上中下游資源整合管理
--------
供應(yīng)鏈系統(tǒng) / 供應(yīng)商系統(tǒng) / B2B電商系統(tǒng) / 采購系統(tǒng) / 渠道商系統(tǒng) / 經(jīng)銷商系統(tǒng)
0 費(fèi) 用 系 統(tǒng) 演 示
▼
文章來源:人月聊IT,作者:何明璐;
編輯:云朵匠 | 數(shù)商云(微信ID:shushangyun_com)
【數(shù)商云www.zhimaihui.cn】致力于提供企業(yè)級的商城開發(fā)服務(wù),長期為大中型企業(yè)打造數(shù)據(jù)化、商業(yè)化、智能化的saas多租戶商城系統(tǒng)解決方案,同時我們還提供B2B電子商務(wù)平臺、B2B2C多用戶商城系統(tǒng)、B2C電子商務(wù)系統(tǒng)、跨境進(jìn)口電商平臺、供應(yīng)商系統(tǒng)、新零售電商平臺、直播電商系統(tǒng)等一系列供應(yīng)鏈平臺定制開發(fā)服務(wù)。
評論