Come massimizzare la disponibilità di Azure Cosmos DB

La maggior parte delle applicazioni di e-commerce ha tolleranza zero per qualsiasi inattività. Qualsiasi impatto sulle risorse dell’applicazione può influenzare le metriche di disponibilità complessive del sito. Il database Azure Cosmos è uno dei principali database NoSQL utilizzati nel settore. Sebbene l’Azure Cosmos stesso fornisca una disponibilità minima del 99,99% per una singola regione senza una zona di disponibilità, come possiamo migliorare ulteriormente la disponibilità del database con le opzioni disponibili in Azure Cosmos?

Scrittura e lettura multi-regione

Le letture in una sola regione influenzeranno la disponibilità e porteranno anche a un singolo punto di errore. Pertanto, le applicazioni con carico di lettura elevato dovrebbero almeno avere abilitata la lettura multi-regione, anche se le scritture multi-regione non sono un’opzione per un’applicazione. Tuttavia, la scrittura multi-regione offre una maggiore disponibilità sia per le applicazioni con carico di lettura che di scrittura elevato.

Con la capacità di scrittura multi-regione, puoi abilitare la replicazione multi-master, dove tutte le regioni configurate possono fungere da endpoint di scrittura.

Best Practices

  • Seleziona le regioni più vicine alla regione in cui è distribuita l’applicazione.
  • Configura più regioni preferite in base ai requisiti dell’applicazione per migliorare la disponibilità.
  • Imposta più di una regione preferita nell’applicazione per letture e scritture per migliorare la disponibilità e ridurre la latenza.
  • Imposta le regioni preferite in ordine delle regioni attuali o più vicine dell’applicazione, prima nella lista.

Applicazione distribuita in West US 2

Java

 

//Configura l'applicazione distribuita in West US 2 come segue

import com.azure.cosmos.CosmosClientBuilder;
import com.azure.cosmos.CosmosClient;

// ...

CosmosClientBuilder clientBuilder = new CosmosClientBuilder()
    .setEndpoint(accountEndpoint)
    .setKey(accountKey)
    .setPreferredRegions(Arrays.asList("West US 2", "East US"));

CosmosClient client = clientBuilder.buildClient();

// 

Applicazione distribuita in East US

Java

 

//Configura l'applicazione distribuita negli Stati Uniti orientali come segue
import com.azure.cosmos.CosmosClientBuilder;
import com.azure.cosmos.CosmosClient;

// ...

CosmosClientBuilder clientBuilder = new CosmosClientBuilder()
    .setEndpoint(accountEndpoint)
    .setKey(accountKey)
    .setPreferredRegions(Arrays.asList( "East US","West US 2"));

CosmosClient client = clientBuilder.buildClient();

// 

Conclusione

Anche se abilitare la lettura e la scrittura multi-regione può fornire una maggiore disponibilità, configurare la lettura e la scrittura dell’applicazione più vicino alla regione in cui viene distribuita e fornire più di una regione preferita aiuta l’applicazione a tornare immediatamente alla regione disponibile senza alcun intervento manuale.

Livelli di Coerenza

Seleziona i livelli di coerenza in base ai requisiti dell’applicazione. Aspettative di coerenza più elevate portano generalmente a una ridotta disponibilità. Se l’applicazione richiede una forte coerenza dei dati, assicurati che possa tollerare potenziali latenze più elevate. Al contrario, se una coerenza più debole è accettabile, l’applicazione può beneficiare di un miglior throughput e disponibilità.

Conclusione

Scegliere il giusto livello di coerenza dipende puramente dalle necessità dell’applicazione e, sebbene ci possa essere un impatto sulla disponibilità di una coerenza più forte, la disponibilità complessiva di un’applicazione non sarà influenzata dalla scelta di livelli di coerenza più elevati.

Failover

Failover Manuale

Sviluppatori o collaboratori possono accedere al portale e passare manualmente alla regione disponibile successiva durante un’interruzione nella regione a cui l’applicazione è attualmente connessa. Anche se questa opzione offre una certa disponibilità, richiede un intervento manuale per il failover, il che può influire sulle metriche complessive di disponibilità del sito.

Failover Gestito dal Servizio

Abilitare il failover gestito dal servizio consente a Cosmos di passare automaticamente alla regione disponibile successiva in base alla priorità configurata nel portale. Questa opzione elimina la necessità di apportare modifiche all’applicazione durante il processo di failover.

Conclusione

Anche se entrambi forniscono un’ulteriore disponibilità, il throughput del failover gestito dal servizio offre la flessibilità di passare alla regione successiva disponibile senza preoccuparsi della distribuzione dell’applicazione.

Chiave di partizione e Indici

  • Definire una chiave di partizione in Azure Cosmos DB è cruciale prima di eseguire qualsiasi applicazione su di essa. Cosmos DB è altamente efficiente per le applicazioni ad alta lettura, quindi è essenziale considerare i criteri di ricerca e definire le query per leggere i record dal database prima di integrare Cosmos DB nella tua applicazione.
  • Per impostazione predefinita, ogni elemento in un contenitore Cosmos DB è automaticamente indicizzato. Tuttavia, escludere determinati elementi o campi dall’indicizzazione può aiutare a ridurre il consumo di Unità di Richiesta (RU). È altrettanto importante aggiungere campi per l’indicizzazione quanto è rimuovere gli indici su campi che non devono essere indicizzati.
  • Evitare di memorizzare elementi eccessivamente grandi in Azure Cosmos DB.  
  • Minimizzare le query tra partizioni quando possibile.  
  • Assicurarsi che le query includano filtri per migliorare l’efficienza.  
  • Evitare di interrogare ripetutamente la stessa chiave di partizione; piuttosto, implementare uno strato di caching in tali casi d’uso.

Autoscale del Throughput

Azure Cosmos DB supporta sia il throughput standard (manuale) che l’autoscale a livello di contenitore.

Throughput Manuale

L’applicazione decide le RU/s consentite e le richieste che raggiungono il limite delle RU/s verranno limitate per il tempo configurato. È necessario un intervento manuale per aumentare il throughput.

Auto-scala il throughput

L’applicazione può configurare il throughput massimo supportato e Cosmos si auto-scala in base al traffico ricevuto. Superando il throughput di auto-scala, le richieste verranno limitate per il tempo configurato.

Conclusione

Anche se entrambi forniscono una maggiore disponibilità, il throughput di auto-scala offre la flessibilità di gestire il traffico variabile senza limitazioni o impatti sulla disponibilità.

Backup e Ripristino

Azure Cosmos DB abilita i backup periodici per impostazione predefinita per tutti gli account.

Backup periodico

Vengono effettuati backup periodicamente per ogni minuto configurato con un valore minimo di 1 ora e un massimo di 24 ore. Fornisce inoltre opzioni per mantenere la ridondanza del backup a livello Geo, zona o locale. Il team dell’applicazione deve contattare il supporto per recuperare il backup.

Backup continuo

La funzione di backup continuo mantiene il backup nello storage del database Cosmos della regione configurata e consente di conservare i dati degli ultimi 7 giorni o degli ultimi 30 giorni. Fornisce inoltre il ripristino in un determinato momento.

Conclusione

Optare per il backup continuo garantisce un ripristino più rapido del database. Ciò elimina la necessità di interazioni continue con il supporto per ripristinare il database e consente alle applicazioni di ripristinarlo in qualsiasi regione (dove esistono i backup) in un determinato punto nel tempo.

In conclusione, sebbene le metriche di disponibilità siano cruciali per qualsiasi applicazione, comportano dei costi. Le opzioni che offrono una disponibilità maggiore rispetto alla configurazione standard comportano spese aggiuntive. Inoltre, le opzioni sopra menzionate potrebbero non essere necessarie o adatte per tutte le applicazioni che utilizzano Cosmos. Tuttavia, è essenziale adottare e implementare le migliori pratiche in Azure Cosmos per ottimizzare efficacemente la disponibilità.

Source:
https://dzone.com/articles/how-to-maximize-the-azure-cosmos-db-availability