IT軟件服務商所提供的傳統企業軟件系統大多基於Multi-Instance(多實例)架構,即對於每個客戶組織,都有一個單獨的軟件系統實例 爲其服務;而搭建於雲計算平臺的軟件系統則普遍採用了Multi-Tenancy(多租戶)架構,即單個軟件系統實例服務於多個客戶組織。在Multi- Instance架構下,因爲每一個客戶擁有本身的軟件實例,因此不存在數據隔離問題,可是在Multi-Tenancy架構下,因爲全部客戶數據將被共同 保存在惟一一個軟件系統實例內,所以須要開發額外的數據隔離機制來保證各個客戶之間的數據不可見性並提供相應的災備方案。 數據庫
隨着雲計算技術的成熟,Multi-Tenancy再也不是新鮮的概念,目前已經有幾種成熟的架構來幫助系統實現數據隔 離:SharedSchemaMulti-Tenancy(下文簡稱爲共享表架構)、SeparatedDatabase(下文簡稱爲分離數據庫架構)以 及SharedDatabaseSeparatedSchema(下文簡稱爲分離表架構)。 安全
•共享表架構:即全部的軟件系統客戶共享使用相同的數據庫實例和相同的數據庫表,但能夠經過相似於圖3中的TenantID字段來區分數據的從屬。 架構
由於共享表架構最大化地利用了單個數據庫實例的存儲能力,因此這種架構的硬件成本很是低廉,但對程序開發者來講,卻增長了額外的複雜度。因爲多個客 戶的數據共存於相同的數據庫表內,所以須要額外的業務邏輯來隔離各個客戶的數據。此外,這種架構實現災難備份的成本也很是高,不但須要專門編寫代碼實現數 據備份,並且在恢復數據時,須要對數據庫表進行大量的刪除和插入操做,一旦數據庫表包含大量其餘客戶的數據,勢必對系統性能和其餘客戶的體驗帶來巨大影 響。 分佈式
•分離數據庫架構:即每一個軟件系統客戶單獨擁有本身的數據庫實例,如圖4所示。 性能
相比於共享表架構,因爲每一個客戶擁有單獨的數據庫實例,這種架構能夠很是高效便捷地實現數據安全性和災難備份,可是隨之而來的缺點即是其硬件成本很是高昂。 雲計算
•分離表架構:即軟件系統客戶共享相同的數據實例,可是每一個客戶單獨擁有本身的由一系列數據庫表組成的Schema。 spa
分離表架構是一種折中的Multi-Tenancy方案,在這種架構下,實現數據分離和災難備份相對共享表架構更加容易一些,另外一方面,它的硬件成本也較分離數據庫架構低。 設計
不管是分離數據庫仍是分離表,抑或是共享表,每種架構都有它的優勢和不足,在設計雲端系統時,系統架構師須要進行全面的分析和考量,綜合各方面的因 素以選擇合適的Multi-Tenancy架構。通常來講,系統服務的客戶數量越多,則越適合使用共享表的架構;對數據隔離性和安全性要求越高,則越適合 使用分離數據庫的架構。在超大型的雲系統中,通常都會採用複合型的Multi-Tenancy架構,以平衡系統成本和性能,這其中 Salesforce.com即是一個典型的案例。Salesforce.com最初搭建於共享表架構,可是隨着新客戶的不斷簽入,單純的共享表架構已經 很難知足日益增加的性能要求,Salesforce逐步開始在不一樣的物理區域搭建分佈式系統。在全局上,Salesforce.com以相似於分離數據庫 的架構運行,在單個區域內,系統則仍然按照共享表架構運行。 開發