De beschikbaarheid van Azure Cosmos DB SDK's in multiregionale omgevingen vaststellen en oplossen
VAN TOEPASSING OP: NoSQL
In dit artikel wordt het gedrag beschreven van de nieuwste versie van Azure Cosmos DB SDK's wanneer u een verbindingsprobleem met een bepaalde regio ziet of wanneer er 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:
- De eigenschap ConnectionPolicy.PreferredLocations in .NET V2 SDK.
- De eigenschappen CosmosClientOptions.ApplicationRegion of CosmosClientOptions.ApplicationPreferredRegions in .NET V3 SDK.
- De methode CosmosClientBuilder.preferredRegions in Java V4 SDK.
- De parameter CosmosClient.preferred_locations in Python SDK.
- De parameter CosmosClientOptions.ConnectionPolicy.preferredLocations in JS SDK.
Wanneer de SDK wordt geïnitialiseerd met een configuratie die regionale voorkeur aangeeft, wordt eerst de accountgegevens opgehaald, inclusief de beschikbare regio's van het globale eindpunt. Vervolgens wordt een snijpunt van de geconfigureerde regionale voorkeur en de beschikbare regio's van het account toegepast en wordt de volgorde in de regionale voorkeur gebruikt om prioriteit te geven aan het resultaat.
Als de regionale voorkeursconfiguratie regio's bevat die geen beschikbare regio in het account zijn, worden de waarden genegeerd. Als deze ongeldige regio's later aan het account worden toegevoegd, gebruikt de SDK deze als deze hoger zijn in de voorkeursconfiguratie.
Rekeningtype | 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:
Rekeningtype | 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 niet naar het account 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, kunnen worden uitgeschakeld in de clientconfiguratie. Dit wordt niet geadviseerd, tenzij de gebruikerstoepassing beschikbaarheidsfouten zelf gaat afhandelen. Dit kan worden bereikt door:
- De eigenschap ConnectionPolicy.EnableEndpointDiscovery in .NET V2 SDK instellen op false.
- Stel de eigenschap CosmosClientOptions.LimitToEndpoint in .NET V3 SDK in op true.
- De methode CosmosClientBuilder.endpointDiscoveryEnabled in Java V4 SDK instellen op false.
- De parameter CosmosClient.enable_endpoint_discovery in Python SDK instellen op false.
- De parameter CosmosClientOptions.ConnectionPolicy.enableEndpointDiscovery in JS SDK instellen op false.
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) en worden de bewerkingen beperkt tot die regio, tenzij een van de onderstaande scenario's zich voordoet.
In deze gevallen maakt de client met behulp van de Azure Cosmos DB SDK logboeken beschikbaar en bevat de gegevens voor opnieuw proberen 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 van toepassing).
Zie de SLA's voor beschikbaarheid voor uitgebreide informatie over SLA-garanties tijdens deze gebeurtenissen.
Een regio uit het account verwijderen
Wanneer u een regio verwijdert uit een Azure Cosmos DB-account, detecteert elke SDK-client die het account actief gebruikt, de verwijdering van de regio via een back-endantwoordcode. De client markeert vervolgens het regionale eindpunt als niet beschikbaar. De client probeert de huidige bewerking opnieuw uit te voeren 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 lijst met accounts.
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 deze later weer toevoegt aan het account, als de toegevoegde regio een hogere regionale voorkeursvolgorde heeft in de SDK-configuratie dan de huidige verbonden regio, wordt de SDK teruggezet 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, detecteert de client deze en schakelt deze permanent over naar die regio.
Failover van de schrijfregio in één account voor de 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 door te gaan met het opnieuw proberen van de huidige bewerking en alle toekomstige schrijfbewerkingen permanent naar de nieuwe regio te routeren.
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 voor meerdere schrijfregio's is het gedrag vergelijkbaar met het verwijderen van een regio.
Garanties voor sessieconsistentie
Bij het gebruik van sessieconsistentie moet de client garanderen dat deze zijn eigen schrijfbewerkingen kan lezen. In accounts voor één schrijfregio waarbij de voorkeur voor de leesregio verschilt van de schrijfregio, kunnen er gevallen zijn waarbij de gebruiker een schrijfbewerking uitvoert en vervolgens een leesbewerking uitvoert vanuit een lokale regio, de lokale regio de gegevensreplicatie nog niet heeft ontvangen (snelheid van lichtbeperking). In dergelijke gevallen ontvangt de SDK een specifieke fout van de service voor de leesbewerking en probeert de leesbewerking opnieuw uit te voeren op de primaire regio om de consistentie van de sessie te garanderen. Voor accounts met meerdere schrijfregio's geldt dezelfde sessiesemantiek, maar omdat er meerdere schrijfregio's beschikbaar zijn, worden nieuwe pogingen uitgegeven met behulp van de regiolijst van voorkeur of de regiovolgorde van het account.
Tijdelijke verbindingsproblemen in TCP-protocol
In scenario's waarin de Azure Cosmos DB SDK-client is geconfigureerd voor het gebruik van het TCP-protocol, kunnen er situaties zijn waarin de netwerkvoorwaarden tijdelijk van invloed zijn op de communicatie met een bepaald eindpunt. Deze tijdelijke netwerkvoorwaarden kunnen optreden als TCP-time-outs en HTTP 503-fouten (Service Niet beschikbaar). Indien mogelijk probeert de client de aanvraag lokaal op hetzelfde eindpunt opnieuw uit te voeren gedurende enkele seconden.
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 worden geprobeerd 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
- Controleer de beschikbaarheids-SLA's.
- De nieuwste .NET SDK gebruiken
- De nieuwste Java SDK gebruiken
- De nieuwste Python SDK gebruiken
- De nieuwste Node SDK gebruiken