Strategie multi-tenancy
Con la crescente popolarità di ChatGPT, sempre più sviluppatori creano i propri servizi SaaS utilizzando lo stack CVP (ChatGPT, Vector Database, Prompt). Questa guida spiega come ottenere la multi-tenancy su Milvus, uno dei database vettoriali più utilizzati al mondo, per stare al passo con questa tendenza.
La multi-tenancy è un'architettura in cui una singola istanza di Milvus serve più tenant. Il modo più semplice per distinguere i tenant è separare i loro dati e le loro risorse da quelli degli altri. Ogni tenant ha le proprie risorse dedicate o condivide le risorse con altri per gestire oggetti Milvus come database, collezioni e partizioni. In base a questi oggetti, esistono metodi corrispondenti per ottenere la multi-tenancy di Milvus.
Multi-tenancy orientata ai database
Dalla versione 2.2.9 di Milvus è disponibile il database degli oggetti. È possibile creare più database in un singolo cluster Milvus. Questa nuova funzione consente di ottenere una multi-tenancy orientata al database, assegnando un database a ciascun tenant, in modo che questi possa creare le proprie collezioni e partizioni per sfruttare al meglio i propri dati. Tuttavia, questa strategia garantisce l'isolamento dei dati e le prestazioni di ricerca per i tenant, ma le risorse possono essere sprecate per i tenant inattivi.
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.
Una collezione per tenant
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 maggiori investimenti in termini di pianificazione delle risorse, capacità operativa e costi e potrebbe non essere applicabile se il numero di tenant supera il numero massimo di collezioni supportate da un singolo cluster Milvus.
Multi-tenancy orientata alle partizioni
Esistono anche due modi possibili per ottenere la multi-tenancy orientata alle partizioni:
Una partizione per tenant
La gestione di una singola collezione è molto più semplice della gestione di più collezioni. 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 ai valori del campo chiave della partizione. Quando si effettuano ricerche su RNA, Milvus passa a una partizione basata sulla chiave di partizione specificata, filtra le entità in base alla chiave di partizione e cerca tra le entità filtrate.