Diagnosticare e risolvere i problemi relativi alla disponibilità degli SDK di Azure Cosmos DB in ambienti multi-area

SI APPLICA A: NoSQL

Questo articolo descrive il comportamento della versione più recente degli SDK di Azure Cosmos DB quando viene riscontrato un problema di connettività a una determinata area o quando si verifica un failover dell'area.

Tutti gli SDK di Azure Cosmos DB offrono un'opzione per personalizzare le preferenze a livello di area. Le proprietà seguenti vengono usate in diversi SDK:

Quando l'SDK viene inizializzato con una configurazione che specifica le preferenze relative all'area, ottiene prima le informazioni sull'account, incluse le aree disponibili dall'endpoint globale. Applicherà quindi un'intersezione delle preferenze a livello di area configurate e delle aree disponibili dell'account e userà l'ordine nella preferenza regionale per classificare in ordine di priorità il risultato.

Se la configurazione delle preferenze a livello di area contiene aree che non sono un'area disponibile nell'account, i valori verranno ignorati. Se queste aree non valide vengono aggiunte in un secondo momento all'account, l'SDK le userà se sono più in alto nella configurazione delle preferenze.

Tipo di conto Letture Scritture
Singola area di scrittura Area preferita con ordine più alto Area primaria
Più aree di scrittura Area preferita con ordine più alto Area preferita con ordine più alto

Se non viene impostata un'area preferita, per impostazione predefinita il client SDK viene impostato sull'area primaria:

Tipo di conto Letture Scritture
Singola area di scrittura Area primaria Area primaria
Più aree di scrittura Area primaria Area primaria

Nota

L'area primaria fa riferimento alla prima area nell'elenco delle aree dell'account Azure Cosmos DB. Se i valori specificati come preferenza a livello di area non corrispondono ad alcuna area di Azure esistente, verranno ignorati. Se corrispondono a un'area esistente ma l'account non viene replicato sulla stessa, il client si connetterà all'area preferita successiva corrispondente o all'area primaria.

Avviso

La logica di failover e disponibilità descritta in questo documento può essere disabilitata nella configurazione client, che non è consigliata a meno che l'applicazione utente non gestisca gli errori di disponibilità. A tale scopo, è possibile:

In circostanze normali, il client SDK si connetterà all'area preferita (se è impostata una preferenza a livello di area) o all'area primaria (se non è impostata alcuna preferenza) e le operazioni saranno limitate a tale area, a meno che non si verifichi uno degli scenari seguenti.

In questi casi, il client che usa l'SDK di Azure Cosmos DB espone i log e include le informazioni di ripetizione dei tentativi come parte delle informazioni di diagnostica dell'operazione:

  • La proprietà RequestDiagnosticsString sulle risposte in .NET V2 SDK.
  • La proprietà Diagnostica nelle risposte e nelle eccezioni di .NET V3 SDK.
  • Il metodo getdiagnostics() nelle risposte e nelle eccezioni in Java V4 SDK.

Quando si determina l'area successiva in ordine di preferenza, il client SDK userà l'elenco di aree dell'account, assegnando la priorità alle aree preferite (se presenti).

Per informazioni dettagliate sulle garanzie del contratto di servizio durante questi eventi, vedere i contratti di servizio per la disponibilità.

Rimozione di un'area dall'account

Quando si rimuove un'area da un account Azure Cosmos DB, qualsiasi client SDK che usa attivamente l'account rileverà la rimozione dell'area tramite un codice di risposta del back-end. Il client contrassegna quindi l'endpoint a livello di area come non disponibile. Il client ritenta l'operazione corrente e tutte le operazioni future vengono indirizzate in modo permanente all'area successiva in ordine di preferenza. Nel caso in cui l'elenco delle preferenze abbia una sola voce (o fosse vuoto), ma l'account dispone di altre aree disponibili, verrà instradato all'area successiva nell'elenco dell'account.

Aggiunta di un'area a un account

Ogni 5 minuti, il client SDK di Azure Cosmos DB legge la configurazione dell'account e aggiorna le aree di cui è a conoscenza.

Se si rimuove un'area e successivamente la si aggiunge all'account, se l'area aggiunta ha un ordine di preferenza a livello di area superiore nella configurazione dell'SDK rispetto all'area connessa attuale, l'SDK tornerà a usare questa area in modo permanente. Dopo aver rilevato l'area aggiunta, tutte le richieste future vengono indirizzate a tale area.

Se si configura il client per connettersi preferibilmente a un'area che l'account Azure Cosmos DB non ha, l'area preferita viene ignorata. Se si aggiunge tale area in un secondo momento, il client la rileva e passerà in modo permanente a tale area.

Eseguire il failover dell'area di scrittura in un singolo account dell'area di scrittura

Se si avvia un failover dell'area di scrittura corrente, la richiesta di scrittura successiva avrà esito negativo con una risposta del back-end nota. Quando viene rilevata questa risposta, il client eseguirà una query sull'account per apprendere la nuova area di scrittura e continuare a ripetere l'operazione corrente e instradare in modo permanente tutte le operazioni di scrittura future alla nuova area.

Interruzione a livello di area

Se l'account è una singola area di scrittura e l'interruzione a livello di area si verifica durante un'operazione di scrittura, il comportamento è simile a un failover manuale. Per le richieste di lettura o più account con aree di scrittura, il comportamento è simile alla rimozione di un'area.

Garanzie di coerenza della sessione

Quando si usa la coerenza della sessione, il client deve garantire che possa leggere le proprie scritture. Negli account con singola area di scrittura in cui la preferenza per l'area di lettura è diversa dall'area di scrittura, potrebbero verificarsi casi in cui l'utente emette una scrittura e quando si esegue una lettura da un'area locale, l'area locale non ha ancora ricevuto la replica dei dati (vincolo di velocità della luce). In questi casi, l'SDK riceve un errore specifico dal servizio nell'operazione di lettura e ritenta la lettura nell'area primaria per garantire la coerenza della sessione. Per gli account con più aree di scrittura, la stessa semantica di sessione si applica, ma poiché sono disponibili più aree di scrittura, i tentativi vengono eseguiti usando l'elenco di aree preferite o l'ordine dell'area dell'account.

Problemi di connettività temporanei sul protocollo TCP

Negli scenari in cui il client SDK di Azure Cosmos DB è configurato per l'uso del protocollo TCP, per una determinata richiesta, potrebbero verificarsi situazioni in cui le condizioni di rete influiscono temporaneamente sulla comunicazione con un endpoint specifico. Queste condizioni di rete temporanee possono essere rilevate come timeout TCP ed errori di Servizio non disponibile (HTTP 503). Il client, se possibile, ripete la richiesta in locale sullo stesso endpoint per alcuni secondi.

Se l'utente ha configurato un elenco di aree preferite con più di un'area e il client ha esaurito tutti i tentativi in locale, può tentare di ritentare tale singola operazione nell'area successiva dall'elenco delle preferenze. Le operazioni di scrittura possono essere ritentate solo in un'altra area se l'account Azure Cosmos DB ha più aree di scrittura abilitate, mentre le operazioni di lettura possono essere ritentate in qualsiasi area disponibile.

Passaggi successivi