Condividi tramite


Procedure consigliate per l'architettura per Azure Cosmos DB per NoSQL

Azure Cosmos DB è una soluzione di database completamente gestita che può ospitare più tipi di database come NoSQL, relazionale, vettoriale e database di tabelle. Può soddisfare la maggior parte dei casi d'uso per i carichi di lavoro. Le raccomandazioni di questa guida sono incentrate sulla variante di Azure Cosmos DB per NoSQL . È anche possibile applicare alcune raccomandazioni fondamentali ad altre varianti.

Questo articolo presuppone che in qualità di architetto siano state esaminate le opzioni dei dati di Azure e che sia stato scelto Azure Cosmos DB per NoSQL come archivio dati per il carico di lavoro. Le linee guida presenti in questo articolo forniscono raccomandazioni architettoniche che sono collegate ai principi dei pilastri del Framework Well-Architected.

Importante

Come usare questa guida

Ogni sezione include un elenco di controllo di progettazione che presenta aree di interesse per l'architettura insieme alle strategie di progettazione adattate all'ambito tecnologico.

Sono incluse anche raccomandazioni per le funzionalità tecnologiche che possono aiutare a materializzare tali strategie. Le raccomandazioni non rappresentano un elenco completo di tutte le configurazioni disponibili per Azure Cosmos DB per NoSQL e le relative dipendenze. Vengono invece elencate le raccomandazioni principali mappate alle prospettive di progettazione. Usa le raccomandazioni per costruire una prova del concetto o per ottimizzare gli ambienti esistenti.

Ambito della tecnologia

Questa revisione è incentrata sulle decisioni correlate per le risorse di Azure seguenti:

  • Azure Cosmos DB per il NoSQL

Affidabilità

Lo scopo del pilastro Affidabilità è fornire funzionalità continue attraverso la costruzione di una resilienza sufficiente e la capacità di recuperare rapidamente dai guasti.

I principi di progettazione dell'affidabilità forniscono una strategia di progettazione di alto livello applicata ai singoli componenti, ai flussi del sistema e al sistema nel suo complesso.

Elenco di controllo della progettazione

Avvia la tua strategia di progettazione basandoti sulla checklist di revisione del progetto per l'affidabilità. Determinare la rilevanza per i requisiti aziendali tenendo presente i livelli di consistenza, la replica tra le regioni e il throughput fornito. Estendere la strategia per includere altri approcci in base alle esigenze.

  • Scegliere una progettazione semplice ed evitare funzionalità non necessarie. Non adottare funzionalità che inutilmente aggiungono complessità al carico di lavoro, ad esempio scritture multiple primarie e indicizzazione personalizzata. Azure Cosmos DB supporta queste funzionalità, ma può aggiungere complessità e carico operativo significativi. Valutare attentamente se il carico di lavoro richiede funzionalità avanzate.

    Delegare le responsabilità del carico di lavoro e gli aspetti trasversali ad altri servizi, come Microsoft Entra ID per l'autenticazione e l'autorizzazione o Azure Monitor e Application Insights per il monitoraggio.

  • Identificare e classificare in ordine di priorità i flussi del carico di lavoro. Non tutti i flussi nell'applicazione sono ugualmente importanti. Identificare i percorsi critici e assegnare priorità a ogni flusso per guidare le decisioni di progettazione. La progettazione del flusso utente può influenzare i livelli di servizio, le funzionalità e la capacità allocata al database di Azure Cosmos DB.

    Per identificare i flussi critici che potrebbero richiedere un trattamento speciale, acquisire i requisiti di elaborazione che li separano in termini di funzionalità di elaborazione dati. Ad esempio, alcuni flussi potrebbero richiedere una velocità effettiva maggiore o essere più sensibili ai problemi di latenza. Alcuni flussi di soluzioni potrebbero richiedere livelli di coerenza delle transazioni diversi.

  • Usare l'analisi della modalità di errore per identificare potenziali errori nel carico di lavoro. Pianificare strategie di mitigazione per potenziali errori. La tabella seguente mostra esempi di analisi della modalità di errore.

    Fallimento Mitigazione
    Latenza elevata e timeout dopo la distribuzione agli utenti in una nuova regione geografica Abilitare la replica in più aree in un'area di Azure più vicina ai nuovi utenti.
    Limitazione a causa del superamento delle unità di richiesta (RU) Implementare la logica di ripetizione dei tentativi. Monitorare il consumo di UR e regolare le impostazioni di velocità effettiva in base alle esigenze.
    Errore del servizio Azure Cosmos DB in una singola zona in una singola area di Azure Configurare il supporto della zona di disponibilità quando si crea un database.

    Per altre informazioni, vedere l'analisi della modalità di errore per le applicazioni di Azure.

  • Creare ridondanza per migliorare la resilienza e soddisfare gli obiettivi di affidabilità. Progettare la distribuzione dell'account di database in modo che si estenda almeno due aree in Azure. Distribuire l'account tra più zone di disponibilità se l'area di Azure la supporta.

    Valutare le strategie di scrittura in più aree e in un'area singola per il carico di lavoro. Per la scrittura in una singola regione, progettare il carico di lavoro in modo che abbia almeno una seconda area di lettura per il failover. Abilitare il failover automatico per scenari di scrittura a singola area e lettura in più aree. Per la scrittura in più aree, confrontare i compromessi in termini di complessità e coerenza rispetto ai vantaggi della scrittura in più aree. Per altre informazioni, vedere Aspettative durante un'interruzione a livello di area per gli account di scrittura in una singola area e in più aree.

    Valutare il modo in cui il livello di coerenza e la modalità di replica influiscono sull'obiettivo del punto di ripristino (RPO) in un'interruzione a livello di area.

    Progettare un test end-to-end di disponibilità elevata per l'applicazione che include il test del failover del database e il failback.

  • Usare le funzionalità native di ripristino di emergenza e backup. Implementare backup e ripristini di database e contenitori per soddisfare le tue esigenze. Gli scenari di ripristino includono il ripristino temporizzato, il ripristino da operazioni distruttive accidentali, il ripristino delle risorse eliminate e il ripristino in un'altra area in un momento specifico. Configurare l'account con il backup continuo. Scegliere il periodo di conservazione appropriato in base ai requisiti aziendali.

  • Allineare la progettazione di Azure Cosmos DB alle linee guida e ai modelli di progettazione delle applicazioni standard del settore. Esplorare la guida alla progettazione di applicazioni resilienti, esaminare i criteri di ripetizione dei tentativi predefiniti per gli SDK e pianificare la gestione personalizzata per errori temporanei specifici. Queste guide forniscono procedure consigliate per rendere resiliente il codice dell'applicazione agli errori temporanei.

Consigli

Raccomandazione Beneficio
Distribuire l'account Azure Cosmos DB tra zone di disponibilità quando disponibili. Le zone di disponibilità offrono alimentazione, rete e raffreddamento separati, che consente di isolare gli errori hardware in un sottoinsieme delle tue repliche. Quando non si usa la funzionalità zone di disponibilità, Azure Cosmos DB si estende su più repliche in un'unica zona di disponibilità selezionata in modo casuale.
Configurare l'account Azure Cosmos DB per estendere almeno due aree. L'estensione di più aree consente di garantire che il carico di lavoro sia resiliente alle interruzioni a livello di area.
Abilita il failover gestito dal servizio sul tuo account. Comprendere i compromessi del failover gestito dal servizio e pianificare il failover forzato, se necessario.

Disabilitare temporaneamente il failover gestito dal servizio per convalidare l'alta disponibilità end-to-end della tua applicazione. È possibile avviare un failover manuale usando uno script o il portale di Azure.
Il failover gestito dal servizio consente ad Azure Cosmos DB di modificare automaticamente l'area di scrittura di un account con più aree per mantenere la disponibilità. Questa modifica si verifica senza interazione dell'utente.

Sicurezza

Lo scopo del pilastro Sicurezza è fornire garanzie di riservatezza, integrità e disponibilità al carico di lavoro.

I principi di progettazione della sicurezza forniscono una strategia di progettazione di alto livello per raggiungere tali obiettivi applicando approcci alla progettazione tecnica di Azure Cosmos DB per NoSQL.

Elenco di controllo della progettazione

Avvia la tua strategia di progettazione in base alla checklist di revisione della progettazione per la sicurezza e identifica vulnerabilità e controlli per migliorare il profilo di sicurezza. Estendere la strategia per includere altri approcci in base alle esigenze.

  • Esaminare le baseline di sicurezza. Per migliorare il comportamento di sicurezza del carico di lavoro, esaminare l'elenco di controllo per la sicurezza per i database di Azure e la baseline di sicurezza per Azure Cosmos DB. Implementare almeno le baseline di sicurezza per la protezione dei dati e la gestione delle identità per proteggere l'account Azure Cosmos DB.

    Valutare la conformità e le certificazioni a livello di servizio nel contesto dei requisiti dei dati personali globali correnti.

  • Implementare la gestione rigorosa, condizionale e controllabile delle identità e degli accessi. Usare Microsoft Entra ID per le esigenze di autenticazione e autorizzazione del carico di lavoro. Microsoft Entra ID fornisce la gestione centralizzata delle autorizzazioni e degli accessi.

    Per l'accesso al livello di controllo e al livello dati dell'account, creare ruoli, gruppi e assegnazioni secondo il principio dell'accesso con privilegi minimi. Valutare la possibilità di disabilitare l'autenticazione basata su chiave.

  • Crittografare i dati.Crittografare i dati inattivi o in movimento usando chiavi gestite dal servizio o chiavi gestite dal cliente.

  • Applicare la segmentazione di rete e i controlli di sicurezza. Creare la segmentazione intenzionale e i perimetri nella progettazione della rete e applicare principi di difesa avanzata usando controlli di rete localizzati in tutti i limiti di rete.

    Ridurre l'area di superficie di attacco usando endpoint privati in base alla baseline della sicurezza per Azure Cosmos DB.

  • Implementare una strategia di monitoraggio della sicurezza olistica. Controllare l'accesso utente, le violazioni della sicurezza e le operazioni delle risorse usando i log del piano di controllo.

    Monitorare l'uscita dei dati, le modifiche ai dati, l'utilizzo e la latenza usando le metriche del piano dati.

  • Usare procedure di sviluppo e test sicure. Seguire le procedure di sviluppo software consigliate per proteggere l'accesso ai dati. Seguire procedure di codifica sicure ed eseguire revisioni del codice sicure quando si sviluppano applicazioni che interagiscono con Azure Cosmos DB.

Consigli

Raccomandazione Beneficio
Disabilitare gli endpoint pubblici e usare gli endpoint privati quando possibile. L'uso della rete privata tramite endpoint privati riduce la superficie di attacco soggetta ad attacchi all'account.
Usare il controllo degli accessi basato sul ruolo (RBAC) per limitare l'accesso al piano di controllo a identità e gruppi specifici all'interno di assegnazioni ben definite. L'uso del controllo degli accessi in base al ruolo consente di impedire l'accesso non autorizzato all'account. Assegnare ruoli e autorizzazioni appropriati a utenti o applicazioni che accedono ad Azure Cosmos DB in base al principio dei privilegi minimi.
Creare endpoint e regole di rete virtuale per limitare l'accesso all'account. Usare i gruppi di sicurezza di rete (NSG) per controllare il traffico da e verso le risorse di Azure Cosmos DB. Gli endpoint servizio di rete virtuale, i gruppi di sicurezza di rete e le regole del firewall consentono di limitare l'accesso all'account Azure Cosmos DB e proteggere i dati da accessi non autorizzati.
Proteggere da vulnerabilità di sicurezza comuni, come gli attacchi di iniezione, il cross-site scripting o i riferimenti diretti a oggetti non sicuri. Implementare la convalida dell'input, le query con parametri e la gestione degli errori appropriata per i codici di stato HTTP comuni per evitare rischi per la sicurezza. La convalida dell'input consente di evitare che i dati dannosi vengano elaborati dall'applicazione. Questo approccio blocca i dati potenzialmente dannosi che potrebbero causare violazioni della sicurezza o danneggiamento dei dati.

Una corretta gestione degli errori consente all'applicazione di rispondere agli errori in modo controllato e impedisce l'esposizione di informazioni riservate.
Monitorare i log del piano di controllo per rilevare modifiche non autorizzate all'account Azure Cosmos DB. Il monitoraggio consente di tenere traccia dei modelli di accesso e dei log di controllo per garantire che il database rimanga sicuro e conforme alle normative di protezione dei dati pertinenti. Il monitoraggio delle metriche del piano dati può anche aiutare a identificare modelli sconosciuti che potrebbero rivelare una violazione della sicurezza.
Abilitare Microsoft Defender per Azure Cosmos DB per attivare avvisi di sicurezza quando si verificano attività anomale. Microsoft Defender rileva i tentativi di exploit dei database nell'account. Defender rileva potenziali attacchi SQL injection, modelli di accesso sospetti e altre potenziali attività di sfruttamento.

Ottimizzazione dei costi

L'ottimizzazione dei costi è incentrata su rilevare modelli di spesa, assegnare priorità agli investimenti in aree critiche e ottimizzare in altri per soddisfare il budget dell'organizzazione rispettando i requisiti aziendali.

I principi di progettazione di Ottimizzazione costi forniscono una strategia di progettazione di alto livello per raggiungere tali obiettivi e fare compromessi in base alle esigenze nella progettazione tecnica relativa a Cosmos DB per No SQL e al relativo ambiente.

Elenco di controllo della progettazione

Avvia la tua strategia di progettazione basata sulla checklist di revisione del design per l'ottimizzazione dei costi negli investimenti. Ottimizzare la progettazione in modo che il carico di lavoro sia allineato al budget allocato per esso. La progettazione deve usare le funzionalità di Azure appropriate, monitorare gli investimenti e trovare opportunità per ottimizzare nel tempo.

  • Ottimizzare la strategia di ridimensionamento di Azure Cosmos DB. Informazioni su come Azure Cosmos DB gestisce la scalabilità delle risorse di archiviazione e della velocità effettiva. Determinare il giusto equilibrio tra prestazioni e costi per soddisfare i requisiti.

    Seleziona uno schema di allocazione della larghezza di banda che si adatti al tuo carico di lavoro. Esaminare i vantaggi della velocità effettiva standard e a scalabilità automatica distribuita a livello di database o contenitore. Prendere in considerazione anche le opzioni serverless quando è opportuno. Analizza i modelli di traffico del carico di lavoro per selezionare lo schema di allocazione della larghezza di banda più adatto.

    Determinare una chiave di partizione o un set di chiavi di partizione che abbiano cardinalità elevata e rimangano invariate. Usare le linee guida e le procedure consigliate esistenti per selezionare una chiave di partizione appropriata. Considerare anche i criteri di indicizzazione quando si determina una chiave di partizione.

  • Ottimizza i costi dei dati di Azure Cosmos DB. Eseguire un inventario dei dati e calcolare l'archivio dati complessivo previsto per il carico di lavoro. Le dimensioni di elementi e indici influiscono sui costi di archiviazione dei dati. Calcolare l'impatto della replica e del backup sui costi di archiviazione.

    Creare una strategia per rimuovere automaticamente gli elementi meno recenti che non vengono più usati o necessari. Se necessario, esportare questi elementi in una soluzione di archiviazione a costi inferiori prima di rimuoverli.

  • Ottimizzare le query per i costi. Valuta le tue query più comuni che riducono al minimo le ricerche tra partizioni. Usare queste informazioni per informare il processo di selezione di una chiave di partizione o la personalizzazione di un criterio di indicizzazione.

    Usare la proiezione per ridurre i costi di velocità effettiva dei set di risultati di query di grandi dimensioni. Creare query per proiettare solo il numero minimo di campi richiesti da un set di risultati. Se i calcoli sui campi sono necessari, valutare il costo della velocità effettiva dell'esecuzione di tali calcoli sul lato server rispetto al lato client.

    Evitare l'uso di query illimitate tra partizioni diverse. Valutare e creare query per assicurarsi di eseguire ricerche all'interno di una singola partizione logica, quando possibile. Utilizzare i filtri di query per controllare le partizioni logiche che la query deve mirare. Se una query deve eseguire la ricerca tra partizioni logiche, associare la query solo a cercare un subset di partizioni logiche anziché un'analisi completa.

    Progettare un criterio di indicizzazione che consideri le operazioni e le query comuni nel carico di lavoro.

Consigli

Raccomandazione Beneficio
Monitorare l'utilizzo e i modelli di UR al secondo. Usare query e altre tecniche di ricerca dei dati per trovare antipattern nel codice dell'applicazione. L'uso delle metriche per monitorare il consumo di UR a partire dalle prime fasi della distribuzione di Azure Cosmos DB consente di identificare query e operazioni inefficienti che utilizzano ur eccessive. È possibile ottimizzare le query per ridurre i costi.
Personalizzare i criteri di indicizzazione per allinearsi al carico di lavoro. Usare un criterio di indicizzazione basato solo sui percorsi che è necessario indicizzare per le query comuni.

Per carichi di lavoro con intensa attività di scrittura, disabilitare l'indicizzazione automatica delle colonne non utilizzate nelle query.
Il criterio di indicizzazione predefinito indicizza tutti i percorsi in un elemento e può influire significativamente sul consumo e sui costi delle UR. La personalizzazione dei criteri di indicizzazione consente di personalizzare la strategia di indicizzazione in base ai requisiti specifici. Questo approccio consente di garantire prestazioni ottimali e l'utilizzo delle risorse.
Selezionare le chiavi di partizione per il carico di lavoro che distribuiscono uniformemente l'utilizzo della velocità effettiva e l'archiviazione dei dati tra partizioni logiche. Evitare partizioni calde che ricevono una quantità sproporzionata di traffico. Le partizioni non bilanciate possono aumentare i costi di velocità effettiva e gli errori temporanei.

La selezione deve anche ridurre al minimo il numero di query senza limiti tra partizioni. Utilizzare le query di ricerca più comuni per individuare le potenziali chiavi di partizione che probabilmente eseguono solo query su partizioni singole o query limitate tra diverse partizioni.
La scelta della chiave di partizione corretta distribuisce uniformemente i dati, riducendo la probabilità di partizioni calde e ottimizzando il consumo di throughput. Questo approccio può migliorare significativamente l'efficienza e ridurre i costi.
Selezionare l'opzione di throughput configurato corretta per l'istanza di Azure Cosmos DB. Scegliere tra serverless o throughput con provisioning, e tra provisioning manuale o scalabilità automatica. Applicare queste opzioni a livello di database o contenitore, a seconda delle esigenze specifiche del carico di lavoro.

In genere, i carichi di lavoro di piccole dimensioni e i carichi di lavoro di sviluppo/test traggono vantaggio dal throughput serverless o dal throughput condiviso manuale a livello di database. I carichi di lavoro più grandi e quelli critici per la missione potrebbero beneficiare dal throughput predisposto a livello di contenitore.
Se si seleziona l'opzione corretta per la velocità effettiva con provisioning, è possibile ottimizzare i costi evitando il provisioning eccessivo o il provisioning in modalità under-provisioning. Riduce anche i costi operativi garantendo al tempo stesso che l'applicazione possa gestire in modo efficace modelli di traffico diversi.
Configurare il livello di coerenza predefinito per l'applicazione. Se appropriato, effettuare il downgrade del livello di coerenza predefinito nelle sessioni client.

Prendere in considerazione i costi più alti associati alle operazioni di lettura a livelli di coerenza più elevati. Potrebbe non essere sempre necessario modificare il livello di coerenza predefinito standard o eseguirne l'override nelle sessioni client.
La scelta del livello di coerenza appropriato per l'applicazione garantisce l'equilibrio desiderato tra coerenza dei dati, disponibilità, prestazioni e costi.
Per i carichi di lavoro di sviluppo/test, usare l'emulatore di Azure Cosmos DB, disponibile anche come immagine del contenitore Docker. L'emulatore riduce i costi per i casi d'uso di sviluppo/test e integrazione continua.
Utilizzare operazioni batch transazionali. Progettare partizioni per sfruttare i vantaggi delle operazioni batch transazionali all'interno di una chiave di partizione logica per l'inserimento di dati.

Usare le operazioni batch negli SDK sul lato client per inserire, aggiornare o eliminare più documenti in una singola richiesta di transazione.
L'uso di operazioni batch transazionali in Azure Cosmos DB consente di ridurre il numero di singole richieste. Questo approccio consente di ridurre la latenza e migliorare l'efficienza della velocità effettiva.
Implementare il tempo di vita (TTL) per eliminare automaticamente i dati non necessari. Esportare i dati scaduti in una soluzione di archiviazione a costi inferiori, se necessario. L'uso di TTL (Tempo di vita) garantisce che il database rimanga privo di disordine, ottimizzando i costi di archiviazione. L'esportazione di dati scaduti in una soluzione di archiviazione a costi inferiori può ridurre ulteriormente le spese mantenendo i dati cronologici a scopo di conformità.
Si consideri un archivio analitico per le aggregazioni pesanti. L'archivio analitico di Azure Cosmos DB sincronizza automaticamente i dati in un archivio colonne separato per ottimizzare le aggregazioni, i report e le query analitiche di grandi dimensioni.

Eccellenza operativa

L'eccellenza operativa si concentra principalmente sulle procedure per le pratiche di sviluppo , l'osservabilità e la gestione dei rilasci.

I principi di progettazione di eccellenza operativa forniscono una strategia di progettazione di alto livello per raggiungere tali obiettivi relativi ai requisiti operativi del flusso di lavoro.

Elenco di controllo della progettazione

Avvia la tua strategia di progettazione basata sull'elenco di controllo della revisione della progettazione per l'eccellenza operativa per definire i processi di osservabilità, test e distribuzione correlati ad Azure Cosmos DB per NoSQL.

  • Monitorare le istanze di Azure Cosmos DB. Includere istanze di Azure Cosmos DB tra aree nella soluzione di monitoraggio del carico di lavoro.

    Creare identificatori nell'applicazione client per distinguere i carichi di lavoro. Prendere in considerazione i flag, ad esempio il suffisso user-agent, per identificare il carico di lavoro a cui associare ogni voce di log o metrica.

    Creare una bozza di strategia di monitoraggio dei log e delle metriche per distinguere i diversi carichi di lavoro, contrassegnare scenari eccezionali, tenere traccia dei modelli in eccezioni ed errori e tenere traccia delle prestazioni del computer host.

    Definire più avvisi per monitorare la congestione, analizzare il throughput e tenere traccia delle dimensioni dei dati.

    Pianificare le soglie delle metriche previste in base alla progettazione di partizioni e indici. Creare un piano per monitorare tali metriche per determinare la loro vicinanza alle soglie pianificate.

  • Automatizzare le implementazioni attraverso l'infrastruttura come codice (IaC). Incorporare tutte le modifiche di Azure Cosmos DB, incluse le distribuzioni dell'infrastruttura e le modifiche alla configurazione, nelle procedure di distribuzione del codice.

    Creare e applicare le migliori prassi per automatizzare la distribuzione dell'account e delle risorse di Azure Cosmos DB per NoSQL.

    Assicurarsi che il team usi gli stessi modelli per la distribuzione in altri ambienti non di produzione.

Consigli

Raccomandazione Beneficio
Assicurarsi che gli sviluppatori di applicazioni usino la versione più recente dell'SDK per sviluppatori. Per altre informazioni, vedere .NET SDK e Java SDK. Ogni AZURE Cosmos DB per NoSQL SDK ha una versione minima consigliata. L'uso delle versioni più recenti degli SDK per sviluppatori consente di mantenere le prestazioni, la sicurezza e la compatibilità delle applicazioni.
Raccogliere diagnostica supplementare utilizzando le tecniche di iniezione diagnostica di ciascun SDK. Queste tecniche aggiungono informazioni supplementari sul carico di lavoro, insieme a metriche e log predefiniti. Per altre informazioni, vedere .NET SDK e Java SDK. Inserendo la diagnostica, è possibile acquisire metriche, tracce e log personalizzati per migliorare la risoluzione dei problemi e ottimizzare le applicazioni. È possibile monitorare aspetti specifici del carico di lavoro che non coprono le metriche e i log predefiniti.
Creare avvisi per le risorse del computer host. I problemi di connettività e disponibilità possono verificarsi a causa di problemi del computer host lato client. Monitorare risorse come CPU, memoria e archiviazione in computer host usando applicazioni client che usano gli SDK di Azure Cosmos DB per NoSQL.
Creare avvisi per la limitazione della velocità effettiva usando metriche come il consumo normalizzato di UR. Questa metrica misura l'utilizzo percentuale della capacità di throughput fornita in un database o in un bucket.

Usare gli avvisi per tenere traccia di quando questa metrica supera le soglie previste. Nel corso del tempo, esaminare e modificare gli avvisi man mano che si apprendono altre informazioni sul carico di lavoro.
Se la limitazione della larghezza di banda è costantemente al 100%, è probabile che le richieste restituiscano un errore temporaneo. Creando avvisi basati su questa metrica, è possibile ricevere notifiche quando l'utilizzo supera le soglie definite. È possibile eseguire azioni correttive prima che influisca sulle prestazioni dell'applicazione.
Usare le metriche delle prestazioni delle query per tenere traccia delle prestazioni delle query principali nel tempo. Se le prestazioni delle query sono scarse, risolvere i problemi relativi alle prestazioni e applicare le procedure consigliate per le query. Le metriche delle prestazioni ti permettono di comprendere meglio come vengono eseguite le query e individuare eventuali colli di bottiglia. Queste informazioni consentono di prendere decisioni informate sui criteri di indicizzazione e sulle ottimizzazioni delle query.
Usare i modelli per distribuire automaticamente le risorse dell'account. Prendere in considerazione i modelli di Azure Resource Manager, Bicep o Terraform per automatizzare la distribuzione dell'account e delle risorse successive. I modelli IaC consentono di definire l'infrastruttura in un modello descrittivo. Facilitano la ripetibilità e la coerenza e consentono di mantenere ambienti di carico di lavoro uniformi e prevedibili.
Tenere traccia delle metriche chiave per identificare i problemi comuni nel carico di lavoro, ad esempio l'utilizzo delle UR in base alla partizione, alla limitazione e ai volumi delle richieste per tipo. Il monitoraggio di queste metriche chiave consente di comprendere le prestazioni del database in diverse condizioni. Il monitoraggio consente anche di identificare i problemi comuni in modo da poter intraprendere azioni correttive.

Efficienza delle prestazioni

L'efficienza delle prestazioni riguarda mantenere l'esperienza utente anche quando si verifica un aumento del carico gestendo la capacità. La strategia include il ridimensionamento delle risorse, l'identificazione dei potenziali colli di bottiglia e la loro risoluzione, e l'ottimizzazione per prestazioni di picco.

I principi di progettazione efficienza delle prestazioni forniscono una strategia di progettazione di alto livello per raggiungere tali obiettivi di capacità rispetto all'utilizzo previsto.

Elenco di controllo della progettazione

Avviare la strategia di progettazione in base all'elenco di controllo della revisione della progettazione per l'efficienza delle prestazioni per definire una baseline basata su indicatori di prestazioni chiave per Azure Cosmos DB per NoSQL.

  • Pianificare e gestire in modo proattivo la capacità di Azure Cosmos DB. Definire una baseline di prestazioni per l'applicazione. Misurare il numero di utenti e transazioni simultanei che potrebbe essere necessario gestire. Prendere in considerazione le caratteristiche del carico di lavoro, ad esempio il flusso utente medio, le operazioni comuni e i picchi di utilizzo.

    Ricerca gli utenti di destinazione. Determinare quali regioni di Azure sono più vicine a loro.

  • Ottimizzare la progettazione dei dati. Progettare gli elementi in modo che i documenti JSON corrispondenti siano il più piccolo possibile. Se necessario, è consigliabile suddividere i dati tra più elementi.

    Mantenere gli elementi di dimensioni inferiori a 100 KB . Gli elementi più grandi utilizzano una maggiore velocità effettiva per le operazioni comuni di lettura e scrittura. Le query su elementi di dimensioni maggiori che proiettano tutti i campi possono anche aggiungere costi significativi per la velocità effettiva.

  • Selezionare il livello, le funzionalità e il modello di fatturazione corretti. Determinare se il carico di lavoro richiede un archivio analitico. Considerare archivi analitici e servizi come Azure Synapse Link per query complesse.

  • Ottimizzare il modello di distribuzione. Distribuire Azure Cosmos DB per NoSQL nelle aree più vicine agli utenti finali. | Ridurre la latenza distribuendo Azure Cosmos DB per NoSQL alle aree più vicine agli utenti finali il più possibile.

  • Ottimizzare le query per le prestazioni. Esamina i suggerimenti sulle prestazioni delle query e applica le strategie pertinenti ai tuoi casi d'uso.

    Identificare le query che usano uno o più campi di ordinamento. Identificare anche le operazioni che influiscono su più campi. Includere questi campi in modo esplicito nella progettazione dei criteri di indicizzazione.

    Progettare carichi di lavoro di grandi dimensioni per usare le operazioni bulk quando possibile.

    Identificare le query sulle matrici figlio e determinare se sono candidati per sottoquery più efficienti.

    Fai ricerca sulle tue domande più comuni e complesse. Identificare le query che usano più ricerche, collegamenti o aggregazioni. Considerare queste query nel processo di progettazione della chiave di partizione o dei criteri di indicizzazione.

    Per le query più comuni, determinare il numero di risultati previsti per ogni pagina. Questo numero consente di formalizzare un conteggio degli elementi bufferizzati per i risultati pre-fetched.

  • Ottimizzare la logica del codice. Usare il modello singleton per la CosmosClient classe nella maggior parte degli SDK. Usare la classe client nella maggior parte degli SDK come un singleton. La classe client gestisce il proprio ciclo di vita ed è progettata per non essere eliminata. La creazione e l'eliminazione costante di istanze possono comportare una riduzione delle prestazioni.

Consigli

Raccomandazione Beneficio
Utilizzare strumenti come il calcolatore della capacità per determinare la quantità di larghezza di banda necessaria per la baseline delle performance. Usare funzionalità come la scalabilità automatica per ridimensionare la velocità effettiva effettiva in modo che corrisponda maggiormente al carico di lavoro effettivo. Monitorare il consumo effettivo della larghezza di banda in seguito e apportare eventuali modifiche. L'uso del calcolatore della capacità aiuta a prendere decisioni informate in merito al provisioning iniziale delle risorse. È possibile assicurarsi che il database possa gestire il carico previsto senza costi non necessari. La scalabilità automatica della velocità effettiva regola automaticamente la velocità effettiva provisionata per adeguarla alle esigenze reali del carico di lavoro.
Usare tecniche di ottimizzazione sui lati client e server, se appropriato. Sfruttare i vantaggi della cache integrata predefinita. Configurare l'SDK per gestire il numero di elementi prefetchati o memorizzati in buffer e restituiti per ogni pagina. Le tecniche di ottimizzazione del codice possono migliorare l'esperienza utente e rendere più efficiente l'applicazione lato client e server riducendo gli addebiti delle UR per letture e query ripetute. Questi vantaggi possono ridurre i costi.
Distribuire istanze di Azure Cosmos DB nelle aree più vicine agli utenti finali. Configurare .NET o Java SDK per preferire le aree più vicine agli utenti finali.

Sfruttare i vantaggi della replica in lettura per offrire prestazioni di lettura ottimizzate indipendentemente dal modo in cui si configurano le operazioni di scrittura in una o più aree.
La distribuzione del database nelle aree più vicine agli utenti finali consente di ridurre la latenza e migliorare l'esperienza utente. La replica in lettura consente operazioni di lettura efficienti indipendentemente dal modo in cui vengono configurate le operazioni di scrittura.
Configurare l'SDK per la modalità diretta per ottenere prestazioni ottimali. Questa modalità consente al client di aprire le connessioni TCP (Transmission Control Protocol) direttamente alle partizioni nel servizio e inviare richieste direttamente senza gateway intermedio. La modalità diretta offre prestazioni migliori perché sono presenti meno hop di rete.
Usare la funzionalità in blocco degli SDK client in scenari che richiedono una velocità effettiva elevata. La funzionalità bulk gestisce e raggruppa automaticamente le operazioni per ottimizzare la velocità effettiva. L'uso della funzionalità bulk riduce il numero di richieste back-end e distribuisce in modo efficiente le attività tra le partizioni. Questo approccio migliora le prestazioni e l'utilizzo delle risorse.
Disabilitare l'indicizzazione per le operazioni bulk. Se sono presenti diverse operazioni di inserimento, sostituzione o upsert, disabilitare l'indicizzazione per migliorare la velocità delle operazioni utilizzando il supporto bulk dell'SDK corrispondente. È possibile riabilitare immediatamente l'indicizzazione in un secondo momento. La disabilitazione dell'indicizzazione durante le operazioni bulk riduce il sovraccarico associato alla gestione dell'indice. È possibile usare meglio le risorse per le operazioni bulk, accelerando l'inserimento e gli aggiornamenti dei dati.
Creare indici compositi per i campi in operazioni complesse. Si prenda in considerazione l'uso di indici compositi per le istruzioni ORDER BY che contengono più campi. Gli indici compositi possono aumentare l'efficienza delle operazioni su più campi, semplificando il recupero dei dati in modo rapido ed efficiente.
Ottimizzare le macchine host client per gli SDK. Per i casi più comuni, usare almeno quattro core e otto GB di memoria in computer host a 64 bit che usano gli SDK per .NET o Java.

Abilitare la rete accelerata nei computer host.
L'uso di computer con specifiche più elevate garantisce che gli SDK possano gestire più operazioni contemporaneamente. La rete accelerata consente di ridurre la latenza, aumentando così il tempo di risposta.
Usare sottoquery in modo strategico per ottimizzare le query che aggiungono set di dati di grandi dimensioni. Ottimizzare le espressioni self-join usando sottoquery per filtrare le matrici prima di unire matrici all'interno dell'elemento.

Per le query tra partizioni, ottimizzare la query in modo da includere un filtro sulla chiave di partizione per ottimizzare il routing della query al minor numero possibile di partizioni.
Le query che uniscono le matrici figlio possono aumentare la complessità se sono coinvolte più matrici e non vengono filtrate. Usando sottoquery, è possibile filtrare le matrici prima di unirle, aumentando così l'efficienza delle espressioni self-join.
Usare i carichi di lavoro analitici per le query più complesse.

Se si eseguono aggregazioni frequenti o si aggiungono query su contenitori di grandi dimensioni, è consigliabile abilitare l'archivio analitico ed eseguire query in Azure Synapse Analytics.
I carichi di lavoro analitici sono isolati dai carichi di lavoro transazionali e ottimizzati per la gestione di query complesse, che impediscono una riduzione delle prestazioni e garantiscono risultati più rapidi.

Criteri di Azure

Azure offre un set completo di criteri predefiniti correlati ad Azure Cosmos DB per NoSQL e alle relative dipendenze. È possibile controllare alcune delle raccomandazioni precedenti tramite Criteri di Azure. Ad esempio, è possibile verificare se:

  • L'account Azure Cosmos DB viene distribuito in almeno due aree.

  • Gli account di database di Azure Cosmos DB sono configurati appropriatamente per la ridondanza di zona.

  • Gli account di database di Azure Cosmos DB devono avere metodi di autenticazione locale disabilitati in modo che le identità di Microsoft Entra siano necessarie per l'autenticazione.

  • L'accesso alla rete pubblica è disabilitato in modo che l'account Azure Cosmos DB non sia esposto sulla rete Internet pubblica.

  • La velocità effettiva massima deve essere limitata quando si creano database e contenitori di Azure Cosmos DB tramite il provider di risorse.

Per una governance completa, esaminare le definizioni predefinite di Azure Policy per Azure Cosmos DB per NoSQL e altri criteri che possono influire sulla sicurezza dell'archiviazione dei dati.

Raccomandazioni di Azure Advisor

Azure Advisor è un consulente cloud personalizzato che consente di seguire le procedure consigliate per ottimizzare le distribuzioni di Azure.

Per altre informazioni, vedere Azure Advisor.