Ripristino di emergenza e distribuzione geografica in Durable Functions

Microsoft si impegna per fare in modo che i servizi di Azure siano sempre disponibili. Tuttavia, potrebbero verificarsi interruzioni del servizio non pianificate. Quando l'applicazione richiede resilienza, è necessario configurare l'app per la ridondanza geografica.

È anche necessario disporre di un piano di ripristino di emergenza per la gestione di un'interruzione del servizio a livello di area. Una parte importante di un piano di ripristino di emergenza è in fase di preparazione per eseguire il failover nelle repliche secondarie dell'app e dell'account di archiviazione quando le repliche primarie non sono disponibili.

Questo articolo descrive scenari di esempio per la configurazione del ripristino di emergenza e della distribuzione geografica usando la funzionalità Durable Functions di Funzioni di Azure.

Panoramica dello scenario

Questo articolo illustra tre configurazioni di ripristino di emergenza attivo/passivo. Scegliere lo scenario che soddisfa i requisiti di tolleranza e costo degli errori:

Scenario Protegge da Perdita di dati in caso di failover Latenza tra aree Costo relativo
Scenario 1: Archiviazione condivisa Interruzione del calcolo None Sì (archiviazione nell'area primaria) Low
Scenario 2: Archiviazione regionale Interruzione di calcolo e archiviazione/utilità di pianificazione Orchestrazioni in anteprima sospese fino al ripristino del nodo primario None Medium
Scenario 3: Archiviazione con ridondanza geografica condivisa Interruzione del calcolo e dell'archiviazione (con replica) Possibile perdita di transazioni recenti (ritardo di replica asincrona) Sì (fino a quando il failover DNS è completo) Alto

Annotazioni

Se si usa l'utilità di pianificazione Durable anziché il provider di Archiviazione di Azure predefinito, lo scenario 2 è l'approccio consigliato per il ripristino di emergenza.

Sfondo

In Durable Functions, tutto lo stato viene salvato in modo permanente in un back-end di archiviazione. Per impostazione predefinita, questo back-end è Archiviazione di Azure, ma è anche possibile usare Durable Task Scheduler o un database SQL Server. Un task hub è un contenitore logico per le risorse di archiviazione utilizzate per orchestrazioni ed entità. Le funzioni di orchestrazione, attività ed entità possono interagire tra loro solo quando appartengono allo stesso hub attività. Questo articolo si riferisce agli hub di attività descrivendo scenari per mantenere l'alta disponibilità di queste risorse di archiviazione.

Le orchestrazioni e le entità possono essere attivate tramite funzioni client attivate tramite HTTP o uno degli altri tipi di trigger Funzioni di Azure supportati. Le orchestrazioni e le entità possono essere attivate anche tramite API HTTP predefinite. Per semplicità, questo articolo è incentrato sugli scenari che coinvolgono trigger di funzioni Archiviazione di Azure e BASATI su HTTP, insieme alle opzioni per aumentare la disponibilità e ridurre al minimo i tempi di inattività durante il ripristino di emergenza. Questo articolo non illustra in modo esplicito altri tipi di trigger, ad esempio trigger bus di servizio di Azure o Azure Cosmos DB.

Gli scenari in questo articolo sono basati su configurazioni attive/passive, che supportano al meglio l'utilizzo di Archiviazione di Azure. Questo modello consiste nella distribuzione di un'app per le funzioni di backup (passiva) in un'area diversa. Gestione traffico di Azure monitora l'applicazione funzione primaria (attiva) per verificare la disponibilità HTTP. Viene eseguito il failover nell'app per le funzioni di backup quando l'app primaria ha esito negativo. Per altre informazioni, vedere Metodo di routing del traffico prioritario.

Considerazioni generali

Tenere presenti queste considerazioni quando si configura una configurazione di failover attivo/passivo per Durable Functions:

  • Le indicazioni contenute in questo articolo presuppongono che si usi il provider predefinito Archiviazione di Azure per archiviare lo stato di runtime Durable Functions. È anche possibile configurare provider di archiviazione alternativi che archiviino lo stato altrove, ad esempio in un database SQL Server. I provider di archiviazione alternativi potrebbero richiedere diverse strategie di ripristino di emergenza e distribuzione geografica. Per altre informazioni, vedere provider di archiviazione di Durable Functions.
  • La configurazione attiva/passiva proposta garantisce che un client possa sempre attivare nuove orchestrazioni tramite HTTP. Tuttavia, quando due app per le funzioni condividono lo stesso hub attività nell'archiviazione, alcune di queste transazioni di archiviazione in background possono essere distribuite tra le app. In seguito a questa distribuzione, questa configurazione può comportare costi in uscita aggiuntivi per l'applicazione per le funzioni secondarie.
  • L'account di archiviazione sottostante e l'hub attività vengono entrambi creati nell'area primaria. Le app delle funzioni condividono questo account di archiviazione e l'hub delle attività.
  • Tutte le app per le funzioni distribuite in modo ridondante devono condividere le stesse chiavi di accesso alle funzioni quando vengono attivate tramite HTTP. Il runtime di Funzioni di Azure espone un'API management che è possibile usare per aggiungere, eliminare e aggiornare chiavi di funzione a livello di codice. È anche possibile gestire le chiavi usando Azure Resource Manager API.

Scenario 1: Calcolo con carico bilanciato con archiviazione condivisa

Per ridurre la possibilità di tempi di inattività se le risorse dell'app per le funzioni non sono più disponibili, questo scenario usa due app per le funzioni distribuite in aree diverse. Questo scenario è consigliato come soluzione per i failover.

Il Traffic Manager è configurato per rilevare i problemi nelle funzioni dell'app primaria e reindirizzare automaticamente il traffico alle funzioni dell'app nella regione secondaria. Questa funzione condivide lo stesso account di archiviazione Azure e l'hub delle attività. Lo stato delle app per le funzioni non va perso e l'attività può riprendere normalmente. Dopo il ripristino dell'integrità nell'area primaria, Gestione traffico di Azure indirizza automaticamente le richieste a quella Function App.

Diagramma che mostra le app per le funzioni in aree separate con un account condiviso Archiviazione di Azure.

L'uso di questo scenario di distribuzione offre diversi vantaggi:

  • Se l'infrastruttura di calcolo non riesce, il lavoro può essere ripreso nell'area di failover senza perdita di dati.
  • Gestione traffico si occupa del failover automatico all'app per le funzioni integra.
  • Traffic Manager ripristina automaticamente il traffico verso la funzione app principale dopo la fine dell'interruzione.

Considerazioni specifiche dello scenario

  • Se si distribuisce un'applicazione di funzioni utilizzando un piano dedicato di Servizio app di Azure, la replica dell'infrastruttura di calcolo nel data center di failover aumenta i costi.

  • Questo scenario riguarda le interruzioni nell'infrastruttura di calcolo, ma l'account di archiviazione continua a essere il singolo punto di guasto per l'app per le funzioni. Se si verifica un'interruzione Archiviazione di Azure, l'applicazione subisce tempi di inattività.

  • Quando l'app per le funzioni subisce un failover, la latenza aumenta perché l'app accede al proprio account di archiviazione tra le aree.

  • Quando l'app per le funzioni è in uno stato di failover, accede al servizio di archiviazione nell'area originale. Il traffico in uscita di rete può comportare costi più elevati.

  • Questo scenario dipende da Traffic Manager. Un'app client può impiegare del tempo prima che sia necessario richiedere nuovamente l'indirizzo dell'app per le funzioni da Gestione traffico. Per altre informazioni, vedere Funzionamento di Gestione traffico.

  • A partire dalla versione 2.3.0 dell'estensione Durable Functions, è possibile eseguire in modo sicuro due app per le funzioni contemporaneamente con lo stesso account di archiviazione e la stessa configurazione dell'hub attività. La prima app da avviare acquisisce un lease di BLOB a livello di applicazione che impedisce ad altre app di elaborare messaggi dalle code dell'hub attività. Se l'esecuzione di questa prima app si interrompe, il lease scade. Una seconda app può acquisire il lease e iniziare a elaborare i messaggi dell'hub attività.

    Per le versioni di estensione precedenti alla 2.3.0, le app per le funzioni configurate per utilizzare lo stesso account di archiviazione processano i messaggi e aggiornano gli artefatti di archiviazione contemporaneamente. Questa attività simultanea comporta latenze e costi in uscita più elevati. Se le app primarie e di replica hanno codice diverso distribuito, anche temporaneamente, le orchestrazioni potrebbero non riuscire a essere eseguite correttamente a causa di incoerenze della funzione dell'agente di orchestrazione tra le due app.

    Tutte le app che richiedono la distribuzione geografica per il ripristino di emergenza devono usare la versione 2.3.0 o successiva dell'estensione Durable Functions.

Scenario 2: Calcolo con carico bilanciato con archiviazione regionale

Lo scenario precedente riguarda solo gli errori limitati all'infrastruttura di calcolo. Un'interruzione dell'app per le funzioni può verificarsi anche in caso di esito negativo del servizio di archiviazione o del pianificatore di attività durevole.

Per garantire il funzionamento continuo di Durable Functions, il secondo scenario distribuisce un account di archiviazione dedicato o un'utilità di pianificazione attività durevole in ogni area in cui sono ospitate le app per le funzioni. È attualmente consigliabile questo approccio di ripristino di emergenza quando si usa l'Utilità di pianificazione attività durevole.

Diagramma che mostra le app per le funzioni in aree separate con account Archiviazione di Azure separati.

Questo approccio aggiunge miglioramenti allo scenario precedente:

  • Isolamento dello stato a livello di area: ogni app per le funzioni è collegata al proprio account di archiviazione a livello di area o al pianificatore di attività durevole. Se l'app per le funzioni non riesce, Gestione traffico reindirizza il traffico all'area secondaria. Poiché l'app per le funzioni in ogni area usa l'archiviazione locale o Durable Task Scheduler, Durable Functions può continuare l'elaborazione usando lo stato locale.
  • Nessuna latenza aggiunta al failover: durante un failover, un'applicazione di funzionalità e un fornitore di stato (account di archiviazione o pianificatore di attività durevole) vengono raggruppati, quindi non esiste alcuna latenza aggiunta nell'area di failover.
  • Resilienza agli errori di backup di stato: se l'account di archiviazione o il pianificatore di attività durevole ha esito negativo in un'area, anche Durable Functions ha esito negativo in tale area. L'errore di Durable Functions attiva il reindirizzamento all'area secondaria. Poiché sia lo stato di calcolo che quello dell'app sono isolati per area, Durable Functions nell'area di failover rimane operativo.

Considerazioni specifiche dello scenario

  • Se si distribuisce l'app per le funzioni tramite un piano di servizio app dedicato, la replica dell'infrastruttura di calcolo nel data center di failover aumenta i costi.
  • Per lo stato corrente non viene eseguito il failover. Le orchestrazioni e le entità esistenti vengono sospese e non sono disponibili fino al ripristino dell'area primaria. Il compromesso per mantenere la latenza e ridurre al minimo i costi di uscita dipende dai requisiti dell'applicazione.
  • Se si utilizza il pianificatore di attività durevole, valutare se configurare endpoint privati per garantire l'isolamento di rete tra l'app per le funzioni e l'utilità di pianificazione a livello di area.

Scenario 3: Calcolo bilanciato con GRS condiviso

Questo scenario è una modifica del primo scenario (implementazione di un account di archiviazione condiviso). La differenza principale è che l'account di archiviazione viene creato con la replica geografica abilitata.

Diagramma che mostra le app per le funzioni in aree separate che condividono un account di archiviazione, con failover in una replica.

Questo scenario offre gli stessi vantaggi funzionali del primo scenario, ma offre anche altri vantaggi per il ripristino dei dati:

  • L'archiviazione con ridondanza geografica e l'archiviazione con ridondanza geografica e accesso in lettura ottimizzano la disponibilità per l'account di archiviazione.
  • Se si verifica un'interruzione a livello di area del servizio Archiviazione di Azure, è possibile avviare un failover nella replica secondaria. In circostanze estreme in cui un'area viene persa a causa di un'emergenza, Microsoft potrebbe avviare un failover a livello di area. In questo caso, non è necessario eseguire alcuna azione.
  • Quando si verifica un failover, lo stato di Durable Functions viene mantenuto fino all'ultima replica dell'account di archiviazione. La replica viene in genere eseguita ogni pochi minuti.

Per altre informazioni, vedere Pianificazione del ripristino di emergenza e failover dell'archiviazione di Azure.

Considerazioni specifiche dello scenario

  • Un failover nella replica potrebbe richiedere del tempo. Fino a quando il failover non è completato e i record DNS di Archiviazione di Azure non vengono aggiornati, l'applicazione delle funzioni continua ad essere inaccessibile.
  • L'uso di account di archiviazione con replica geografica comporta un aumento dei costi.
  • La replica di archiviazione con ridondanza geografica copia i dati in modo asincrono. Alcune delle transazioni più recenti potrebbero essere perse a causa della latenza del processo di replica.
  • Come descritto per il primo scenario, è consigliabile che le app per le funzioni distribuite in questa strategia usino la versione 2.3.0 o successiva dell'estensione Durable Functions.