Azure Cosmos DB 中向量搜尋的多租用戶管理
「OpenAI 的 ChatGPT 服務是有史以來增長最快的消費者應用程式之一,該公司仰賴 Cosmos DB 來動態調整這服務,使其保持高度可靠性和低維護需求。」 – Satya Nadella
Azure Cosmos DB 以向量搜尋作為全球第一個功能完整的無伺服器操作資料庫,提供無與倫比的延展性和效能。 藉由使用 Azure Cosmos DB,使用者可以強化其向量搜尋功能,確保多租用戶應用程式的運作高度可靠且易於維護。
多租用戶管理可讓資料庫的單一執行個體同時為多個客戶或租用戶提供服務。 這種方法有效率地共用基礎結構和作業額外負荷,進而節省成本並簡化管理。 這是 SaaS 應用程式和一些內部企業解決方案的重要設計考量。
多租用戶管理增加了複雜度。 您的系統必須有效率地擴充運能,以在所有租用戶之間維持高效運作,這些租用戶可能會有獨特的工作負載、需求和服務等級協定 (SLA)。
想像一個虛構的 AI 輔助研究平台,名為 ResearchHub。 ResearchHub 為數千家公司和個別研究人員提供服務,管理龐大且多元的使用者群、資料規模和 SLA。 確保低查詢延遲和高效能對於維持絕佳的使用者體驗至關重要。
Azure Cosmos DB 具有 DiskANN 向量索引功能,可簡化多租用戶設計,為高效能應用程式提供有效率的資料儲存和存取機制。
Azure Cosmos DB 中的多租用戶管理模型
在 Azure Cosmos DB 中,我們建議使用兩種主要方法來管理多租用戶:一個租用戶一個資料分割索引鍵或一個租用戶一個帳戶,各有其優點與取捨。
1.每租用戶一個分割區索引鍵
對於較高密度的租用戶和較低的隔離需求,「一個租用戶一個資料分割索引鍵」模型是有效的。 每個租用戶都會在指定的容器內指派唯一的資料分割索引鍵,以允許邏輯區隔資料。 當每個租用戶有大致相同的工作負載磁碟區時,此策略最適用。 如果資料分布有明顯不均衡的情況,客戶應該考慮將那些租用戶隔離在自己的帳戶中。 此外,如果單一租用戶有超過 20GB 的資料,則應使用階層式資料分割索引鍵 (HPK)。 對於特定向量搜尋,如果向量搜尋查詢可以集中在特定分割區或多組分割區,quantizedFlat 索引可能會執行得非常好。
優點:
- 成本效益:跨多個租用戶共用單一 Cosmos DB 帳戶,可降低額外負荷。
- 延展性:可以管理大量的租用戶,每個租用戶都會隔離在其資料分割索引鍵內。
- 簡化的管理:要管理的 Cosmos DB 帳戶較少。
- 階層式數據分割索引鍵 (HPK): 優化多租使用者應用程式中的數據組織和查詢效能。
缺點:
- 資源爭用:共用資源可能會導致尖峰使用期間發生爭用的情況。
- 有限隔離:僅限邏輯隔離,而非實體隔離,這可能無法滿足嚴格的隔離需求。
- 較少彈性:每個租用戶啟用異地複寫、時間點還原 (PITR) 和客戶自控金鑰 (CMK) 等帳戶層級功能的彈性降低。
階層式資料分割:強化資料組織
階層式資料分割建置在「一個租用戶一個資料分割索引鍵」模型上,進一步區分資料,執行更精細的資料組織。 此方法涉及建立多個層級的資料分割索引鍵,以進行更細微的資料管理。 階層式資料分割的最低層級應該具有較高的基數。 一般而言,建議為此層級使用識別碼/guid,以確保每個租用戶的資料量能彈性擴展超過 20GB。
優點:
- 優化查詢:透過在父分割區層級更精準地定位子分割區,可減少查詢延遲。
- 改善延展性:協助執行更深入的資料分割,以方便調整。
- 更好的資源配置:平均分配工作負載,將高租用戶數量的瓶頸效應降到最低。
考量因素:
- 在租用户數量很少的情况下,如果應用程式採用階層式資料分割,反而會造成效能瓶頸,這是因為所有具有相同第一層索引鍵的所有文件都會寫入同一個實體分割區。
範例:ResearchHub 可以對每個租用戶分割區中的資料進行分層,例如依 "DepartmentId" 和 "ResearcherId" 等不同層級進行組織,以協助有效率地管理與查詢資料。
2.一個租用戶一個帳戶
為了達到最大程度的隔離,建議使用「一個租用戶一個帳戶」模型。 每個租用戶都會取得專用的 Cosmos DB 帳戶,確保資源完全隔離。
優點:
- 高度隔離:因採用專用資源,可避免爭用或干擾。
- 自訂 SLA:資源與 SLA 可以專為個別租用戶需求量身打造。
- 強化安全性:實體資料隔離可確保健全的安全性。
- 彈性:租用戶可以視需要啟用帳戶層級的功能,例如異地複寫、時間點還原 (PITR) 和客戶自控金鑰 (CMK)。
缺點:
- 增加管理:管理多個 Cosmos DB 帳戶的複雜度較高。
- 成本較高:更多帳戶代表更高的基礎結構成本。
使用客戶自控金鑰進行安全性隔離
Azure Cosmos DB 可啟用客戶自控金鑰進行資料加密,為多租用戶環境提供額外的安全性防護層級。
實作步驟:
- 設定 Azure Key Vault:安全地儲存您的加密金鑰。
- 連結至 Cosmos DB:將您的 Key Vault 與您的 Cosmos DB 帳戶產生關聯。
- 定期輪替金鑰:定期更新金鑰來強化安全性。
使用客戶自控金鑰可確保每個租用戶的資料都獨立加密,以提供健全的安全性與合規性。
其他隔離模型
容器和資料庫隔離
除了「一個租用戶一個資料分割索引鍵」和「一個租用戶一個帳戶」模型之外,Azure Cosmos DB 還提供其他隔離方法,例如容器隔離和資料庫隔離。 這些方法在效能隔離方面提供不同程度的保障,但安全性隔離方面,則比不上「一個租用戶一個帳戶」模型。
容器隔離
在容器隔離模型中,每個租用戶都會在共用 Cosmos DB 帳戶內指派個別的容器。 此模型可在效能和資源配置方面,提供某種程度的隔離。
優點:
- 更好的效能隔離:容器可以配置特定的效能資源,將一個租用戶的工作負載對另一個租用戶的影響降到最低。
- 更容易管理:在單一帳戶內管理多個容器通常比管理多個帳戶更為容易。
- 成本效益:類似於「一個租用戶一個資料分割索引鍵」模型,此方法可減少多個帳戶的額外負荷。
缺點:
- 安全性隔離受限:不同於個別帳戶,同一個帳戶內的容器不會提供實體資料隔離。 因此,此模型可能無法滿足嚴格的安全性需求。
- 資源爭用:如果一個容器的工作負載過高而超出資源限制,仍然會影響其他容器的運作。
資料庫隔離
資料庫隔離模型會在共用的 Cosmos DB 帳戶中,為每個租用戶指派個別的資料庫。 這會在資源配置和管理方面提供強化隔離的洨果。
優點:
- 提升效能表現:個別資料庫可降低資源爭用的風險,提供更好的效能隔離。
- 彈性資源配置:可以在資料庫層級配置和管理資源,以提供量身訂做的效能功能。
- 集中式管理:相較於多個帳戶,更容易管理,同時又比容器層級的隔離提供更強的安全性。
缺點:
- 安全性隔離受限:與容器隔離類似,在單一帳戶內具有獨立的資料庫無法提供實體資料隔離。
- 複雜度:管理多個資料庫可能比管理容器更複雜,特別是隨著租用戶的數目增加。
雖然容器和資料庫隔離模型並不提供與「一個租用戶一個帳戶」模型相同的安全性隔離層級,但它們仍有助於達到效能隔離和彈性資源管理。 這些方法適用於成本效益和簡化管理是優先順序的案例,而嚴格的安全性隔離並非關鍵需求。
藉由仔細評估多租用戶應用程式的特定需求和限制,您可以在 Azure Cosmos DB 中選擇最合適的隔離模型,權衡效能、安全性和成本方面的考量,為您的租用戶帶來最佳成果。
實務實作考量
使用 Cosmos DB 設計多租用戶系統時,請考量下列因素:
- 租用戶工作負載:評估資料大小和活動,以選取適當的隔離模型。
- 效能需求:將您的架構與定義的 SLA 和效能計量保持一致。
- 成本管理:在隔離、效能和基礎結構成本之間取得平衡。
- 延展性:選擇可調整的模型,以便為未來的成長做好規劃。
Azure Cosmos DB 中的實作
每租用戶一個分割區索引鍵:
- 指派資料分割索引鍵:為每個租用戶指派唯一的索引鍵,可確保邏輯上的區隔。
- 儲存資料:租用戶資料侷限於個別的資料分割索引鍵。
- 優化查詢:使用資料分割索引鍵進行有效率的目標式查詢。
階層式資料分割:
- 建立多層級索引鍵:進一步整理租用戶分割區中的資料。
- 定位查詢:使用精確的子分割區定位來強化效能。
- 管理資源:平均分配工作負載以避免效能瓶頸。
一個租用戶一個帳戶:
- 提供個別帳戶:每個租用戶都會取得專用的 Cosmos DB 帳戶。
- 自訂資源:依租用戶需求量身打造效能和 SLA。
- 確保安全性:實體資料隔離提供健全的安全性與合規性。
搭配向量搜尋使用 Azure Cosmos DB 的最佳做法
Azure Cosmos DB 對 DiskANN 向量索引功能的支援,使其成為需要快速、高維度搜尋的應用程式的絕佳選擇,例如 ResearchHub 等 AI 輔助研究平台。 以下是您可以運用這些功能的方式:
高效儲存和擷取:
- 向量索引:使用 DiskANN 向量索引,高效率地儲存和擷取高維度向量。 此功能對於需要在大型資料集中進行相似性搜尋的應用程式非常實用,例如影像辨識或文件相似性。
- 效能優化:DiskANN 的向量搜尋功能可快速、精確地搜尋,確保低延遲和高效能,這對維持良好的使用者體驗至關重要。
跨租用戶進行調整:
- 一個租用戶一個資料分割索引鍵:利用資料分割索引鍵,以邏輯方式隔離租用戶資料,同時受益於 Cosmos DB 的可調整基礎結構。
- 階層式資料分割:實作階層式資料分割,在每個租用戶的分割區中進一步劃分資料,以改善查詢效能和資源分配。
安全性與合規性:
- 客戶自控金鑰:採用客戶自控金鑰來加密靜態資料,確保每個租用戶的資料都安全地隔離。
- 定期金鑰輪替:定期輪替儲存在 Azure Key Vault 中的加密金鑰,以提高安全性。
實務範例:實作 ResearchHub
每租用戶一個分割區索引鍵:
- 指派資料分割索引鍵:為每個組織 (租用戶) 指派唯一的資料分割索引鍵。
- 資料儲存體:租用戶的所有研究人員資料都會儲存在其分割區內,以確保邏輯區隔。
- 查詢優化:查詢是使用租用戶的資料分割索引鍵來執行,藉由隔離資料存取來強化效能。
階層式資料分割:
- 多層級資料分割索引鍵:租用戶分割區內的資料會進一步依 "DepartmentId" 和 "ResearcherId" 或其他相關屬性進行劃分。
- 精細資料管理:這種階層式方法可讓 ResearchHub 更有效率地管理和查詢資料、降低延遲並改善回應時間。
一個租用戶一個帳戶:
- 獨立 Cosmos DB 帳戶:為知名客戶或具有敏感性資料的客戶,提供個別的 Azure Cosmos DB 帳戶。
- 自訂設定:為每個租用戶的特定需求量身打造資源和 SLA,以確保最佳的效能和安全性。
- 強化資料安全性:使用客戶自控加密金鑰來實體區隔資料,可確保健全的安全性合規性。
結論
Azure Cosmos DB 中的多租用戶管理,特別是其 DiskANN 向量索引功能,提供強大的解決方案,可建置可調整且高效能的 AI 應用程式。 無論您選擇一個租用戶一個資料分割索引鍵、階層式資料分割或一個租用戶一個帳戶的模型,都可以有效地在成本、安全性和效能之間取得平衡。 藉由使用這些模型和最佳做法,您可以確保多租用戶應用程式符合客戶的各種需求,提供非凡的使用者體驗。
Azure Cosmos DB 提供所需的工具讓您建置健全、安全且可調整的多租用戶環境。 透過 DiskANN 向量索引的強大功能,您可以提供快速的高維度搜尋,以驅動您的 AI 應用程式。
向量資料庫解決方案
Azure PostgreSQL Server pgvector 延伸模組