如何用 Azure Data Explorer 架構多租戶解決方案

Azure 數據總管中的多租使用者概念是指為不同的租使用者提供服務,並將其數據儲存在單一叢集中。

Important

多租戶解決方案也可以在 Microsoft Fabric 的 Real-Time Intelligence 工作負載中進行架構,使用 Eventhouse 中的 KQL 資料庫。

租戶可以代表客戶、一組使用者,或任何需要依租戶邊界隔離資料的使用者分類。 你也可以有多層次多租戶情境,例如多個應用程式,每個都有多個租戶。 本文未涵蓋此情境,但類似原則適用。

一個重要因素是終端使用者存取其租用戶數據的方式。 當終端使用者直接存取 Azure 資料探索者時,必須在 Azure 資料探索者中設定存取控制,以限制使用者僅能檢視自己的資料。 當 Proxy 應用程式在 Azure 資料總管中存取其數據時,應用程式可以執行隔離。

本文說明一些部署架構,並提供每個部署架構的特性。 您可以使用特性來協助您決定最適合您解決方案的架構。

吵鬧的鄰居

一般而言,不論使用的架構為何,在許多租用戶之間共用叢集,都表示不同的租用戶會共用叢集的資源。 這可能會導致貪婪鄰居反模式。

例如,如果租使用者執行許多計算密集型查詢或擷取,其他租使用者可能會受到資源耗盡的影響。 這可以使用工作負載群組來減輕。 您也可以使用原則來控制快取和整體記憶體。

架構概觀

下一節會詳細探索部署架構。 本節會對比架構,以利決策制定。

Architecture Strengths
每個資料庫一個租戶 - 租用戶的隔離:不需要 Proxy
- 每個租戶可以有不同的策略,例如保留策略
- 每個租用戶的架構演進彈性
- 輕鬆快速地移除租用戶數據
一個數據表供許多租戶使用 - 有效率的數據匯總和範圍管理
- 簡化的架構演進
- 最適合具體化檢視
- 理想的分隔使用
在單一資料庫中,每個資料表對應一個租戶 不建議使用

架構:每個資料庫一個租戶

此圖顯示每個資料庫對應一個租戶的架構。

這是一個熱門且簡單明瞭的架構。 每個租用戶都會取得自己的資料庫。 每個資料庫都有相同的架構。

此架構的特性如下:

  • 布建新的租使用者:需要建立新的資料庫,並在 其上部署架構實體 。

  • 拿掉租使用者:需要刪除資料庫。 刪除資料庫可以在幾秒鐘內完成。 消耗的資源量少且穩定,不隨租戶數據量的增長而線性增加。

  • 資料庫架構更新:每個租用戶可以在不同的時間獨立更新。 存取資料庫的應用程式必須知道它們與其互動的每個資料庫版本。

  • 保留和快取原則:每個租使用者都可以有自己的唯一原則,這可讓您提供自定義保留和快取原則給您的客戶。

  • 每個租使用者的安全性界限:

    • 對於多租戶應用程式(代理):設定你的應用程式以鎖定相關的資料庫。 使用 查詢的存取限制 來禁止 跨資料庫查詢。
    • 對於具有直接存取權的使用者:用戶可以在資料庫層級獲得存取權。 讓使用者直接存取其資料庫會為實作詳細數據建立相依性,因此難以變更實作。 因此,我們強烈建議使用 Proxy 方法來存取資料庫。
  • 將多個租戶的大規模數據聚合:使用 聯集運算子 在資料庫之間聚合數據。 不過,當租用戶數目增加時,此方法可能會變得繁瑣。 即使從租用戶的觀點匯總多個租用戶的數據可能是設計目標,但解決方案擁有者可能會想要匯總來自所有租用戶的數據來收集統計數據。

  • 範圍碎片化:每個租用戶在每個資料庫數據表中擷取一些記錄,會導致建立稍後需要合併的小 範圍擴展區。 這會導致範圍管理的成本較高。 因此,強烈建議使用 串流擷取,例如事件中樞或事件方格擷取。 若要使用串流擷取,您必須確定已在叢集和數據表上啟用它。

  • 具現化視圖和分區策略。 隨著租用戶數目增加,請務必記住,叢集能有效運行的具體化檢視和分割區原則數目是有限的。

  • 事件方格和事件中樞數據連線:每個資料庫會建立這些數據連線。 因此,此架構需要每個租用戶的數據連線和事件方格或事件中樞實例,以增加管理複雜性。 請考慮使用 事件中樞 和 事件方格的事件路由。

架構:一個數據表供許多租使用者使用

此圖顯示多個租使用者的一個資料庫架構。

此架構在合併過程中更為積極,為所有租戶使用單一資料庫。 資料庫中的每個數據表都有一個 租使用者標識符 數據行或對等數據行,可讓您篩選單一租用戶的數據。 您可以 依租使用者分割 數據表以改善查詢效能,因為大部分的查詢都可能會依租用戶篩選。 可能的話,您應該考慮使用複合分割鍵與另一個欄位一起進行分割。 例如,您可以建立 複合 分區索引鍵,將 租用戶標識碼 和其他欄位的值串連起來。

此架構的特性如下:

  • 布建新的租戶:布建新的租戶不需要任何資料庫建立或架構調整。 新的 租用戶標識碼 用於新的記錄中。

  • 移除租戶:需要軟刪除或清除租戶的資料。 例如,您可以在一週結束時將多個清除批處理在一起,以限制對資源耗用量的影響。

  • 資料庫架構更新:所有租用戶的架構都會同時升級。 由於所有租用戶都會共享數據表,因此變更數據表架構會一次變更所有租使用者。

  • 保留和快取政策:所有租用戶的政策都相同,因為這些租用戶共享相同的數據表。

  • 每個租使用者的安全性界限:

    • 對於多租戶應用(代理):請使用 Restrict 語句
    • 對於具有直接存取權的使用者:使用列層級安全策略並熟悉其限制。 讓使用者直接存取其資料庫會為實作詳細數據建立相依性,因此難以變更實作。 因此,我們強烈建議使用 Proxy 方法來存取資料庫。
  • 大規模匯總來自多個租用戶的數據:具有足夠訪問許可權的用戶可以在多個租用戶的數據上執行標準匯總查詢。

  • 範圍的碎片化:由於所有租用戶將數據引入到相同的數據表中,數據通常可以合併及有效引入到一個或幾個範圍中。

  • 實體化視圖與分區政策:可用於多租戶資料表。 您可以藉由在租戶 ID或等效的欄位上進行分割來改善效能。 如需詳細資訊,請參閱 分割原則的案例。

  • 事件方格和事件中樞數據連線:您合併數據連線,因為所有租用戶的數據最終都會出現在一個數據表中。

架構:單一資料庫中每個租戶一個資料表

此圖顯示每個資料表對應一個租戶的架構。

此架構結合了先前的架構,其中所有租用戶的資料最終都會匯集到單一資料庫中,但在不同的資料表中分開存放。 此架構無法擷取其他架構的所有優點。

雖然每個租用戶的數據都是隔離的,但它們都位於相同資料庫相同的安全性內容中。 如同多資料庫架構,此架構可能會導致範圍分散。 每個租用戶的數據表名稱不同,因此必須針對每個租使用者自定義查詢。