歷史 多租戶技術源於1960年代,許多公司為了要使用更多的運算資源,向持有大型主機(
Mainframe )的供應商租用一部份的運算資源,而這些用戶經常會用到相同的應用程式,當時會以用戶在登錄系統時輸入的數據來決定用戶的帳戶ID,基於這個ID,Mainframe的供應商即可利用此ID來計算運算的資源使用量,包含CPU,
存儲器 與
軟碟 或
磁帶 等,這個作法也被SAP公司用在其R/1到R/3的產品線。
到了1990年代,
應用程式服務 提供者服務(application service provider)模式出現,它的作法與運作模式與租用大型主機時相同,不過租用的資源是在軟體上,除了作業系統以外也包含了其上的應用程式,例如ERP系統或是CRM等套用,系統可能會運行在數台不同的機器上,或是在相同的主機但共享不同的資料庫,以區分並計算客戶的資源使用量,藉以作為計費的標準,而此技術也有效的縮減供應商的實體機器成本(因為可以在一台電腦上同時運行多個用戶所租用的應用程式進程)。到了現代,受歡迎的消費者導向Web應用程式(如Hotmail或Gmail等)也是以單一應用程式平台來支持所有的用戶,這已經是多租戶技術的自然演化的結果,多租戶技術也可以讓客戶中的一部份用戶得以進一步定製化他們的應用程式。
在虛擬化(virtualization)技術的成熟與套用性的擴張之下,多租戶技術可以駕馭虛擬化的平台,更強化在
用戶應用程式 與數據之間的隔離,讓多租戶技術能更加發揮它的特色。
概念與技術 在多租戶技術中,租戶(tenant)是指使用系統或電腦運算資源的客戶,但在多租戶技術中,租戶包含在系統中可識別為指定用戶的一切數據,包括帳戶與統計信息(accounting data)、用戶在系統中建置的各式數據、以及用戶本身的定製化應用程式環境等,都屬於租戶的範圍。租戶使用供應商開發或建置的套用系統或運算資源,供應商所設計的套用系統會容納數個以上的用戶在同一個環境下使用,為了讓多個用戶環境能夠在同一個應用程式與運算環境上使用,則應用程式與運算環境必須要特別設計,除了可以讓系統平台允許多份相同的應用程式同時運行外,保護租戶數據的隱私與安全也是多租戶技術的關鍵之一。
技術上,多租戶技術可以通過許多不同的方式來切割用戶的應用程式環境或數據。
數據面(data approach):供應商可以利用切割資料庫(database),切割存儲區(storage),切割結構描述(schema)或是表格(table)來隔離租戶的數據,必要時會需要進行對稱或
非對稱加密 以保護敏感數據,但不同的隔離作法有不同的實現複雜度與風險。
程式面(application approach):供應商可以利用應用程式掛載(hosting)環境,於進程(process)上切割不同租戶的應用程式運行環境,在無法跨越
進程通信 的情況下,保護各租戶的應用程式運行環境,但供應商的運算環境要夠強。
系統面(system approach):供應商可以利用
虛擬化技術 ,將實體運算單元切割成不同的虛擬機,各租戶可以使用其中一至數台的虛擬機來作為應用程式與數據的保存環境,但對供應商的運算能力要更要求。
實現方式 多租戶技術的實現重點,在於不同租戶間應用程式環境的隔離(application context isolation)以及數據的隔離(data isolation),以維持不同租戶間應用程式不會相互干擾,同時數據的保密性也夠強。
應用程式部份:通過進程或是支持多應用程式同時運行的裝載環境(例如Web Server,像是Apache或IIS等)來做進程間的隔離,或是在同一個伺服程式(server)進程內以運行緒的方式隔離。
數據部份:通過不同的機制將不同租戶的數據隔離,Force是採用中介數據(metadata)的技術來切割,微軟 MSDN 的
技術檔案 則是展示了使用結構描述的方式隔離。
實現方式
多租戶就是說多個租戶共用一個實例,租戶的數據既有隔離又有共享,從而解決數據存儲的問題。從架構層面來分析,SaaS區別於傳統技術的重要差別就是Multi-Tenant模式。SaaS多租戶在數據存儲上存在三種主要的方案,分別是
1.獨立資料庫
這是第一種方案,即一個租戶一個資料庫,這種方案的用戶數據隔離級別最高,安全性最好,但成本也高。
優點:
為不同的租戶提供獨立的資料庫,有助於簡化數據模型的擴展設計,滿足不同租戶的獨特需求;
如果出現故障,恢複數據比較簡單。
缺點:
增大了資料庫的安裝數量,隨之帶來維護成本和購置成本的增加。
這種方案與傳統的一個客戶、一套數據、一套部署類似,差別只在於軟體統一部署在運營商那裡。如果面對的是銀行、醫院等需要非常高數據隔離級別的租戶,可以選擇這種模式,提高租用的定價。如果定價較低,產品走低價路線,這種方案一般對運營商來說是無法承受的。
2.共享資料庫,隔離數據架構
這是第二種方案,即多個或所有租戶共享Database,但一個Tenant一個Schema。
優點:
為安全性要求較高的租戶提供了一定程度的邏輯數據隔離,並不是完全隔離;每個資料庫可以支持更多的租戶數量。
缺點:
如果出現故障,數據恢複比較困難,因為恢複數據庫將牽扯到其他租戶的數據;
如果需要跨租戶統計數據,存在一定困難。
3.共享資料庫,共享數據架構
這是第三種方案,即租戶共享同一個Database、同一個Schema,但在表中通過TenantID區分租戶的數據。這是共享程度最高、隔離級別最低的模式。
優點:
三種方案比較,第三種方案的維護和購置成本最低,允許每個資料庫支持的租戶數量最多。
缺點:
隔離級別最低,安全性最低,需要在設計開發時加大對安全的開發量;
數據備份和恢復最困難,需要逐表逐條備份和還原。
如果希望以最少的伺服器為最多的租戶提供服務,並且租戶接受以犧牲隔離級別換取降低成本,這種方案最適合。
特色 多租戶技術有下列特色:
由於多租戶技術可以讓多個租戶共用一個應用程式或運算環境,且租戶大多不會使用太多運算資源的情況下,對供應商來說多租戶技術可以有效的降低環境建置的成本。包含硬體本身的成本,作業系統與相關軟體的授權成本都可以因為多租戶技術,而由多個租戶一起分擔。
通過不同的
數據管理 手段,多租戶技術的數據可以用不同的方式進行數據隔離,在供應商的
架構設計 下,數據的隔離方式也會不同,而良好的數據隔離法可以降低供應商的維護成本(包含設備與人力),而供應商可以在合理的授權範圍內取用這些數據分析,以作為改善服務的依據。
多租戶架構下所有用戶都共用相同的
軟體環境 ,因此在軟體改版時可以只發布一次,就能在所有租戶的環境上生效。
具多租戶架構的套用軟體雖可定製,但定製難度較高,通常需要平台層的支持與工具的支持,才可降低定製的複雜度。
實務套用 多租戶技術在實務上運用的成功且廣為人知的案例之一,是由Salesforce所建置的CRM套用系統,該公司除了Salesforce的CRM軟體以外,它還建置了Force平台即服務(PaaS)架構,以支持開發人員發展基於Force平台上的應用程式。
在雲計算的加持之下,多租戶技術被廣為運用於開發雲各式服務,不論是IaaS,PaaS還是SaaS,都可以看到多租戶技術的影子。