Failover a livello di area automatici per la continuità aziendale in Azure Cosmos DBAutomatic regional failover for business continuity in Azure Cosmos DB

Azure Cosmos DB semplifica la distribuzione globale dei dati, offrendo account di database con più aree e completamente gestiti, che forniscono compromessi espliciti tra coerenza, disponibilità e prestazioni, il tutto con le relative garanzie.Azure Cosmos DB simplifies the global distribution of data by offering fully managed, multi-region database accounts that provide clear tradeoffs between consistency, availability, and performance, all with corresponding guarantees. Gli account Cosmos DB offrono disponibilità elevata, latenze di pochi millisecondi, più livelli di coerenza ben definiti, failover a livello di area trasparente con API multihosting e la possibilità di ridimensionare in modo flessibile la velocità effettiva e le risorse di archiviazione in tutto il mondo.Cosmos DB accounts offer high availability, single digit ms latencies, well-defined consistency levels, transparent regional failover with multi-homing APIs, and the ability to elastically scale throughput and storage across the globe.

Cosmos DB supporta sia failover espliciti che failover basati su criteri che consentono di controllare il comportamento del sistema end-to-end in caso di errori.Cosmos DB supports both explicit and policy driven failovers that allow you to control the end-to-end system behavior in the event of failures. Questo articolo analizza i seguenti aspetti:In this article, we look at:

  • Come funzionano i failover manuali in Cosmos DB?How do manual failovers work in Cosmos DB?
  • Come funzionano i failover automatici in Cosmos DB e che cosa accade quando un data center smette di funzionare?How do automatic failovers work in Cosmos DB and what happens when a data center goes down?
  • In che modo è possibile usare i failover manuali in architetture applicative?How can you use manual failovers in application architectures?

In questo video di Azure Friday, con Scott Hanselman e Karthik Raman, Principal Engineering Manager, sono disponibili altre informazioni sui failover regionali.You can also learn about regional failovers in this Azure Friday video with Scott Hanselman and Principal Engineering Manager Karthik Raman.

Configurazione di applicazioni in più areeConfiguring multi-region applications

Prima di approfondire le modalità di failover, esaminiamo in che modo è possibile configurare un'applicazione per sfruttare i vantaggi della disponibilità di più aree e assicurare la resilienza in caso di failover regionali.Before we dive into failover modes, we look at how you can configure an application to take advantage of multi-region availability and be resilient in the face of regional failovers.

  • In primo luogo, distribuire l'applicazione in più areeFirst, deploy your application in multiple regions
  • Per garantire l'accesso a bassa latenza da ogni area in cui l'applicazione viene distribuita, configurare l'elenco delle aree preferite per ogni area tramite uno degli SDK supportati.To ensure low latency access from every region your application is deployed, configure the corresponding preferred regions list for each region via one of the supported SDKs.

Il frammento seguente mostra come inizializzare un'applicazione in più aree.The following snippet shows how to initialize a multi-region application. In questo caso l'account Azure Cosmos DB contoso.documents.azure.com è configurato con due aree: Stati Uniti occidentali ed Europa settentrionale.Here, the Azure Cosmos DB account contoso.documents.azure.com is configured with two regions - West US and North Europe.

  • L'applicazione viene distribuita nell'area Stati Uniti occidentali (usando ad esempio Servizi app di Azure)The application is deployed in the West US region (using Azure App Services for example)
  • Configurato con West US come la prima area preferita per letture a bassa latenzaConfigured with West US as the first preferred region for low latency reads
  • Configurato con North Europe come la seconda area preferita (per disponibilità elevata in caso di errori a livello di area)Configured with North Europe as the second preferred region (for high availability during regional failures)

Nell'API di DocumentDB questa configurazione è simile al frammento seguente:In the DocumentDB API, this configuration looks like the following snippet:

ConnectionPolicy usConnectionPolicy = new ConnectionPolicy 
{ 
    ConnectionMode = ConnectionMode.Direct,
    ConnectionProtocol = Protocol.Tcp
};

usConnectionPolicy.PreferredLocations.Add(LocationNames.WestUS);
usConnectionPolicy.PreferredLocations.Add(LocationNames.NorthEurope);

DocumentClient usClient = new DocumentClient(
    new Uri("https://contosodb.documents.azure.com"),
    "memf7qfF89n6KL9vcb7rIQl6tfgZsRt5gY5dh3BIjesarJanYIcg2Edn9uPOUIVwgkAugOb2zUdCR2h0PTtMrA==",
    usConnectionPolicy);

L'applicazione viene distribuita anche nell'area Europa settentrionale con l'ordine di preferenza delle aree invertito. Ciò significa che l'Europa settentrionale viene specificata come prima area per le letture a bassa latenza e Stati Uniti occidentali come la seconda area preferita per disponibilità elevata in caso di errori a livello di area.Then, the West US region is specified as the second preferred region for high availability during regional failures.

Il diagramma dell'architettura seguente illustra la distribuzione di un'applicazione in più aree in cui Cosmos DB e l'applicazione sono configurati per essere disponibili in quattro aree geografiche di Azure.The following architecture diagram shows a multi-region application deployment where Cosmos DB and the application are configured to be available in four Azure geographic regions.

Distribuzione globale di un'applicazione con Azure Cosmos DB

Ecco come il servizio Cosmos DB gestisce errori a livello di area tramite i failover automatici.Now, let's look at how the Cosmos DB service handles regional failures via automatic failovers.

Failover automaticiAutomatic Failovers

Nel raro caso di un'interruzione a livello di area di Azure o del data center, Cosmos DB attiva automaticamente i failover di tutti gli account Cosmos DB presenti nell'area interessata.In the rare event of an Azure regional outage or data center outage, Cosmos DB automatically triggers failovers of all Cosmos DB accounts with a presence in the affected region.

Cosa accade se si verifica un'interruzione del servizio in un'area di lettura?What happens if a read region has an outage?

Gli account Cosmos DB con un'area di lettura in una delle aree interessate vengono automaticamente disconnessi dalla rispettiva area di scrittura e contrassegnati come offline.Cosmos DB accounts with a read region in one of the affected regions are automatically disconnected from their write region and marked offline. Gli SDK di Cosmos DB implementano un protocollo di individuazione area che consente di rilevare automaticamente quando un'area è disponibile e reindirizzare le chiamate di lettura all'area successiva disponibile nell'elenco delle aree preferite.The Cosmos DB SDKs implement a regional discovery protocol that allows them to automatically detect when a region is available and redirect read calls to the next available region in the preferred region list. Se nessuna delle aree presenti nell'elenco è disponibile, viene eseguito il fallback automatico delle chiamate all'area di scrittura corrente.If none of the regions in the preferred region list is available, calls automatically fall back to the current write region. Non sono necessarie modifiche nel codice dell'applicazione per gestire i failover regionali.No changes are required in your application code to handle regional failovers. Durante l'intero processo, Cosmos DB continua a rispettare garanzie di coerenza.During this entire process, consistency guarantees continue to be honored by Cosmos DB.

Errori di un'area di lettura in Azure Cosmos DB

Dopo il ripristino dell'area interessata da un'interruzione del servizio, tutti gli account Cosmos DB interessati nell'area vengono ripristinati automaticamente dal servizio.Once the affected region recovers from the outage, all the affected Cosmos DB accounts in the region are automatically recovered by the service. Gli account Cosmos DB con un'area di lettura nell'area interessata vengono quindi sincronizzati automaticamente con l'area di scrittura corrente e passano in modalità online.Cosmos DB accounts that had a read region in the affected region will then automatically sync with current write region and turn online. Gli SDK di Cosmos DB rilevano la disponibilità della nuova area e valutano se deve essere selezionata come area di lettura corrente in base all'elenco delle aree preferite configurato dall'applicazione.The Cosmos DB SDKs discover the availability of the new region and evaluate whether the region should be selected as the current read region based on the preferred region list configured by the application. Le letture successive vengono reindirizzate all'area ripristinata senza richiedere alcuna modifica del codice dell'applicazione.Subsequent reads are redirected to the recovered region without requiring any changes to your application code.

Cosa accade se si verifica un'interruzione del servizio in un'area di scrittura?What happens if a write region has an outage?

Se l'area interessata è l'area di scrittura corrente e per l'account Azure Cosmos DB è abilitato il failover automatico, l'area viene automaticamente contrassegnata come offline.If the affected region is the current write region and automatic failover is enabled for the Azure Cosmos DB account, then the region is automatically marked as offline. Viene quindi promossa un'area alternativa come area di scrittura per l'account Azure Cosmos DB interessato.Then, an alternative region is promoted as the write region for the affected Azure Cosmos DB account. È possibile abilitare il failover automatico e controllare completamente l'ordine di selezione dell'area per gli account Azure Cosmos DB tramite il portale di Azure o a livello di codice.You can enable automatic failover and fully control the region selection order for your Azure Cosmos DB accounts via the Azure portal or programmatically.

Priorità di failover per Azure Cosmos DB

Durante i failover automatici, Azure Cosmos DB sceglie automaticamente l'area di scrittura successiva per un determinato account Azure Cosmos DB in base all'ordine di priorità specificato.During automatic failovers, Azure Cosmos DB automatically chooses the next write region for a given Azure Cosmos DB account based on the specified priority order. Le applicazioni possono usare la proprietà WriteEndpoint della classe DocumentClient per rilevare le modifiche dell'area di scrittura.Applications can use the WriteEndpoint property of DocumentClient class to detect the change in write region.

Errori di un'area di scrittura in Azure Cosmos DB

Dopo il ripristino dell'area interessata da un'interruzione del servizio, tutti gli account Cosmos DB interessati nell'area vengono ripristinati automaticamente dal servizio.Once the affected region recovers from the outage, all the affected Cosmos DB accounts in the region are automatically recovered by the service.

  • I dati presenti nell'area di scrittura precedente di cui non è stata eseguita la replica nelle aree di lettura durante l'interruzione vengono pubblicati come feed in conflitto.Data present in the previous write region that was not replicated to read regions during the outage is published as a conflict feed. Le applicazioni possono leggere il feed in conflitto, risolvere i conflitti in base alla logica specifica dell'applicazione e scrivere di nuovo i dati aggiornati nell'account Azure Cosmos DB come appropriato.Applications can read the conflict feed, resolve the conflicts based on application specific logic, and write the updated data back to the Azure Cosmos DB account as appropriate.
  • L'area di scrittura precedente viene ricreata come area di lettura e riportata automaticamente online.The previous write region is recreated as a read region and brought back online automatically.
  • È possibile riconfigurare l'area di lettura che è stata riportata automaticamente online come area di scrittura eseguendo un failover manuale tramite il portale di Azure o a livello di codice.You can reconfigure read region that was brought back online automatically as the write region by performing a manual failover via the Azure portal or programmatically.

Il frammento di codice seguente illustra come elaborare i conflitti dopo il ripristino dell'area interessata dall'interruzione.The following code snippet illustrates how to process conflicts after the affected region recovers from the outage.

string conflictsFeedContinuationToken = null;
do
{
    FeedResponse<Conflict> conflictsFeed = client.ReadConflictFeedAsync(collectionLink,
        new FeedOptions { RequestContinuation = conflictsFeedContinuationToken }).Result;

    foreach (Conflict conflict in conflictsFeed)
    {
        Document doc = conflict.GetResource<Document>();
        Console.WriteLine("Conflict record ResourceId = {0} ResourceType= {1}", conflict.ResourceId, conflict.ResourceType);

        // Perform application specific logic to process the conflict record / resource
    }

    conflictsFeedContinuationToken = conflictsFeed.ResponseContinuation;
} while (conflictsFeedContinuationToken != null);

Failover manualiManual Failovers

Oltre ai failover automatici, è possibile modificare manualmente l'area di scrittura corrente di un determinato account Cosmos DB in modo dinamico in una delle aree di lettura esistenti.In addition to automatic failovers, the current write region of a given Cosmos DB account can be manually changed dynamically to one of the existing read regions. I failover manuali possono essere avviati tramite il portale di Azure o a livello di codice.Manual failovers can be initiated via the Azure portal or programmatically.

I failover manuali assicurano una perdita di dati pari a zero e nessuna perdita di disponibilità e trasferiscono correttamente lo stato di scrittura dalla vecchia alla nuova area di scrittura per l'account Cosmos DB specificato.Manual failovers ensure zero data loss and zero availability loss and gracefully transfer write status from the old write region to the new one for the specified Cosmos DB account. Come nei failover automatici, durante i failover manuali Cosmos DB SDK gestisce automaticamente le modifiche dell'area di scrittura e garantisce che le chiamate vengano reindirizzate automaticamente alla nuova area di scrittura.Like in automatic failovers, the Cosmos DB SDK automatically handles write region changes during manual failovers and ensures that calls are automatically redirected to the new write region. La gestione dei failover non richiede alcuna modifica del codice o della configurazione dell'applicazione.No code or configuration changes are required in your application to manage failovers.

Failover manuali in Azure Cosmos DB

Alcuni degli scenari comuni in cui il failover manuale può essere utile sono:Some of the common scenarios where manual failover can be useful are:

Seguire il modello di orologio: se le applicazioni dispongono di modelli di traffico prevedibili in base all'ora del giorno, è possibile modificare periodicamente lo stato di scrittura nell'area geografica più attiva in base all'ora del giorno.Follow the clock model: If your applications have predictable traffic patterns based on the time of the day, you can periodically change the write status to the most active geographic region based on time of the day.

Aggiornamento del servizio: in alcuni casi la distribuzione globale di un'applicazione può comportare il reinstradamento del traffico a un'area diversa tramite Gestione traffico durante l'aggiornamento del servizio pianificato.Service update: Certain globally distributed application deployment may involve rerouting traffic to different region via traffic manager during their planned service update. Tale distribuzione può ora usare il failover manuale per mantenere lo stato di scrittura nell'area in cui ci sarà traffico attivo durante la finestra di aggiornamento del servizio.Such application deployment now can use manual failover to keep the write status to the region where there is going to be active traffic during the service update window.

Continuità aziendale e ripristino di emergenza, BCDR, e Disponibilità elevata e ripristino di emergenza, HADR: la maggior parte delle applicazioni aziendali include test di continuità aziendale come parte del processo di sviluppo e rilascio.Business Continuity and Disaster Recovery (BCDR) and High Availability and Disaster Recovery (HADR) drills: Most enterprise applications include business continuity tests as part of their development and release process. I test BCDR e HADR sono spesso un passaggio importante nelle certificazioni di conformità e garantiscono la disponibilità del servizio in caso di interruzioni del servizio a livello regionale.BCDR and HADR testing is often an important step in compliance certifications and guaranteeing service availability in the case of regional outages. Per testare la conformità BCDR delle applicazioni che usano Cosmos DB per l'archiviazione, attivare un failover manuale dell'account Cosmos DB e/o aggiungendo e rimuovendo un'area in modo dinamico.You can test the BCDR readiness of your applications that use Cosmos DB for storage by triggering a manual failover of your Cosmos DB account and/or adding and removing a region dynamically.

In questo articolo è stato illustrato come funzionano i failover manuali e automatici in Cosmos DB e come è possibile configurare gli account Cosmos DB e le applicazioni in modo che siano disponibili a livello globale.In this article, we reviewed how manual and automatic failovers work in Cosmos DB, and how you can configure your Cosmos DB accounts and applications to be globally available. Usando il supporto per la replica globale di Cosmos DB, è possibile migliorare la latenza end-to-end e assicurare la disponibilità elevata anche in caso di errori di un'area.By using Cosmos DB's global replication support, you can improve end-to-end latency and ensure that they are highly available even in the event of region failures.

Passaggi successiviNext Steps