Progettazione di servizi disponibili a livello globale con il database SQL di Azure

Si applica a:database SQL di Azure

Quando si compilano e distribuiscono servizi cloud con database SQL di Azure, si usano la replica geografica attiva o i gruppi di failover per fornire resilienza alle interruzioni a livello di area e agli errori irreversibili. La stessa funzionalità consente di creare applicazioni distribuite a livello globale ottimizzate per l'accesso locale ai dati. Questo articolo illustra modelli di applicazione comuni, nonché i vantaggi e gli svantaggi di ogni opzione.

Nota

Se si usano pool elastici e database premium o business critical, è possibile renderli resistenti alle interruzioni a livello di area convertendoli in una configurazione di distribuzione con ridondanza della zona. Vedere Database con ridondanza della zona.

Scenario 1: Uso di due aree di Azure per la continuità aziendale con tempo di inattività minimo

In questo scenario le applicazioni presentano le caratteristiche seguenti:

  • L'applicazione è attiva in un'area di Azure
  • Tutte le sessioni del database richiedono l'accesso in lettura e scrittura ai dati
  • Il livello Web e il livello dati devono essere collocati in modo da ridurre la latenza e il costo del traffico
  • Essenzialmente, il tempo di inattività rappresenta per queste applicazioni un rischio aziendale più elevato rispetto alla perdita di dati

In questo caso, la topologia di distribuzione dell'applicazione è ottimizzata per la gestione delle emergenze a livello di area quando tutti i componenti dell'applicazione devono eseguire il failover insieme. Il diagramma seguente illustra questa topologia. Per la ridondanza geografica, le risorse dell'applicazione vengono distribuite nell'area A e B. Tuttavia, le risorse nell'area B non vengono utilizzate fino a quando l'area A non riesce. Tra le due aree viene configurato un gruppo di failover per gestire la connettività del database, la replica e il failover. Il servizio Web in entrambe le aree è configurato per accedere al database tramite il listener di lettura/scrittura <nome-gruppo-failover>.database.windows.net (1). Gestione traffico di Azure è configurato per l'uso del metodo di routing con priorità (2).  

Nota

Gestione traffico di Azure viene usato in questo articolo solo a scopo illustrativo. È possibile usare qualsiasi soluzione di bilanciamento del carico che supporti il metodo di routing per priorità.

Il diagramma seguente illustra questa configurazione prima di un'interruzione:

Scenario 1. Configuration before the outage.

Dopo un'interruzione nell'area primaria, database SQL rileva che il database primario non è accessibile e attiva il failover nell'area secondaria in base ai parametri dei criteri di failover automatico (1). A seconda del contratto di servizio dell'applicazione, è possibile configurare un periodo di tolleranza che controlla l'intervallo di tempo tra il rilevamento dell'interruzione e il failover stesso. È possibile che Gestione traffico di Azure avvii il failover dell'endpoint prima che il gruppo di failover attivi il failover del database. In tal caso, l'applicazione Web non può riconnettersi immediatamente al database. Le riconnessioni, tuttavia, avranno automaticamente esito positivo non appena verrà completato il failover del database. Quando l'area in cui si è verificato l'errore è ripristinata e di nuovo online, il database primario precedente si riconnette automaticamente come nuovo database secondario. Il diagramma seguente illustra la configurazione dopo il failover.

Nota

Tutte le transazioni di cui è stato eseguito il commit dopo il failover andranno perse durante la riconnessione. Dopo il completamento del failover, l'applicazione nell'area B può riconnettersi e riavviare l'elaborazione delle richieste utente. Sia l'applicazione Web che il database primario si trovano nell'area B e continuano a condividere lo stesso percorso.

Scenario 1. Configuration after failover

In caso di interruzione nell'area B, il processo di replica tra il database primario e quello secondario viene sospeso ma il collegamento tra i due resta intatto (1). Gestione traffico rileva che la connettività all'area B è interrotta e contrassegna l'app Web dell'endpoint 2 come danneggiata (2). Le prestazioni dell'applicazione non subiscono alcun impatto in questo caso, ma il database risulta esposto e quindi maggiormente a rischio di perdita di dati in caso di errore in successione nell'area A.

Nota

Per il ripristino di emergenza è consigliabile la configurazione con distribuzione dell'applicazione limitata a due aree. Infatti la maggior parte delle geografie di Azure ha solo due aree. Questa configurazione non protegge l'applicazione da un errore irreversibile simultaneo in entrambe le aree. Nell'improbabile eventualità di un errore di questo genere, è possibile recuperare i database in una terza area con un'operazione di ripristino geografico. Per altre informazioni, vedere database SQL di Azure indicazioni sul ripristino di emergenza.

Dopo che l'interruzione è stata risolta, il database secondario viene automaticamente risincronizzato con quello primario. Durante la sincronizzazione, le prestazioni del database primario possono risultare peggiorate. L'impatto specifico dipende dalla quantità di dati acquisita dal nuovo database primario dal momento del failover.

Nota

Dopo aver risolto l'interruzione, Gestione traffico inizierà a instradare le connessioni all'applicazione nell'area A come endpoint con priorità più alta. Se si intende mantenere la replica primaria nell'area B per un po', è necessario modificare di conseguenza la tabella priorità nel profilo di Gestione traffico.

Il diagramma seguente illustra un'interruzione nell'area secondaria:

Scenario 1. Configuration after an outage in the secondary region.

I vantaggi chiave di questo modello di progettazione sono:

  • La stessa applicazione Web viene distribuita in entrambe le aree senza alcuna configurazione specifica dell'area e non richiede logica aggiuntiva per gestire il failover.
  • Il failover non influisce sulle prestazioni dell'applicazione perché l'applicazione Web e il database condividono sempre lo stesso percorso.

Il principale svantaggio è rappresentato dal fatto che le risorse dell'applicazione nell'area B sono sottoutilizzate nella maggior parte dei casi.

Scenario 2: Aree di Azure per la continuità aziendale con mantenimento massimo dei dati

Questa opzione è particolarmente indicata per le applicazioni con le caratteristiche seguenti:

  • Qualsiasi perdita di dati rappresenta un rischio aziendale elevato. Il failover del database può essere usato solo come ultima soluzione se l'interruzione è causata da un errore irreversibile.
  • L'applicazione supporta le modalità di sola lettura e lettura/scrittura delle operazioni e può funzionare in "modalità di sola lettura" per un periodo di tempo.

In questo modello l'applicazione passa alla modalità di sola lettura quando le connessioni di lettura-scrittura iniziano a dare errori di timeout. L'applicazione Web viene distribuita in entrambe le aree e include una connessione all'endpoint del listener di lettura/scrittura e una connessione diversa all'endpoint del listener di sola lettura (1). Il profilo Gestione traffico deve usare il routing prioritario. Il monitoraggio degli endpoint dovrà essere abilitato per l'endpoint applicazione in ogni area (2).

Il diagramma seguente illustra questa configurazione prima di un'interruzione:

Scenario 2. Configuration before the outage.

Quando Gestione traffico rileva un errore di connettività all'area A, passa automaticamente il traffico utente all'istanza dell'applicazione nell'area B. Con questo modello, è importante impostare il periodo di tolleranza con perdita di dati su un valore sufficientemente elevato, ad esempio 24 ore. In questo modo si impedisce la perdita di dati se l'interruzione del servizio viene risolta entro tale intervallo di tempo. Quando l'applicazione Web nell'area B viene attivata, le operazioni di lettura/scrittura hanno esito negativo. A questo punto, passerà alla modalità di sola lettura (1). In questa modalità, le richieste vengono instradate automaticamente al database secondario. Se l'interruzione è causata da un errore irreversibile, molto probabilmente non potrà essere risolta entro il periodo di tolleranza. Alla scadenza, il gruppo di failover attiva il failover. Il listener di lettura/scrittura diventa quindi disponibile e le connessioni non hanno più esito negativo (2). Il diagramma seguente illustra le due fasi del processo di ripristino.

Nota

Se l'interruzione nell'area primaria viene mitigata entro il periodo di tolleranza, Gestione traffico rileva il ripristino della connettività nell'area primaria e passa nuovamente il traffico utente all'istanza dell'applicazione nell'area A. L'istanza dell'applicazione riprende e opera in modalità di lettura/scrittura usando il database primario nell'area A, come illustrato nel diagramma precedente.

Scenario 2. Disaster recovery stages.

Se si verifica un'interruzione nell'area B, Gestione traffico rileva l'errore dell'endpoint web-app-2 nell'area B e lo contrassegna danneggiato (1). Nel frattempo, il gruppo di failover trasferisce il listener di sola lettura all'area A (2). Questa interruzione non influisce sull'esperienza dell'utente finale, ma il database primario viene esposto durante l'interruzione. Il diagramma seguente illustra un errore nell'area secondaria:

Scenario 2. Outage of the secondary region.

Dopo che l'interruzione del servizio è stata risolta, il database secondario viene immediatamente sincronizzato con quello primario e il listener di sola lettura viene passato nuovamente al database secondario nell'area B. Durante la sincronizzazione, le prestazioni del database primario potrebbero essere leggermente influenzate a seconda della quantità di dati che deve essere sincronizzata.

Questo modello di progettazione presenta diversi vantaggi:

  • Impedisce la perdita dei dati durante le interruzioni temporanee.
  • Il tempo di inattività dipende solo dalla velocità con cui Gestione traffico rileva l'errore di connettività, configurabile.

Lo svantaggio è rappresentato dal fatto che l'applicazione deve poter funzionare in modalità di sola lettura.

Pianificazione della continuità aziendale: Scegliere una progettazione di applicazioni per il ripristino di emergenza cloud

La strategia di ripristino di emergenza cloud specifica può combinare o estendere questi modelli di progettazione per soddisfare al meglio le esigenze dell'applicazione. Come accennato in precedenza, la strategia scelta si basa sul contratto di servizio che si vuole offrire ai clienti e sulla topologia di distribuzione dell'applicazione. Per facilitare la decisione, la tabella seguente confronta le opzioni in base all'obiettivo del punto di ripristino (RPO) e al tempo di recupero stimato (ERT).

Modello RPO ERT
Distribuzione attiva/passiva per il ripristino di emergenza con accesso al database con percorso condiviso Accesso in < lettura/scrittura 5 sec Ora di rilevamento dell'errore + DNS TTL
Distribuzione attiva/attiva per il bilanciamento del carico dell'applicazione Accesso in < lettura/scrittura 5 sec Ora di rilevamento dell'errore + DNS TTL
Distribuzione attiva/passiva per la conservazione dei dati Accesso in sola lettura < 5 sec Accesso in sola lettura = 0
Accesso in lettura/scrittura = zero Accesso in lettura-scrittura = ora di rilevamento dell'errore + periodo di tolleranza con perdita di dati

Passaggi successivi