Strategie multi-tenancy
In molti casi d'uso, gli sviluppatori vogliono gestire un cluster Milvus e servire più tenancy, come un paio di team di prodotto o milioni di utenti finali. Questa guida illustra alcune strategie diverse per ottenere la multi-tenancy su Milvus.
Milvus è progettato per supportare la multi-tenancy a livello di database, collezione o partizione. L'obiettivo della multi-tenancy è quello di separare i dati e le risorse tra loro. L'implementazione della multi-tenancy a diversi livelli può raggiungere un diverso grado di isolamento, ma comporta anche un diverso overhead. Qui spieghiamo i loro compromessi.
Multi-tenancy orientata al database
Dalla versione 2.2.9 di Milvus, è possibile creare più database in un singolo cluster Milvus. Questa funzione consente di ottenere una multi-tenancy orientata al database, assegnando un database per ogni tenant, in modo che questi possano creare le proprie collezioni. Questo approccio offre il miglior isolamento dei dati e delle risorse per i tenant, ma è limitato a 64 database in un cluster al massimo.
Multi-tenancy orientata alle collezioni
Esistono due modi possibili per ottenere la multi-tenancy orientata alle collezioni.
Una collezione per tutti i tenant
L'uso di una singola collezione per implementare la multi-tenancy, aggiungendo un campo tenant per distinguere i tenant, è un'opzione semplice. Quando si effettua una ricerca RNA per uno specifico tenant, si aggiunge un'espressione di filtro per filtrare tutte le entità che appartengono ad altri tenant. Questo è il modo più semplice per ottenere la multi-tenancy. Tuttavia, occorre tenere presente che le prestazioni del filtro possono diventare il collo di bottiglia delle ricerche ANN. Per migliorare le prestazioni della ricerca, si può ottimizzare con la multi-tenancy orientata alle partizioni.
Una raccolta per ogni tenancy
Un altro approccio consiste nel creare una collezione per ogni tenant per memorizzare i propri dati, invece di memorizzare i dati di tutti i tenant in una singola collezione. In questo modo si ottiene un migliore isolamento dei dati e migliori prestazioni di interrogazione. Tuttavia, bisogna tenere presente che questo approccio richiede più risorse per la pianificazione ed è limitato a un massimo di 10.000 raccolte in un cluster.
Multi-tenancy orientata alle partizioni
Esistono due modi per ottenere la multi-tenancy orientata alle partizioni:
Una partizione per tenant
La gestione di una singola raccolta è molto più semplice di quella di più raccolte. Invece di creare più collezioni, si può pensare di assegnare una partizione per ogni tenant per ottenere un isolamento dei dati e una gestione della memoria flessibili. Le prestazioni di ricerca della multi-tenancy orientata alle partizioni sono molto migliori di quelle della multi-tenancy orientata alle collezioni. Tuttavia, si noti che il numero di tenant della collezione non deve superare il numero massimo di partizioni che una collezione può contenere.
Multi-tenancy basata su chiavi di partizione
Milvus 2.2.9 introduce una nuova funzione chiamata chiave di partizione. Al momento della creazione di una collezione, si nomina un campo tenancy e lo si rende il campo chiave della partizione. Milvus memorizzerà le entità in una partizione in base al valore hash del campo chiave della partizione. Quando si effettuano ricerche su RNA, Milvus cerca solo nella partizione che contiene la chiave di partizione. In questo modo si riduce notevolmente la portata della ricerca e si ottengono prestazioni migliori rispetto a quelle ottenute senza la chiave di partizione.