Force.com 多租戶架構

本文參考自官方文檔。

多租戶架構

作為雲計算平台的先驅,Salesforce最大的特點是「軟體即服務」(Software as a Service,Saas)。實現這種技術的基礎便是「多租戶架構」(Muntitenancy)。

定義引自維基百科:

多租戶技術(英語:multi-tenancy technology)或稱多重租賃技術,是一種軟體架構技術,它是在探討與實現如何於多用戶的環境下共用相同的系統或程序組件,並且仍可確保各用戶間數據的隔離性。

這種架構的優點在於:

  • 所有的用戶高效共享所有的資源
  • 用戶的資源之間不會互相影響

多租戶架構的核心——元數據驅動

Salesforce多租戶架構的核心是元數據驅動。不同於傳統的關係資料庫結構,Force.com中的對象、欄位等並沒有存儲在實際的、靜態的數據表中。在Force.com中,這些對象、欄位等由元數據定義,在運行時動態編譯生成。

Force.com中定義了一個全局數據字典(Universal Data Dictionary,簡稱UDD)。在UDD中存儲了各種邏輯數據,包括但不限於:

  • 對象(Object),相當於傳統關係資料庫中的數據表
  • 欄位(Field),相當於傳統關係資料庫中的欄位
  • 資料庫觸發器(Database Trigger)
  • 存儲過程(Stored Procedure)

舉個例子。當用戶創建了一個對象,比如「地址」,Force.com並不會真正的創建一個名為「地址」的數據表,而是將「地址」對象的定義保存為元數據。在運行時,系統會讀取「地址」的定義,然後將其動態編譯成「地址」對象,供用戶使用。

這樣做的好處是當用戶需要修改對象定義時,在Force.com的後台不需要修改某個數據表的結構,而只是修改數據表中的某一條記錄,讓整個過程變得高效、穩定。

與此同時,Force.com中也使用了許多複雜的緩存技術來緩存諸多元數據,從而提高系統的效率。

元數據存儲的數據模型

Force.com中使用諸多數據表來存儲元數據和其他數據及關係。在實際的系統中它們有著複雜的名字和定義。為了描述方便起見,在下文將它們的名稱做簡化,著重描述它們的功能。

  • MT_Objects表:用於存儲對象的定義,包括了其唯一的ID、從屬的組織的ID、名字等。在Salesforce系統中的所有「租戶」組織的對象定義同時保存在這一個表中
  • MT_Fields表:用於存儲對象欄位的信息,包括了其唯一的ID、從屬的組織的ID、從屬的對象的ID、名字、欄位類型等。在Salesforce系統中的所有「租戶」組織包含的欄位同時保存在這一個表中
  • MT_Data表:用於存儲各個對象的實際數據,相當於傳統關係資料庫中的一行記錄。在Salesforce系統中所有「租戶」組織中的數據同時保存在這一個表中
  • MT_Clobs表:CLOB是「character large objects」的簡稱。這些對象可以存儲長達32000字元的數據。當MT_Data表中存在的數據包含過多的字元時,系統會將這些長字元數據存儲在MT_Clobs表中,而在MT_Data表中存儲一個MT_Clobs表某一行的ID值,從而精簡MT_Data表
  • MT_Indexes表:這是一個數據透視表(Pivot table),用於存儲MT_Data表中數據的索引。該表主要用於提高數據的搜索效率
  • MT_Unique_Indexes表:該表和MT_Indexes表類似,也是一個數據透視表,也存儲了數據的索引。不同之處在於該表中的數據索引保持著唯一性。在用戶給某欄位增加唯一約束時,系統會將該欄位的內容記錄在此表中。當用戶插入重複的值的時候,系統會根據該表的內容給出警告信息
  • MT_Fallback_Indexes表:MT_Fallback_Indexes表中保存了所有數據的名字(Name)。在特殊情況下,Salesforce有可能無法完成用戶需要的搜索。在這種情況下,Salesforce會啟用備用搜索機制,直接查詢MT_Fallback_Indexes表中的數據,從而給出名字元合搜索條件的數據

推薦閱讀:

如何學習Salesforce,多長時間合適?
在Visualforce頁面中使用Visual Flow
Salesforce和SAP的區別是什麼?

TAG:Salesforce | 云服务 | 系统架构 |