多租户策略
在許多用例中,開發人員希望運行一個 Milvus 集群並為多個租戶提供服務,例如幾個產品團隊或數百萬的最終用戶。本指南說明在 Milvus 上實現多租戶的幾種不同策略。
Milvus 的設計支援資料庫、集合或分割層級的多重租用。多租用的目的是將資料和資源彼此分開。在不同的層級實施多租用可以達到不同程度的隔離,但也涉及不同的開銷。在此,我們將解釋它們之間的權衡。
面向資料庫的多租戶
自 Milvus 版本 2.2.9 起,您可以在單一 Milvus 集群中創建多個資料庫。此功能可實現面向資料庫的多租戶,為每個租戶分配一個資料庫,以便他們可以創建自己的集合。這種方法可為租戶提供最佳的資料和資源隔離,但一個叢集中最多只能有 64 個資料庫。
面向集合的多租戶
有兩種可能的方式來實現面向集合的多租戶。
所有租戶使用一個集合
使用單一集合來實現多租戶,方法是加入租戶欄位來區分租戶,這是一個簡單的選項。在針對特定租戶進行 ANN 搜尋時,可加入過濾表達式,過濾掉所有屬於其他租戶的實體。這是實現多租戶的最簡單方法。不過,請注意過濾器的效能可能會成為 ANN 搜尋的瓶頸。為了改善搜尋效能,您可以使用以下面向分割的多租戶方式進行最佳化。
每個租戶一個集合
另一種方法是為每個租戶建立一個集合來儲存自己的資料,而不是將所有租戶的資料儲存在單一集合中。這可提供更好的資料隔離和查詢效能。不過,請記住這種方法在排程上需要較多資源,而且一個群集中最多只能有 10,000 個集合。
面向分區的多租戶
有兩種方法可以實現面向分區的多租戶:
每個租戶一個分割區
管理單一集合比管理多個集合容易得多。與其建立多個集合,不如考慮為每個租戶指派一個分割區,以達到彈性的資料隔離和記憶體管理。面向分区的多租户的搜索性能比面向集合的多租户要好得多。但請注意,集合的租戶數目不應超過集合所能容納的最大分割數目。
基於分區鑰匙的多重租用
Milvus 2.2.9 引入了一個名為分區鑰匙的新功能。在建立集合時,指定一個租戶欄位,並使其成為分區關鍵欄位。Milvus 會根據分區 key 欄位的哈希值,將實體儲存於分區中。在進行 ANN 搜尋時,Milvus 只會搜尋包含分割區金鑰的分割區。這將大幅縮小搜尋的範圍,從而達到比沒有分割區金鑰更好的效能。