Azure 應用程式設定 可協助您儲存應用程式的組態設定。 藉由使用應用程式設定,您可以更輕鬆地實作 外部設定存放區模式。 本文說明應用程式組態的一些功能,這些功能在多租用戶系統中非常實用。 提供的連結會帶您前往如何在多租用戶解決方案中使用應用程式設定的指引和範例。
隔離模型
存放區是指 App Configuration 服務的單一實例。
在多租用戶解決方案中,通常有兩種類型的設定:
共用設定:套用至多個租用戶,例如全域設定或套用至 部署戳記內所有租用戶的設定。 通常最好將全域設定儲存在共用的 App Configuration 存放區中。 透過此方法,您可以最大限度地減少設定值變更時,需要更新的位置數量。 這種方法還可以最大限度地降低設定不同步的風險。
租用戶特定設定:指定每個租用戶的資料庫名稱或內部識別碼。 您可以使用這些設定,為每個租用戶指定不同的記錄層級。 例如,您可能會診斷特定租用戶所回報的問題,而且您只需要從該租用戶收集診斷記錄。 您可以選擇是否要將多個租用戶的租用戶特定設定合併到單一商店中,或為每個租用戶部署商店。 根據您的要求做出決定。 如果您的解決方案為多個租用戶使用單一共用應用程式層,那麼使用特定租用戶存放區的效益可能有限。 但如果您部署了特定租用戶的應用程式執行個體,您可能會選擇採用相同的方法,部署特定租用戶組態存放區。
下表摘要說明應用程式組態的主要租用戶隔離模型之間的差異。
| 考量 | 共用存放區 | 每個租用戶的存放區 |
|---|---|---|
| 資料隔離 | 低。 使用索引鍵前置詞或標籤來識別每個租戶的資料。 | 高 |
| 效能隔離 | 低 | 高 |
| 部署複雜度 | 低 | 中高 |
| 操作複雜度 | 低 | 中高 |
| 資源成本 | 低 | 中高 |
| 案例範例 | 具有共享應用層的多租戶大型解決方案 | 高級層租戶具有完全隔離的部署 |
共用商店
您可以為整個解決方案部署共用的 App Configuration 存放區,或為每個戳記部署一個。 然後,您可以針對所有租用戶的設定使用相同的商店。 使用 鍵前綴 或 標籤 來區分它們。
如果您需要為每個租用戶儲存大量資料,或調整至大量租用戶,則可能會有超出 單一存放區資源限制的風險。 在此案例中,請考慮您是否可以在一組共用存放區之間共用租戶,以將部署和管理成本降到最低。
如果您採用此方法,請確保您了解適用的資源配額和限制。 特別是,請注意您所使用服務層級的總儲存體限制,並確定您不會超過每小時的要求上限。
每個租用戶的存放區
您可以改為選擇為每個租用戶部署 App Configuration 存放區。 應用程式設定 標準層 可協助您在訂用帳戶中部署無限數量的存放區。 但此方法通常管理起來較複雜,因為您必須部署和設定更多資源。
如果您符合以下情況,請考慮使用租戶專用儲存區:
- 您必須使用 客戶管理的金鑰 (CMK),並確保每個租用戶的金鑰是獨立的。
- 您的租用戶需要將其組態資料與其他租用戶的資料隔離。 App Configuration 的存取權限是在商店層級控制的,因此透過部署單獨的商店,您可以設定單獨的存取權限。
支援多租用戶的應用程式設定功能
當您在多租用戶應用程式中使用應用程式設定時,您可以使用數個功能來儲存和擷取租用戶特定的設定。
鍵前綴
在 App Configuration 中,您可以使用代表應用程式設定的索引鍵/值組。 鍵值代表組態設定的名稱。 您可以對索引鍵使用階層式命名結構。 在多租戶解決方案中,請考慮使用租戶識別碼作為鍵的前綴。
例如,假設您需要儲存一個設定來指示應用程式的記錄等級。 在單一租用戶解決方案中,您可以將此設定命名為 LogLevel。 在多租戶解決方案中,你可以選擇使用階層式金鑰名稱,例如 tenant1/LogLevel 租戶1 tenant2/LogLevel 和租戶2。
您可以在階層中指定冗長的鍵值名稱和多個層次。 如果您選擇使用長索引鍵名稱,請確定您瞭解 索引鍵和值的大小限制。
當您將單一租用戶的組態載入到應用程式中時,您可以指定索引鍵前置詞篩選器,以僅載入該租用戶的索引鍵。 您也可以設定應用程式設定的提供者程式庫,從索引鍵中去除索引鍵前置詞,然後再將它們提供給您的應用程式。 當您修剪索引鍵前置詞時,接著應用程式會看到一致性鍵名稱,並將該租戶的相關資料載入到應用程式中。
標籤
應用程式設定也支援 標籤。 使用標籤,您可以定義使用相同索引鍵的個別值。
標籤可協助版本設定、使用多個部署環境,或用於解決方案中的其他用途。 雖然您可以使用租用戶識別碼作為標籤,但您無法將標籤用於其他任何項目。 因此,針對多租用戶解決方案,通常最好使用 鍵前綴 來管理特定租戶的設定,並將標籤用於其他用途。
如果您決定針對每個租用戶使用標籤,您的應用程式只能使用 標籤篩選器載入特定租用戶的設定。 如果您每個租用戶都有個別的應用程式部署,此方法會很有幫助。
應用程式端快取
當您使用應用程式設定時,請務必在應用程式內快取設定,而不是每次使用時都載入它們。 App Configuration 提供者程式庫會快取設定並自動重新整理它們。
您也必須決定您的應用程式是載入單一租用戶還是所有租用戶的設定。
隨著租用戶數量的增長,一次載入所有租用戶的設定所需的時間和記憶體量可能會增加。 因此,在大多數情況下,當應用程式需要時,分別載入每個租用戶的設定是一個很好的做法。
如果您個別載入每個租用戶的組態設定,您的應用程式必須將每組設定與任何其他設定分開快取。 在 .NET 應用程式中,您可以使用 記憶體內部快取 來快取租用戶的 IConfiguration 物件,然後使用租用戶識別碼作為快取索引鍵。 透過使用記憶體內快取,您不需要為每個請求重新載入組態,但如果您的應用程式處於記憶體壓力之下,快取可以移除未使用的執行個體。 您也可以為每個租用戶的組態設定過期時間。
參與者
本文由 Microsoft 維護。 下列參與者撰寫本文。
主要作者:
- John Downs |Azure 模式和實務的主要軟體工程師
其他投稿人:
- Arsen Vladimirskiy | 主任客戶工程師,FastTrack for Azure
- 王振蘭 |應用程式設定首席軟體工程經理
若要查看非公開的 LinkedIn 個人檔案,請登入 LinkedIn。