Diagnostizieren und Beheben von Problemen bei der Verfügbarkeit von Azure Cosmos DB-SDKs in Umgebungen mit mehreren Regionen
GILT FÜR: NoSQL
Dieser Artikel beschreibt das Verhalten der neuesten Version von Azure Cosmos DB-SDKs, wenn ein Problem bei der Verbindung mit einer bestimmten Region oder ein Regionsfailover auftritt.
Alle Azure Cosmos DB-SDKs verfügen über eine Option zum Anpassen der bevorzugten Region. In den verschiedenen SDKs werden die folgenden Eigenschaften verwendet:
- Die ConnectionPolicy.PreferredLocations-Eigenschaft im .NET V2 SDK
- Die CosmosClientOptions.ApplicationRegion- oder CosmosClientOptions.ApplicationPreferredRegions-Eigenschaft im .NET V3 SDK.
- Die CosmosClientBuilder.preferredRegions-Methode im Java V4 SDK.
- Der CosmosClient.preferred_locations-Parameter im Python SDK.
- Der Parameter CosmosClientOptions.ConnectionPolicy.preferredLocations im JS-SDK
Wenn das SDK mit einer Konfiguration initialisiert wird, die regionale Einstellungen angibt, werden zuerst die Kontoinformationen einschließlich der verfügbaren Regionen vom globalen Endpunkt abgerufen. Anschließend wird eine Schnittmenge der konfigurierten regionalen Einstellung und der verfügbaren Regionen des Kontos angewendet und die Reihenfolge in der regionalen Einstellung verwendet, um das Ergebnis zu priorisieren.
Wenn die Konfiguration der regionalen Einstellung Regionen enthält, die im Konto keine verfügbare Regionen sind, werden die Werte ignoriert. Wenn diese ungültigen Regionen dem Konto später hinzugefügt werden, werden sie vom SDK verwendet, wenn sie in der Einstellungskonfiguration höher sind.
Kontotyp | Lesevorgänge | Schreibvorgänge |
---|---|---|
Eine Schreibregion | Bevorzugte Region mit höchster Ordnung | Primäre Region |
Mehrere Schreibregionen | Bevorzugte Region mit höchster Ordnung | Bevorzugte Region mit höchster Ordnung |
Wenn Sie keine bevorzugte Region festlegen, wird der SDK-Client standardmäßig auf die primäre Region festgelegt:
Kontotyp | Lesevorgänge | Schreibvorgänge |
---|---|---|
Eine Schreibregion | Primäre Region | Primäre Region |
Mehrere Schreibregionen | Primäre Region | Primäre Region |
Hinweis
„Primäre Region“ bezeichnet die erste Region in der Regionenliste für Azure Cosmos DB-Konten. Wenn die als regionale Einstellung angegebenen Werte nicht mit den vorhandenen Azure-Regionen identisch sind, werden sie ignoriert. Wenn sie mit einer vorhandenen Region übereinstimmen, das Konto jedoch nicht in ihr repliziert wird, stellt der Client eine Verbindung mit der nächsten übereinstimmenden bevorzugten Region oder mit der primären Region her.
Warnung
Die in diesem Dokument beschriebene Failover- und Verfügbarkeitslogik kann in der Clientkonfiguration deaktiviert werden. Dies ist nur empfehlenswert, wenn die Benutzeranwendung Verfügbarkeitsfehler selbst behandelt. Dies lässt sich wie folgt erreichen:
- Festlegen der ConnectionPolicy.EnableEndpointDiscovery-Eigenschaft im .NET V2 SDK auf „false“.
- Festlegen der CosmosClientOptions.LimitToEndpoint-Eigenschaft im .NET V3 SDK auf „true“.
- Festlegen der CosmosClientBuilder.endpointDiscoveryEnabled-Methode im Java V4 SDK auf „false“.
- Festlegen des CosmosClient.enable_endpoint_discovery-Parameters im Python SDK auf „false“.
- Festlegen des CosmosClientOptions.ConnectionPolicy.enableEndpointDiscovery-Parameters im JavaScript SDK auf „false“.
Unter normalen Umständen stellt der SDK-Client eine Verbindung mit der bevorzugten Region (sofern eine diese festgelegt ist) oder der primären Region (wenn keine bevorzugte Region festgelegt ist) her, und die Vorgänge werden außer in den folgenden Szenarien auf diese Region beschränkt.
In diesen Fällen macht der Client, der das Azure Cosmos DB-SDK verwendet, Protokolle verfügbar und schließt die Wiederholungsinformationen in die Vorgangsdiagnoseinformationen ein:
- Die Eigenschaft RequestDiagnosticsString für Antworten im .NET-V2-SDK
- Die Eigenschaft Diagnose für Antworten und Ausnahmen im .NET-V3-SDK
- Die Methode getDiagnostics() für Antworten und Ausnahmen im Java-V4-SDK
Beim Ermitteln der nächsten Region bei Sortierung nach Bevorzugung verwendet der SDK-Client die Kontoregionenliste und priorisiert die bevorzugten Regionen (sofern vorhanden).
Detaillierte und umfassende Informationen zu SLA-Garantien während dieser Ereignisse finden Sie unter SLAs für Verfügbarkeit.
Wenn Sie eine Region aus einem Azure Cosmos DB-Konto entfernen, erkennt jeder SDK-Client, der das Konto aktiv verwendet, das Entfernen der Region über einen Back-End-Antwortcode. Der Client markiert dann den regionalen Endpunkt als nicht verfügbar. Der Client versucht, den aktuellen Vorgang zu wiederholen, und alle zukünftigen Vorgänge werden stets nach der Reihenfolge der Bevorzugung an die nächste Region weitergeleitet. Wenn die Einstellungsliste nur einen Eintrag enthielt (oder leer war), für das Konto jedoch andere Regionen verfügbar sind, werden die Vorgänge an die nächste Region in der Liste der Konten weitergeleitet.
Der Azure Cosmos DB-SDK-Client liest alle 5 Minuten die Kontokonfiguration und aktualisiert die Regionen, die er erkennt.
Wenn Sie eine Region entfernen und sie später wieder dem Konto hinzufügen, verwendet das SDK dauerhaft wieder diese Region, sofern für die hinzugefügte Region in der SDK-Konfiguration eine höhere regionale Bevorzugung als für die Region festgelegt ist, mit der zu diesem Zeitpunkt eine Verbindung besteht. Nachdem die hinzugefügte Region erkannt wurde, werden alle zukünftigen Anforderungen an sie weitergeleitet.
Wenn Sie den Client so konfigurieren, dass er vorzugsweise eine Verbindung mit einer Region herstellt, die im Azure Cosmos DB-Konto nicht enthalten ist, wird die bevorzugte Region ignoriert. Wenn Sie diese Region zu einem späteren Zeitpunkt hinzufügen, wird sie vom Client erkannt und stets für Verbindungen bevorzugt.
Wenn Sie ein Failover der aktuellen Schreibregion initiieren, schlägt die nächste Schreibanforderung mit einer bekannten Back-End-Antwort fehl. Wenn diese Antwort erkannt wird, fragt der Client das Konto ab, um die neue Schreibregion zu ermitteln. Er setzt dann den aktuellen Vorgang fort und leitet alle zukünftigen Schreibvorgänge stets an die neue Region weiter.
Wenn es sich bei dem Konto um eine einzelne Schreibregion handelt und der regionale Ausfall während eines Schreibvorgangs auftritt, ähnelt das Verhalten einem manuellen Failover. Bei Leseanforderungen oder Konten mit mehreren Schreibregionen ähnelt das Verhalten dem Entfernen einer Region.
Wenn Sie Sitzungskonsistenz verwenden, muss der Client sicherstellen, dass er die eigenen Schreibvorgänge lesen kann. In Konten mit nur einer Schreibregion, bei denen sich die bevorzugte Leseregion von der Schreibregion unterscheidet, kann es vorkommen, dass der Benutzer einen Schreibvorgang auslöst und dann einen Lesevorgang aus einer lokalen Region ausführt, welche die Datenreplikation noch nicht erhalten hat (Beschränkung der Lichtgeschwindigkeit). In solchen Fällen erhält das SDK beim Lesevorgang einen spezifischen Fehler vom Dienst und wiederholt den Lesevorgang in der primären Region, um Sitzungskonsistenz sicherzustellen. Für Konten mit mehreren Schreibregionen gilt die gleiche Sitzungssemantik, aber da mehrere Schreibregionen verfügbar sind, werden Wiederholungen mithilfe der Liste der bevorzugten Regionen oder der Regionsreihenfolge des Kontos ausgegeben.
In Szenarien, in denen der Azure Cosmos DB-SDK-Client für die Verwendung des TCP-Protokolls konfiguriert ist, kann es für eine bestimmte Anforderung vorkommen, dass die Netzwerkbedingungen die Kommunikation mit einem bestimmten Endpunkt vorübergehend beeinträchtigen. Diese temporären Netzwerkbedingungen können als Fehler vom Typ TCP-Timeout und „Dienst nicht verfügbar“ (HTTP 503) auftreten. Der Client versucht nach Möglichkeit einige Sekunden lang, die Anforderung lokal auf demselben Endpunkt zu wiederholen.
Wenn der Benutzer eine bevorzugte Regionsliste mit mehr als einer Region konfiguriert hat und der Client alle lokalen Wiederholungsversuche ausgeschöpft hat, kann er versuchen, diesen einzelnen Vorgang in der nächsten Region aus der Präferenzliste zu wiederholen. Schreibvorgänge können nur dann in einer anderen Region wiederholt werden, wenn für das Azure Cosmos DB-Konto mehrere Schreibregionen aktiviert sind, während Lesevorgänge in jeder verfügbaren Region wiederholt werden können.
- Sehen Sie sich die SLAs für Verfügbarkeit an.
- Verwenden Sie das neueste .NET SDK.
- Verwenden Sie das neueste Java SDK.
- Verwenden Sie das neueste Python SDK.
- Verwenden Sie das neueste Node SDK.