Multi-tenancy per la ricerca vettoriale in Azure Cosmos DB
"OpenAI si basa su Cosmos DB per ridimensionare in modo dinamico il servizio ChatGPT, una delle app – consumer più veloci in continua crescita che consente un'elevata affidabilità e una manutenzione ridotta". — Satya Nadella
Azure Cosmos DB si distingue come il primo database operativo serverless completo con ricerca vettoriale, offrendo scalabilità e prestazioni ineguagliabili. Usando Azure Cosmos DB, gli utenti possono migliorare le funzionalità di ricerca vettoriale, garantendo affidabilità elevata e bassa manutenzione per le applicazioni multi-tenant.
La multi-tenancy consente a una singola istanza di un database di gestire più clienti o tenant contemporaneamente. Questo approccio condivide in modo efficiente l'infrastruttura e il sovraccarico operativo, con conseguente risparmio sui costi e gestione semplificata. È fondamentale considerare la progettazione per le applicazioni SaaS e alcune soluzioni aziendali interne.
La multi-tenancy introduce complessità. Il sistema deve essere ridimensionato in modo efficiente per mantenere prestazioni elevate in tutti i tenant, che possono avere carichi di lavoro, requisiti e contratti di servizio univoci.
Si supponga di una piattaforma di ricerca fittizia assistita dall'intelligenza artificiale denominata ResearchHub. Servire migliaia di aziende e singoli ricercatori, ResearchHub gestisce diverse basi utente, scalabilità dei dati e contratti di servizio. Garantire una bassa latenza delle query e prestazioni elevate è fondamentale per sostenere un'esperienza utente eccellente.
Azure Cosmos DB, con la funzionalità di indice vettoriale DiskANN, semplifica la progettazione multi-tenant, offrendo meccanismi efficienti di archiviazione e accesso ai dati per applicazioni ad alte prestazioni.
Modelli multi-tenancy in Azure Cosmos DB
In Azure Cosmos DB è consigliabile adottare due approcci principali per la gestione del multi-tenancy: chiave di partizione per tenant o account per tenant, ognuno con un proprio set di vantaggi e compromessi.
1. Chiave di partizione per ogni tenant
Per una maggiore densità di tenant e un isolamento inferiore, il modello di chiave di partizione per tenant è efficace. A ogni tenant viene assegnata una chiave di partizione univoca all'interno di un determinato contenitore, consentendo la separazione logica dei dati. Questa strategia funziona meglio quando ogni tenant ha approssimativamente lo stesso volume del carico di lavoro. Se si verifica un'asimmetria significativa, i clienti devono prendere in considerazione l'isolamento di tali tenant nel proprio account. Inoltre, se un singolo tenant ha più di 20 GB di dati, è necessario usare chiavi di partizione gerarchiche (HPK). Per la ricerca vettoriale in particolare, l'indice quantiizedFlat può essere eseguito molto bene se le query di ricerca vettoriale possono essere incentrate su una particolare partizione o set di partizioni.
Vantaggi:
- Efficienza dei costi: la condivisione di un singolo account Cosmos DB tra più tenant riduce il sovraccarico.
- Scalabilità: può gestire un numero elevato di tenant, ognuno isolato all'interno della chiave di partizione.
- Gestione semplificata: meno account Cosmos DB da gestire.
- Chiavi di partizione gerarchiche (HPK): ottimizza le prestazioni dell'organizzazione dei dati e delle query nelle app multi-tenant con un numero elevato di tenant.
Svantaggi:
- Contesa di risorse: le risorse condivise possono causare conflitti durante il picco di utilizzo.
- Isolamento limitato: isolamento logico ma non fisico, che potrebbe non soddisfare requisiti di isolamento rigorosi.
- Minore flessibilità: riduzione della flessibilità per ogni tenant per abilitare funzionalità a livello di account come la replica geografica, il ripristino temporizzato (PITR) e le chiavi gestite dal cliente (CMK).
Partizionamento gerarchico: organizzazione dei dati avanzata
Il partizionamento gerarchico si basa sul modello di chiave di partizione per tenant, aggiungendo livelli più profondi di organizzazione dei dati. Questo metodo prevede la creazione di più livelli di chiavi di partizione per una gestione dei dati più granulare. Il livello più basso del partizionamento gerarchico deve avere cardinalità elevata. In genere, è consigliabile usare un ID/GUID per questo livello per garantire una scalabilità continua superiore a 20 GB per tenant.
Vantaggi:
- Query ottimizzate: la destinazione più precisa delle sottopartizioni a livello di partizione padre riduce la latenza delle query.
- Scalabilità migliorata: facilita la segmentazione dei dati più approfondita per semplificare la scalabilità.
- Migliore allocazione delle risorse: distribuisce in modo uniforme i carichi di lavoro, riducendo al minimo i colli di bottiglia per i conteggi dei tenant elevati.
Considerazioni:
- Se le applicazioni hanno pochissimi tenant e usano il partizionamento gerarchico, questo può causare colli di bottiglia perché tutti i documenti con la stessa chiave di primo livello scriveranno nella stessa partizione fisica.
Esempio: ResearchHub può stratificare i dati all'interno della partizione di ogni tenant organizzandoli a vari livelli, ad esempio "DepartmentId" e "ResearcherId", semplificando la gestione efficiente e le query.
2. Account-per-tenant
Per l'isolamento massimo, è preferibile usare il modello account per tenant. Ogni tenant ottiene un account Cosmos DB dedicato, assicurando una separazione completa delle risorse.
Vantaggi:
- Isolamento elevato: nessuna contesa o interferenza a causa di risorse dedicate.
- Contratti di servizio personalizzati: le risorse e i contratti di servizio possono essere personalizzati in base alle esigenze dei singoli tenant.
- Sicurezza avanzata: l'isolamento dei dati fisici garantisce una sicurezza affidabile.
- Flessibilità: i tenant possono abilitare funzionalità a livello di account come la replica geografica, il ripristino temporizzato (PITR) e le chiavi gestite dal cliente in base alle esigenze.
Svantaggi:
- Maggiore gestione: maggiore complessità nella gestione di più account Cosmos DB.
- Costi più elevati: più account comportano costi di infrastruttura più elevati.
Isolamento della sicurezza con chiavi gestite dal cliente
Azure Cosmos DB abilita le chiavi gestite dal cliente per la crittografia dei dati, aggiungendo un ulteriore livello di sicurezza per gli ambienti multi-tenant.
Passaggi da implementare:
- Configurare Azure Key Vault: archiviare in modo sicuro le chiavi di crittografia.
- Collegamento a Cosmos DB: associare l'insieme di credenziali delle chiavi all'account Cosmos DB.
- Ruotare le chiavi regolarmente: migliorare la sicurezza aggiornando regolarmente le chiavi.
L'uso di chiavi gestite dal cliente garantisce che i dati di ogni tenant vengano crittografati in modo univoco, offrendo sicurezza e conformità affidabili.
Altri modelli di isolamento
Isolamento del contenitore e del database
Oltre ai modelli di chiave di partizione per tenant e account per tenant, Azure Cosmos DB offre altri metodi di isolamento, ad esempio l'isolamento dei contenitori e l'isolamento del database. Questi approcci offrono diversi gradi di isolamento delle prestazioni, anche se non forniscono lo stesso livello di isolamento della sicurezza del modello account-per-tenant.
Isolamento dei contenitori
Nel modello di isolamento del contenitore a ogni tenant viene assegnato un contenitore separato all'interno di un account Cosmos DB condiviso. Questo modello consente un certo livello di isolamento in termini di prestazioni e allocazione delle risorse.
Vantaggi:
- Migliore isolamento delle prestazioni: i contenitori possono essere allocati risorse di prestazioni specifiche, riducendo al minimo l'impatto del carico di lavoro di un tenant su un altro.
- Gestione semplificata: la gestione di più contenitori all'interno di un singolo account è in genere più semplice rispetto alla gestione di più account.
- Efficienza dei costi: analogamente al modello di chiave di partizione per tenant, questo metodo riduce il sovraccarico di più account.
Svantaggi:
- Isolamento della sicurezza limitato: a differenza degli account separati, i contenitori all'interno dello stesso account non forniscono l'isolamento dei dati fisici. Pertanto, questo modello potrebbe non soddisfare requisiti di sicurezza rigorosi.
- Contesa di risorse: i carichi di lavoro pesanti in un contenitore possono comunque influire su altri se i limiti delle risorse vengono violati.
Isolamento del database
Il modello di isolamento del database assegna a ogni tenant un database separato all'interno di un account Cosmos DB condiviso. Ciò garantisce un isolamento avanzato in termini di allocazione e gestione delle risorse.
Vantaggi:
- Prestazioni migliorate: i database separati riducono il rischio di conflitti di risorse, offrendo un migliore isolamento delle prestazioni.
- Allocazione flessibile delle risorse: le risorse possono essere allocate e gestite a livello di database, fornendo funzionalità di prestazioni personalizzate.
- Gestione centralizzata: più facile da gestire rispetto a più account, offrendo tuttavia un maggiore isolamento rispetto alla separazione a livello di contenitore.
Svantaggi:
- Isolamento di sicurezza limitato: analogamente all'isolamento dei contenitori, la presenza di database separati all'interno di un singolo account non garantisce l'isolamento dei dati fisici.
- Complessità: la gestione di più database può essere più complessa rispetto alla gestione dei contenitori, soprattutto quando aumenta il numero di tenant.
Anche se i modelli di isolamento dei contenitori e del database non offrono lo stesso livello di isolamento della sicurezza del modello account per tenant, possono comunque essere utili per ottenere l'isolamento delle prestazioni e la gestione flessibile delle risorse. Questi metodi sono utili per gli scenari in cui l'efficienza dei costi e la gestione semplificata sono priorità e un rigoroso isolamento della sicurezza non è un requisito critico.
Valutando attentamente le esigenze e i vincoli specifici dell'applicazione multi-tenant, è possibile scegliere il modello di isolamento più adatto in Azure Cosmos DB, bilanciare le prestazioni, la sicurezza e le considerazioni sui costi per ottenere i migliori risultati per i tenant.
Considerazioni sull'implementazione del mondo reale
Quando si progetta un sistema multi-tenant con Cosmos DB, considerare questi fattori:
- Carico di lavoro tenant: valutare le dimensioni e l'attività dei dati per selezionare il modello di isolamento appropriato.
- Requisiti di prestazioni: allineare l'architettura con i contratti di servizio definiti e le metriche delle prestazioni.
- Gestione dei costi: bilanciare i costi dell'infrastruttura rispetto alla necessità di isolamento e prestazioni.
- Scalabilità: pianificare la crescita scegliendo modelli scalabili.
Implementazione pratica in Azure Cosmos DB
Chiave di partizione per ogni tenant:
- Assegnare chiavi di partizione: chiavi univoche per ogni tenant garantiscono la separazione logica.
- Archivia dati: i dati del tenant sono limitati alle rispettive chiavi di partizione.
- Ottimizzare le query: usare le chiavi di partizione per query efficienti e mirate.
Partizionamento gerarchico:
- Creare chiavi multilivello: organizzare ulteriormente i dati all'interno delle partizioni tenant.
- Query di destinazione: migliorare le prestazioni con una destinazione di sottopartizione precisa.
- Gestire le risorse: distribuire i carichi di lavoro in modo uniforme per evitare colli di bottiglia.
Account-Per-Tenant:
- Fornire account separati: ogni tenant ottiene un account Cosmos DB dedicato.
- Personalizzare le risorse: personalizzare le prestazioni e i contratti di servizio in base ai requisiti del tenant.
- Garantire la sicurezza: l'isolamento dei dati fisici offre sicurezza e conformità affidabili.
Procedure consigliate per l'uso di Azure Cosmos DB con la ricerca vettoriale
Il supporto di Azure Cosmos DB per la funzionalità di indice vettoriale DiskANN lo rende una scelta eccellente per le applicazioni che richiedono ricerche veloci e dimensionali, ad esempio piattaforme di ricerca assistita dall'intelligenza artificiale come ResearchHub. Ecco come sfruttare queste funzionalità:
Archiviazione e recupero efficienti:
- Indicizzazione vettoriale: usare l'indice vettoriale DiskANN per archiviare e recuperare in modo efficiente vettori dimensionali. Ciò è utile per le applicazioni che comportano ricerche di somiglianza in set di dati di grandi dimensioni, ad esempio il riconoscimento delle immagini o la somiglianza dei documenti.
- Ottimizzazione delle prestazioni: le funzionalità di ricerca vettoriale di DiskANN consentono ricerche rapide e accurate, garantendo bassa latenza e prestazioni elevate, che è fondamentale per mantenere un'esperienza utente ottimale.
Scalabilità tra tenant:
- Chiave di partizione per tenant: usare le chiavi di partizione per isolare logicamente i dati del tenant sfruttando al contempo l'infrastruttura scalabile di Cosmos DB.
- Partizionamento gerarchico: implementare il partizionamento gerarchico per segmentare ulteriormente i dati all'interno della partizione di ogni tenant, migliorando le prestazioni delle query e la distribuzione delle risorse.
Sicurezza e conformità:
- Chiavi gestite dal cliente: implementare chiavi gestite dal cliente per la crittografia dei dati inattivi, assicurandosi che i dati di ogni tenant siano isolati in modo sicuro.
- Rotazione regolare delle chiavi: migliorare la sicurezza ruotando regolarmente le chiavi di crittografia archiviate in Azure Key Vault.
Esempio reale: implementazione di ResearchHub
Chiave di partizione per ogni tenant:
- Assegna chiavi di partizione: a ogni organizzazione (tenant) viene assegnata una chiave di partizione univoca.
- Archiviazione dati: tutti i dati dei ricercatori per un tenant vengono archiviati all'interno della partizione, garantendo la separazione logica.
- Ottimizzazione query: le query vengono eseguite usando la chiave di partizione del tenant, migliorando le prestazioni isolando l'accesso ai dati.
Partizionamento gerarchico:
- Chiavi di partizione a più livelli: i dati all'interno della partizione di un tenant vengono ulteriormente segmentati da "DepartmentId" e "ResearcherId" o da altri attributi pertinenti.
- Gestione granulare dei dati: questo approccio gerarchico consente a ResearchHub di gestire ed eseguire query sui dati in modo più efficiente, riducendo la latenza e migliorando i tempi di risposta.
Account-Per-Tenant:
- Account Cosmos DB separati: i client con profilo elevato o quelli con dati sensibili vengono forniti singoli account Cosmos DB.
- Configurazioni personalizzate: le risorse e i contratti di servizio sono personalizzati per soddisfare le esigenze specifiche di ogni tenant, garantendo prestazioni e sicurezza ottimali.
- Sicurezza dei dati avanzata: la separazione fisica dei dati con le chiavi di crittografia gestite dal cliente garantisce una solida conformità alla sicurezza.
Conclusione
La multi-tenancy in Azure Cosmos DB, in particolare con la funzionalità di indice vettoriale DiskANN, offre una soluzione potente per la creazione di applicazioni di intelligenza artificiale scalabili e ad alte prestazioni. Sia che si scelgano modelli di partizione chiave per tenant, partizionamento gerarchico o di account per tenant, è possibile bilanciare in modo efficace i costi, la sicurezza e le prestazioni. Usando questi modelli e procedure consigliate, è possibile garantire che l'applicazione multi-tenant soddisfi le diverse esigenze dei clienti, offrendo un'esperienza utente eccezionale.
Azure Cosmos DB offre gli strumenti necessari per creare un ambiente multi-tenant affidabile, sicuro e scalabile. Grazie alla potenza dell'indicizzazione vettoriale DiskANN, è possibile offrire ricerche veloci e dimensionali che determinano le applicazioni di intelligenza artificiale.
Soluzioni di database vettoriali
Estensione pgvector del server PostgreSQL di Azure
Contenuto correlato
- Versione di prova gratuita di 30 giorni senza sottoscrizione di Azure
- Multi-tenancy e Azure Cosmos DB