Share via


De beschikbaarheid van Azure Cosmos DB SDK's in multiregionale omgevingen vaststellen en oplossen

VAN TOEPASSING OP: NoSQL

In dit artikel wordt het gedrag van de nieuwste versie van Azure Cosmos DB SDK's beschreven wanneer u een verbindingsprobleem met een bepaalde regio ondervindt of wanneer een regiofailover optreedt.

Alle Azure Cosmos DB SDK's bieden u een optie om de regionale voorkeur aan te passen. De volgende eigenschappen worden gebruikt in verschillende SDK's:

Wanneer de SDK wordt geïnitialiseerd met een configuratie die regionale voorkeur opgeeft, worden eerst de accountgegevens opgehaald, inclusief de beschikbare regio's van het globale eindpunt. Vervolgens wordt een snijpunt toegepast van de geconfigureerde regionale voorkeur en de beschikbare regio's van het account en wordt de volgorde in de regionale voorkeur gebruikt om prioriteit te geven aan het resultaat.

Als de configuratie van de regionale voorkeur regio's bevat die geen beschikbare regio in het account zijn, worden de waarden genegeerd. Als deze ongeldige regio's later worden toegevoegd aan het account, gebruikt de SDK ze als ze hoger zijn in de voorkeursconfiguratie.

Accounttype Leesbewerkingen Schrijfbewerkingen
Regio voor één schrijfbewerking Voorkeursregio met hoogste volgorde Primaire regio
Meerdere schrijfregio's Voorkeursregio met hoogste volgorde Voorkeursregio met hoogste volgorde

Als u geen voorkeursregio instelt, wordt de SDK-client standaard ingesteld op de primaire regio:

Accounttype Leesbewerkingen Schrijfbewerkingen
Regio voor één schrijfbewerking Primaire regio Primaire regio
Meerdere schrijfregio's Primaire regio Primaire regio

Notitie

Primaire regio verwijst naar de eerste regio in de lijst met Azure Cosmos DB-accountregio's. Als de waarden die zijn opgegeven als regionale voorkeur niet overeenkomen met bestaande Azure-regio's, worden ze genegeerd. Als ze overeenkomen met een bestaande regio, maar het account er niet naar wordt gerepliceerd, maakt de client verbinding met de volgende voorkeursregio die overeenkomt met of met de primaire regio.

Waarschuwing

De failover- en beschikbaarheidslogica die in dit document wordt beschreven, kan worden uitgeschakeld voor de clientconfiguratie. Dit wordt niet aanbevolen, tenzij de gebruikerstoepassing beschikbaarheidsfouten zelf afhandelt. Dit kan worden bereikt door:

Onder normale omstandigheden maakt de SDK-client verbinding met de voorkeursregio (als er een regionale voorkeur is ingesteld) of met de primaire regio (als er geen voorkeur is ingesteld). De bewerkingen zijn beperkt tot die regio, tenzij een van de onderstaande scenario's zich voordoet.

In deze gevallen maakt de client die de Azure Cosmos DB SDK gebruikt logboeken beschikbaar en neemt de informatie over nieuwe pogingen op als onderdeel van de diagnostische gegevens van de bewerking:

  • De eigenschap RequestDiagnosticsString voor antwoorden in .NET V2 SDK.
  • De eigenschap Diagnostische gegevens over antwoorden en uitzonderingen in .NET V3 SDK.
  • De methode getDiagnostics () voor antwoorden en uitzonderingen in Java V4 SDK.

Bij het bepalen van de volgende regio in volgorde van voorkeur, gebruikt de SDK-client de lijst met accountregio's, waarbij prioriteit wordt gegeven aan de voorkeursregio's (indien aanwezig).

Zie de SLA's voor beschikbaarheid voor uitgebreide informatie over SLA-garanties tijdens deze gebeurtenissen.

Een regio verwijderen uit het account

Wanneer u een regio verwijdert uit een Azure Cosmos DB-account, detecteert elke SDK-client die actief gebruikmaakt van het account de regioverwijdering via een back-endantwoordcode. De client markeert vervolgens het regionale eindpunt als niet-beschikbaar. De client probeert de huidige bewerking opnieuw en alle toekomstige bewerkingen worden permanent gerouteerd naar de volgende regio in volgorde van voorkeur. Als de voorkeurslijst slechts één vermelding had (of leeg was), maar het account andere regio's beschikbaar heeft, wordt deze doorgestuurd naar de volgende regio in de accountlijst.

Een regio toevoegen aan een account

Elke 5 minuten leest de Azure Cosmos DB SDK-client de accountconfiguratie en vernieuwt de regio's waarvan deze op de hoogte is.

Als u een regio verwijdert en later weer toevoegt aan het account en de toegevoegde regio een hogere regionale voorkeursvolgorde heeft in de SDK-configuratie dan de huidige verbonden regio, schakelt de SDK terug om deze regio permanent te gebruiken. Nadat de toegevoegde regio is gedetecteerd, worden alle toekomstige aanvragen ernaar doorgestuurd.

Als u de client configureert om bij voorkeur verbinding te maken met een regio die het Azure Cosmos DB-account niet heeft, wordt de voorkeursregio genegeerd. Als u die regio later toevoegt, wordt deze door de client gedetecteerd en wordt permanent overgeschakeld naar die regio.

Een failover uitvoeren voor de schrijfregio in één account voor een schrijfregio

Als u een failover van de huidige schrijfregio start, mislukt de volgende schrijfaanvraag met een bekend back-endantwoord. Wanneer dit antwoord wordt gedetecteerd, voert de client een query uit op het account om de nieuwe schrijfregio te leren en voert de huidige bewerking opnieuw uit en stuurt alle toekomstige schrijfbewerkingen permanent door naar de nieuwe regio.

Regionale storing

Als het account één schrijfregio is en de regionale storing optreedt tijdens een schrijfbewerking, is het gedrag vergelijkbaar met een handmatige failover. Voor leesaanvragen of accounts met meerdere schrijfregio's is het gedrag vergelijkbaar met het verwijderen van een regio.

Garanties voor sessieconsistentie

Wanneer u sessieconsistentie gebruikt, moet de client garanderen dat deze zijn eigen schrijfbewerkingen kan lezen. In accounts met één schrijfregio waarbij de voorkeur voor leesregio verschilt van de schrijfregio, kunnen er gevallen zijn waarin de gebruiker een schrijfbewerking uitvoert en vervolgens een leesbewerking uitvoert vanuit een lokale regio, de lokale regio de gegevensreplicatie (snelheid van de lichte beperking) nog niet heeft ontvangen. In dergelijke gevallen ontvangt de SDK een specifieke fout van de service tijdens de leesbewerking en probeert de leesbewerking opnieuw in de primaire regio om consistentie van de sessie te garanderen. Voor accounts met meerdere schrijfregio's is dezelfde sessie-semantiek van toepassing, maar omdat er meerdere schrijfregio's beschikbaar zijn, worden nieuwe pogingen uitgegeven met behulp van de lijst met voorkeursregio's of de regiovolgorde van het account.

Tijdelijke verbindingsproblemen op TCP-protocol

In scenario's waarin de Azure Cosmos DB SDK-client is geconfigureerd voor het gebruik van het TCP-protocol, kunnen er voor een bepaalde aanvraag situaties zijn waarin de netwerkomstandigheden tijdelijk van invloed zijn op de communicatie met een bepaald eindpunt. Deze tijdelijke netwerkomstandigheden kunnen optreden als TCP-time-outs en fouten met de service niet beschikbaar (HTTP 503). De client probeert de aanvraag, indien mogelijk, gedurende enkele seconden opnieuw lokaal op hetzelfde eindpunt uit te voeren.

Als de gebruiker een lijst met voorkeursregio's heeft geconfigureerd met meer dan één regio en de client alle lokale nieuwe pogingen heeft uitgeput, kan deze proberen om die ene bewerking opnieuw uit te voeren in de volgende regio vanuit de voorkeurslijst. Schrijfbewerkingen kunnen alleen opnieuw worden uitgevoerd in een andere regio als voor het Azure Cosmos DB-account meerdere schrijfregio's zijn ingeschakeld, terwijl leesbewerkingen opnieuw kunnen worden uitgevoerd in elke beschikbare regio.

Volgende stappen