前言
什么是多租戶呢,你了解多租戶嗎,多租戶是什么呢
敘述
多租戶的歷史:
多租戶技術(shù)源于1960年代,許多公司為了要使用更多的運算資源,向持有大型主機(jī)(Mainframe)的供應(yīng)商租用一部分的運算資源,而這些用戶經(jīng)常會用到相同的應(yīng)用程序,當(dāng)時會以用戶在登錄系統(tǒng)時輸入的數(shù)據(jù)來決定用戶的帳戶ID,基于這個ID,Mainframe的供應(yīng)商即可利用此ID來計算運算的資源使用量,包含CPU,存儲器與軟盤或磁帶等,這個作法也被SAP公司用在其R/1到R/3的產(chǎn)品線。
到了1990年代,應(yīng)用程序服務(wù)提供者服務(wù)(application service provider)模式出現(xiàn),它的作法與運作模式與租用大型主機(jī)時相同,不過租用的資源是在軟件上,除了操作系統(tǒng)以外也包含了其上的應(yīng)用程序,例如ERP系統(tǒng)或是CRM等應(yīng)用,系統(tǒng)可能會運行在數(shù)臺不同的機(jī)器上,或是在相同的主機(jī)但共享不同的數(shù)據(jù)庫,以區(qū)分并計算客戶的資源使用量,藉以作為計費的標(biāo)準(zhǔn),而此技術(shù)也有效的縮減供應(yīng)商的實體機(jī)器成本(因為可以在一臺電腦上同時運行多個用戶所租用的應(yīng)用程序進(jìn)程)。到了現(xiàn)代,受歡迎的消費者導(dǎo)向Web應(yīng)用程序(如Hotmail或Gmail等)也是以單一應(yīng)用程序平臺來支持所有的用戶,這已經(jīng)是多租戶技術(shù)的自然演化的結(jié)果,多租戶技術(shù)也可以讓客戶中的一部份用戶得以進(jìn)一步定制化他們的應(yīng)用程序。
在虛擬化(virtualization)技術(shù)的成熟與應(yīng)用性的擴(kuò)張之下,多租戶技術(shù)可以駕馭虛擬化的平臺,更強(qiáng)化在用戶應(yīng)用程序與數(shù)據(jù)之間的隔離,讓多租戶技術(shù)能更加發(fā)揮它的特色。
什么是多租戶
** 內(nèi)涵:
定義:**
多租戶技術(shù)(英語:multi-tenancy technology)或稱多重租賃技術(shù),是一種軟件架構(gòu)技術(shù),它是在探討與實現(xiàn)如何于多用戶的環(huán)境下共用相同的系統(tǒng)或程序組件,并且仍可確保各用戶間數(shù)據(jù)的隔離性。
本質(zhì)上講:軟件架構(gòu)技術(shù)
通俗上講:
在多租戶技術(shù)中,租戶(tenant)是指使用系統(tǒng)或電腦運算資源的客戶,但在多租戶技術(shù)中,租戶包含在系統(tǒng)中可識別為指定用戶的一切數(shù)據(jù),舉凡帳戶與統(tǒng)計信息(accounting data),用戶在系統(tǒng)中建置的各式數(shù)據(jù),以及用戶本身的客制化應(yīng)用程序環(huán)境等,都屬于租戶的范圍,而租戶所使用的則是基于供應(yīng)商所開發(fā)或建置的應(yīng)用系統(tǒng)或運算資源等,供應(yīng)商所設(shè)計的應(yīng)用系統(tǒng)會容納數(shù)個以上的用戶在同一個環(huán)境下使用,為了要讓多個用戶的環(huán)境能力同一個應(yīng)用程序與運算環(huán)境上使用,則應(yīng)用程序與運算環(huán)境必須要特別設(shè)計,除了可以讓系統(tǒng)平臺可以允許同時讓多份相同的應(yīng)用程序運行外,保護(hù)租戶數(shù)據(jù)的隱私與安全也是多租戶技術(shù)的關(guān)鍵之一。
** 外延:**
技術(shù)上,多租戶技術(shù)可以通過許多不同的方式來切割用戶的應(yīng)用程序環(huán)境或數(shù)據(jù)。
數(shù)據(jù)面(data approach):供應(yīng)商可以利用切割數(shù)據(jù)庫(database),切割存儲區(qū)(storage),切割結(jié)構(gòu)描述(schema)或是表格(table)來隔離租戶的數(shù)據(jù),必要時會需要進(jìn)行對稱或非對稱加密以保護(hù)敏感數(shù)據(jù),但不同的隔離作法有不同的實現(xiàn)復(fù)雜度與風(fēng)險。
程序面(application approach):供應(yīng)商可以利用應(yīng)用程序掛載(hosting)環(huán)境,于進(jìn)程(process)上切割不同租戶的應(yīng)用程序運行環(huán)境,在無法跨越進(jìn)程通信的情況下,保護(hù)各租戶的應(yīng)用程序運行環(huán)境,但供應(yīng)商的運算環(huán)境要夠強(qiáng)。
系統(tǒng)面(system approach):供應(yīng)商可以利用虛擬化技術(shù),將實體運算單元切割成不同的虛擬機(jī),各租戶可以使用其中一至數(shù)臺的虛擬機(jī)來作為應(yīng)用程序與數(shù)據(jù)的保存環(huán)境,但對供應(yīng)商的運算能力要更要求。
為什么要用多租戶
使用多租戶帶來什么好處,意義是什么
第一,系統(tǒng)維護(hù)成本低
多租戶系統(tǒng)在系統(tǒng)升級時,只需要更新一次。
維護(hù)人員不需要對每個用戶更新,節(jié)省了很大的運維成本!
經(jīng)濟(jì):因為通過一個軟件實例被多個組織共享,從而減低了整體資源的消耗,也同時減低應(yīng)用運行的成本和相應(yīng)的管理開支。
第二,提高了數(shù)據(jù)安全性
在云計算環(huán)境下,很多應(yīng)用都放到了云端,導(dǎo)致在應(yīng)用入口,敏感數(shù)據(jù)泄露、數(shù)據(jù)訪問無詳細(xì)記錄、應(yīng)用冒名訪問開放接口;
在運維入口,開發(fā)人員賬號混用、操作無詳細(xì)記錄、高危險誤操作無法控制、敏感數(shù)據(jù)泄露
通過多租戶數(shù)據(jù)資源隔離機(jī)制,就可以保證數(shù)據(jù)的安全性。
三、管理方便:
首先,通過使用了多租戶架構(gòu)能減少物理資源和軟件資源,這將簡化管理,其次。由于多租戶軟件主要由有經(jīng)驗的云供應(yīng)商運營,所以能依賴那些非常經(jīng)驗的管理人員來提升效率。
怎么實現(xiàn)多租戶
實現(xiàn)的原理是什么
由于多租戶技術(shù)可以讓多個租戶共用一個應(yīng)用程序或運算環(huán)境,且租戶大多不會使用太多運算資源的情況下,對供應(yīng)商來說多租戶技術(shù)可以有效的降低環(huán)境建置的成本。包含硬件本身的成本,操作系統(tǒng)與相關(guān)軟件的授權(quán)成本都可以因為多租戶技術(shù),而由多個租戶一起分擔(dān)。
通過不同的數(shù)據(jù)管理手段,多租戶技術(shù)的數(shù)據(jù)可以用不同的方式進(jìn)行數(shù)據(jù)隔離,在供應(yīng)商的架構(gòu)設(shè)計下,數(shù)據(jù)的隔離方式也會不同,而良好的數(shù)據(jù)隔離法可以降低供應(yīng)商的維護(hù)成本(包含設(shè)備與人力),而供應(yīng)商可以在合理的授權(quán)范圍內(nèi)取用這些數(shù)據(jù)分析,以作為改善服務(wù)的依據(jù)。
多租戶架構(gòu)下所有用戶都共用相同的軟件環(huán)境,因此在軟件改版時可以只發(fā)布一次,就能在所有租戶的環(huán)境上生效。
具多租戶架構(gòu)的應(yīng)用軟件雖可客制,但客制難度較高,通常需要平臺層的支持與工具的支持,才可降低客制化的復(fù)雜度。
** 多租戶實現(xiàn)的過程中涉及到的技術(shù)是什么**
多租戶技術(shù)的實現(xiàn)重點,在于不同租戶間應(yīng)用程序環(huán)境的隔離(application context isolation)以及數(shù)據(jù)的隔離(data isolation),以維持不同租戶間應(yīng)用程序不會相互干擾,同時數(shù)據(jù)的保密性也夠強(qiáng)。
應(yīng)用程序部份:通過進(jìn)程或是支持多應(yīng)用程序同時運行的裝載環(huán)境(例如Web Server,像是Apache或IIS等)來做進(jìn)程間的隔離,或是在同一個伺服程序(server)進(jìn)程內(nèi)以運行緒的方式隔離。
數(shù)據(jù)部份:通過不同的機(jī)制將不同租戶的數(shù)據(jù)隔離,F(xiàn)orce是采用中介數(shù)據(jù)(metadata)的技術(shù)來切割,微軟 MSDN 的技術(shù)文件則是展示了使用結(jié)構(gòu)描述的方式隔離。
多租戶就是說多個租戶共用一個實例,租戶的數(shù)據(jù)既有隔離又有共享,從而解決數(shù)據(jù)存儲的問題。從架構(gòu)層面來分析,SaaS區(qū)別于傳統(tǒng)技術(shù)的重要差別就是Multi-Tenant模式。
SaaS多租戶在數(shù)據(jù)存儲上存在三種主要的方案,分別是
1.獨立數(shù)據(jù)庫
這是第一種方案,即一個租戶一個數(shù)據(jù)庫,這種方案的用戶數(shù)據(jù)隔離級別最高,安全性最好,但成本也高。獨立數(shù)據(jù)庫是一個租戶獨享一個數(shù)據(jù)庫實例,它提供了最強(qiáng)的分離度,租戶的數(shù)據(jù)彼此物理不可見,備份與恢復(fù)都很靈活
優(yōu)點:
為不同的租戶提供獨立的數(shù)據(jù)庫,有助于簡化數(shù)據(jù)模型的擴(kuò)展設(shè)計,滿足不同租戶的獨特需求;
如果出現(xiàn)故障,恢復(fù)數(shù)據(jù)比較簡單。
缺點:
增大了數(shù)據(jù)庫的安裝數(shù)量,隨之帶來維護(hù)成本和購置成本的增加。
這種方案與傳統(tǒng)的一個客戶、一套數(shù)據(jù)、一套部署類似,差別只在于軟件統(tǒng)一部署在運營商那里。如果面對的是銀行、醫(yī)院等需要非常高數(shù)據(jù)隔離級別的租戶,可以選擇這種模式,提高租用的定價。如果定價較低,產(chǎn)品走低價路線,這種方案一般對運營商來說是無法承受的。
2.共享數(shù)據(jù)庫,獨立Schema
這是第二種方案,即多個或所有租戶共享Database,但一個Tenant一個Schema。將每個租戶關(guān)聯(lián)到同一個數(shù)據(jù)庫的不同 Schema,租戶間數(shù)據(jù)彼此邏輯不可見,上層應(yīng)用程序的實現(xiàn)和獨立數(shù)據(jù)庫一樣簡單,但備份恢復(fù)稍顯復(fù)雜;
優(yōu)點:
為安全性要求較高的租戶提供了一定程度的邏輯數(shù)據(jù)隔離,并不是完全隔離;每個數(shù)據(jù)庫可以支持更多的租戶數(shù)量。
缺點:
如果出現(xiàn)故障,數(shù)據(jù)恢復(fù)比較困難,因為恢復(fù)數(shù)據(jù)庫將牽扯到其他租戶的數(shù)據(jù);
如果需要跨租戶統(tǒng)計數(shù)據(jù),存在一定困難。
3.共享數(shù)據(jù)庫、共享 Schema、共享數(shù)據(jù)表
這是第三種方案,即租戶共享同一個Database、同一個Schema,但在表中通過TenantID區(qū)分租戶的數(shù)據(jù)。這是共享程度最高、隔離級別最低的模式。租戶間數(shù)據(jù)彼此邏輯不可見,上層應(yīng)用程序的實現(xiàn)和獨立數(shù)據(jù)庫一樣簡單,但備份恢復(fù)稍顯復(fù)雜; 最后一種模式則是租戶數(shù)據(jù)在數(shù)據(jù)表級別實現(xiàn)共享,它提供了最低的成本,但引入了額外的編程復(fù)雜性(程序的數(shù)據(jù)訪問需要用 tenantId 來區(qū)分不同租戶),備份與恢復(fù)也更復(fù)雜。
優(yōu)點:
三種方案比較,第三種方案的維護(hù)和購置成本最低,允許每個數(shù)據(jù)庫支持的租戶數(shù)量最多。
缺點:
隔離級別最低,安全性最低,需要在設(shè)計開發(fā)時加大對安全的開發(fā)量;
數(shù)據(jù)備份和恢復(fù)最困難,需要逐表逐條備份和還原。
如果希望以最少的服務(wù)器為最多的租戶提供服務(wù),并且租戶接受以犧牲隔離級別換取降低成本,這種方案最適合。
** 應(yīng)用場景**
小飛,小象,小君三人大學(xué)畢業(yè)后同租了一套三室兩廳的房子,三人各占一間獨立臥室,每間房各配一把鑰匙,從而保證每個人都有自己的獨立私密空間,如果別人要進(jìn)入,必須通過權(quán)限驗證(也就是配套的開門鑰匙)才行,但廚房、餐廳、客廳這些資源是共用的(ps:為啥沒提廁所?因為每間臥室都帶廁所,這三人租的房有點豪!)
這里的小飛,小象,小君就是多租戶,別的租戶要訪問必須通過權(quán)限驗證的獨立臥室就是數(shù)據(jù)隔離共用的資源(廚房、餐廳、客廳)就是多租戶環(huán)境下的系統(tǒng)和應(yīng)用程序、組件
** 基本步驟demo**
數(shù)據(jù)層的多租戶淺談
** Spring boot + Hibernate 多租戶的使用
eclipselink+jboss實現(xiàn)多租戶基本配置**
具體的實現(xiàn)方式
如何選型
一般情況下,租戶模型不會影響應(yīng)用程序的功能,但可能會影響總體解決方案的其他方面。 以下條件用于評估每個模型:
可伸縮性:
租戶數(shù)目。
每個租戶的存儲量。
總存儲量。
工作負(fù)荷。
租戶隔離:
數(shù)據(jù)隔離和性能(一個租戶的工作負(fù)荷是否影響其他租戶)。
每個租戶的成本:
數(shù)據(jù)庫成本。
開發(fā)復(fù)雜性:
架構(gòu)更改。
查詢更改(模式所需)。
操作復(fù)雜性:
監(jiān)視和管理性能。
架構(gòu)管理。
還原租戶。
災(zāi)難恢復(fù)。
可自定義性:
易于支持租戶特定或租戶類特定的架構(gòu)自定義。
有關(guān)租戶的討論側(cè)重于數(shù)據(jù)層。 但是,請花費片刻時間思考一下應(yīng)用程序?qū)印?應(yīng)用程序?qū)颖灰暈閱我粚嶓w。 如果將應(yīng)用程序劃分成多個小型組件,所選的租戶模型可能會更改。 在所用的租戶和存儲技術(shù)或平臺方面,可以不同的方式對待某些組件。
實現(xiàn)多租戶的方式:
JPA Provider
JSR 338 定義了 JPA 規(guī)范 2.1,但如我們已經(jīng)了解到的,Oracle 把多租戶的多數(shù)特性推遲到了 Java EE 8 中。盡管這些曾經(jīng)在 JavaOne 大會中有過演示,但無論是在 JPA 2.0(JSR 317)還是 2.1 規(guī)范中,都依然沒有明文提及多租戶。不過這并不妨礙一些 JPA provider 在這部分領(lǐng)域的實現(xiàn),Hibernate 和 EclipseLink 已提供了全部或部分的多租戶數(shù)據(jù)層的解決方案。
Hibernate 是當(dāng)今最為流行的開源的對象關(guān)系映射(ORM)實現(xiàn),并能很好地和 Spring 等框架集成,目前 Hibernate 支持多租戶的獨立數(shù)據(jù)庫和獨立 Schema 模式。EclipseLink 也是企業(yè)級數(shù)據(jù)持久層JPA標(biāo)準(zhǔn)的參考實現(xiàn),對最新 JPA2.1 完整支持,在目前 JPA 標(biāo)準(zhǔn)尚未引入多租戶概念之際,已對多租戶支持完好,其前身是誕生已久、功能豐富的對象關(guān)系映射工具 Oracle TopLink。因此本文采用 Hibernate 和 EclipseLink 對多租戶數(shù)據(jù)層進(jìn)行分析。
Hibernate
Hibernate 是一個開放源代碼的對象/關(guān)系映射框架和查詢服務(wù)。它對 JDBC 進(jìn)行了輕量級的對象封裝,負(fù)責(zé)從 Java 類映射到數(shù)據(jù)庫表,并從 Java 數(shù)據(jù)類型映射到 SQL 數(shù)據(jù)類型。在 4.0 版本 Hibenate 開始支持多租戶架構(gòu)——對不同租戶使用獨立數(shù)據(jù)庫或獨立 Sechma,并計劃在 5.0 中支持共享數(shù)據(jù)表模式。
EclipseLink
EclipseLink 是 Eclipse 基金會管理下的開源持久層服務(wù)項目,為 Java 開發(fā)人員與各種數(shù)據(jù)服務(wù)(比如:數(shù)據(jù)庫、web services、對象XML映射(OXM)、企業(yè)信息系統(tǒng)(EIS)等)交互提供了一個可擴(kuò)展框架。
在完整實現(xiàn) JPA 標(biāo)準(zhǔn)之外,針對 SaaS 環(huán)境,在多租戶的隔離方面 EclipseLink 提供了很好的支持以及靈活地解決方案。
如何判定能否支持多租戶
我們通常所說的應(yīng)用程序?qū)Χ嘧鈶舻闹С殖潭?,其判定依?jù)是基于多少核心應(yīng)用層(或者SaaS)是可以讓各個“租戶”共享的。完全支持多租戶模式指的是允許多個“租戶”共享數(shù)據(jù)庫的表空間、支持對業(yè)務(wù)邏輯、工作流和用戶界面的定制。換句話說,所有SaaS的子層都提供對“多租戶”的支撐能力;而最低程度的支持“多租戶”也至少意味IaaS和PaaS層可以共享,只是每個“租戶”有自己專有的SaaS層;中等程度地支持“多租戶”,則是具有同樣特征的一組“租戶”共享數(shù)據(jù)庫的表空間(schemae)及其他應(yīng)用層,而不同組的“租戶”有其自己的數(shù)據(jù)庫和應(yīng)用程序。
避坑指南
多租戶的缺點:
多租戶架構(gòu)的一個缺點就是,某一客戶的問題會影響整個系統(tǒng)。 另外,如果集中式運作出問題,所有客戶都會受到影響。沒有哪家軟件即服務(wù)(SaaS)提供商是完美無缺的。它們都遇到過嚴(yán)重的服務(wù)停用事件。不過與大多數(shù)內(nèi)部數(shù)據(jù)中心的糟糕記錄相比,它們的情況似乎都相當(dāng)好。
隔離:因為承租者共享軟件和硬件的同一實例,所以一個承租者可能會影響其他承租者的軟件的可用性和性能。例如,如果共享的軟件沒有充足的安全保障措施,則可能會發(fā)生因一個承租者關(guān)閉共享軟件而導(dǎo)致對共享該實例的所有承租者拒絕服務(wù)。
安全性:如果共享軟件沒有充分的安全保障措施,則一個承租者的用戶可能會訪問屬于另一個承租者的數(shù)據(jù)。
自定義能力:因為軟件是在承租者之間共享的,所以各個承租者不可能自定義該軟件。例如,在沒有充足的擴(kuò)展點的情況下,一個承租者不可能為業(yè)務(wù)流程提供自己的實現(xiàn)。
應(yīng)用程序升級將為承租者帶來問題:同時升級共享的軟件可能并不是所有承租者都希望的。
恢復(fù):在承租者之間共享數(shù)據(jù)庫使得很難為每個承租者單獨備份和恢復(fù)數(shù)據(jù)。
面臨的挑戰(zhàn)
跟我上“云”端(一)認(rèn)識多租戶
擴(kuò)展問題
** .net平臺下多租戶是怎么做的
多租戶技術(shù)可被其他技術(shù)替代嗎?
多租戶架構(gòu)之外的技術(shù)?**
多租戶架構(gòu)之外的選擇是單租戶架構(gòu); 在這種模式中,每個客戶都運行自己的軟件實例,軟件可通過元數(shù)據(jù)或其他方式來配置。SAP公司為其Business by Design軟件采用了單租戶模式,該軟件實施了眾多商業(yè)應(yīng)用程序。
兩者之間的區(qū)別
多租戶模式與單租戶架構(gòu)模式存在大片的潛在灰色區(qū),往往被人們所忽視。單租戶應(yīng)用程序可由云環(huán)境中的虛擬化服務(wù)器或數(shù)據(jù)中心內(nèi)的服務(wù)器來提供,單租戶應(yīng)用程序的各部分可以共享或不共享。比方說,應(yīng)用程序采用單租戶模式、而數(shù)據(jù)庫進(jìn)行共享這種現(xiàn)象并不罕見
小結(jié)
對于多租戶先有一個基本的認(rèn)識,接下來就是用到項目中啦,實踐很重要