Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Wiederholungsverhalten
Anmerkung
Hilfe zum Verständnis des Layouts von Einstellungsseiten oder zur Interpretation der nachfolgenden Tabelle Support by AWS SDKs und Tools finden Sie unterDie Einstellungsseiten dieses Handbuchs verstehen.
Das Wiederholungsverhalten umfasst Einstellungen, die festlegen, wie SDKs versucht wird, die Wiederherstellung nach Fehlern aufgrund von Anfragen an AWS-Services
Konfigurieren Sie diese Funktionalität wie folgt:
retry_mode
- Einstellung für gemeinsam genutzte AWSconfig
DateienAWS_RETRY_MODE
- Umgebungsvariableaws.retryMode
- JVM-Systemeigenschaft: Nur Java/Kotlin-
Gibt an, wie das SDK oder das Entwicklertool versucht, es erneut zu versuchen.
Standardwert: Dieser Wert ist spezifisch für Ihr SDK. Den Standardwert finden Sie in Ihrem spezifischen SDK-Handbuch oder in der Codebasis Ihres SDK
retry_mode
.Zulässige Werte:
-
standard
— (Empfohlen) Der empfohlene Satz von Wiederholungsregeln für alle. AWS SDKs Dieser Modus umfasst einen Standardsatz von Fehlern, die wiederholt werden, und passt die Anzahl der Wiederholungen automatisch an, um die Verfügbarkeit und Stabilität zu maximieren. Dieser Modus ist sicher für die Verwendung in Mehrmandantenanwendungen. Die standardmäßige maximale Anzahl von Versuchen in diesem Modus beträgt drei, sofern nichtmax_attempts
ausdrücklich konfiguriert. -
adaptive
— Ein Wiederholungsmodus, der nur für spezielle Anwendungsfälle geeignet ist und die Funktionalität des Standardmodus sowie die automatische clientseitige Ratenbegrenzung umfasst. Dieser Wiederholungsmodus wird für Anwendungen mit mehreren Mandanten nicht empfohlen, es sei denn, Sie achten darauf, Anwendungsmandanten zu isolieren. Weitere Informationen finden Sie unter Wählen Sie zwischen den Modi standard und adaptive versuchen Sie es erneut. Dieser Modus ist experimentell und könnte das Verhalten in future ändern. -
legacy
— (Nicht empfohlen) Spezifisch für Ihr SDK (lesen Sie in Ihrem spezifischen SDK-Handbuch oder in der Codebasis Ihres SDK nach).
-
max_attempts
- Einstellung für gemeinsam genutzte AWSconfig
DateienAWS_MAX_ATTEMPTS
- Umgebungsvariableaws.maxAttempts
- JVM-Systemeigenschaft: Nur Java/Kotlin-
Gibt die maximale Anzahl an Versuchen an, die bei einer Anfrage unternommen werden können.
Standardwert: Wenn dieser Wert nicht angegeben ist, hängt sein Standardwert vom Wert der
retry_mode
Einstellung ab:-
Falls
retry_mode
jalegacy
— Verwendet einen für Ihr SDK spezifischen Standardwert (denmax_attempts
Standardwert finden Sie in Ihrem spezifischen SDK-Handbuch oder in der Codebasis Ihres SDK). -
Falls
retry_mode
jastandard
— Unternimmt drei Versuche. -
Falls
retry_mode
jaadaptive
— Führt drei Versuche durch.
Gültige Werte: Zahl größer als 0.
-
Wählen Sie zwischen den Modi standard
und adaptive
versuchen Sie es erneut
Wir empfehlen Ihnen, den standard
Wiederholungsmodus zu verwenden, es sei denn, Sie sind sich sicher, dass Ihre Verwendung dafür besser geeignet ist. adaptive
Anmerkung
In diesem adaptive
Modus wird davon ausgegangen, dass Sie Clients auf der Grundlage des Bereichs, in dem der Back-End-Dienst Anfragen drosseln kann, zusammenfassen. Wenn Sie dies nicht tun, können Drosselungen in einer Ressource Anfragen für eine nicht verwandte Ressource verzögern, wenn Sie denselben Client für beide Ressourcen verwenden.
Standard | Adaptiv |
---|---|
Anwendungsfälle: Alle. | Anwendungsfälle für Anwendungen:
|
Unterstützt Circuit-Breaking, um zu verhindern, dass das SDK es bei Ausfällen erneut versucht. | Unterstützt Circuit-Breaking, um zu verhindern, dass das SDK es bei Ausfällen erneut versucht. |
Verwendet bei Ausfällen einen exponentiellen Jitter-Backoff. | Verwendet dynamische Backoff-Dauern, um zu versuchen, die Anzahl der fehlgeschlagenen Anfragen zu minimieren, als Gegenleistung für die mögliche Erhöhung der Latenz. |
Verzögert niemals den ersten Anforderungsversuch, sondern nur die Wiederholungsversuche. | Kann den ersten Anforderungsversuch drosseln oder verzögern. |
Wenn Sie den adaptive
Modus verwenden möchten, muss Ihre Anwendung Clients erstellen, die für jede Ressource konzipiert sind, die möglicherweise gedrosselt wird. Eine Ressource ist in diesem Fall besser abgestimmt, als nur an jede einzelne Ressource zu denken. AWS-Service AWS-Services kann zusätzliche Dimensionen haben, die sie verwenden, um Anfragen zu drosseln. Lassen Sie uns den Amazon DynamoDB-Service als Beispiel verwenden. DynamoDB verwendet AWS-Region plus die Tabelle, auf die zugegriffen wird, um Anfragen zu drosseln. Das bedeutet, dass eine Tabelle, auf die Ihr Code zugreift, möglicherweise stärker gedrosselt wird als andere. Wenn Ihr Code denselben Client für den Zugriff auf alle Tabellen verwendet hat und Anfragen an eine dieser Tabellen gedrosselt werden, reduziert der adaptive Wiederholungsmodus die Anforderungsrate für alle Tabellen. Ihr Code sollte so konzipiert sein, dass er einen Client pro Paar hat. Region-and-table Wenn Sie bei der Verwendung des adaptive
Modus eine unerwartete Latenz feststellen, lesen Sie in der spezifischen AWS Dokumentation des von Ihnen verwendeten Dienstes nach.
Einzelheiten zur Implementierung des Wiederholungsmodus
AWS SDKs Sie verwenden Token-Bucketsadaptive
Wiederholungsmodus) wie schnell Anfragen gesendet werden sollen. Zwei Token-Buckets werden vom SDK verwendet: ein Token-Bucket für Wiederholungsversuche und ein Token-Bucket für die Anforderungsrate.
-
Der Token-Bucket für Wiederholungen wird verwendet, um zu bestimmen, ob das SDK Wiederholungsversuche vorübergehend deaktivieren soll, um die Upstream- und Downstream-Dienste bei Ausfällen zu schützen. Token werden aus dem Bucket abgerufen, bevor Wiederholungsversuche unternommen werden, und Token werden an den Bucket zurückgegeben, wenn die Anfragen erfolgreich sind. Wenn der Bucket leer ist, wenn ein Wiederholungsversuch unternommen wird, versucht das SDK die Anfrage nicht erneut.
-
Der Token-Bucket für die Anforderungsrate wird nur im
adaptive
Wiederholungsmodus verwendet, um die Geschwindigkeit zu bestimmen, mit der Anfragen gesendet werden. Token werden aus dem Bucket abgerufen, bevor eine Anfrage gesendet wird, und Token werden mit einer dynamisch bestimmten Rate an den Bucket zurückgegeben, die auf Drosselungsantworten basiert, die vom Service zurückgegeben werden.
Im Folgenden finden Sie den allgemeinen Pseudocode für den Modus und den Wiederholungsmodus: standard
adaptive
MakeSDKRequest() { attempts = 0 loop { GetSendToken() response = SendHTTPRequest() RequestBookkeeping(response) if not Retryable(response) return response attempts += 1 if attempts >= MAX_ATTEMPTS: return response if not HasRetryQuota(response) return response delay = ExponentialBackoff(attempts) sleep(delay) } }
Im Folgenden finden Sie weitere Informationen zu den im Pseudocode verwendeten Komponenten:
GetSendToken
:
Dieser Schritt wird nur im adaptive
Wiederholungsmodus verwendet. In diesem Schritt wird ein Token aus dem Token-Bucket für die Anforderungsrate abgerufen. Wenn ein Token nicht verfügbar ist, wartet es, bis eines verfügbar wird. In Ihrem SDK stehen möglicherweise Konfigurationsoptionen zur Verfügung, mit denen die Anfrage fehlschlagen kann, anstatt zu warten. Tokens im Bucket werden mit einer Geschwindigkeit aufgefüllt, die dynamisch auf der Grundlage der Anzahl der vom Client empfangenen Drosselungsantworten bestimmt wird.
SendHTTPRequest
:
In diesem Schritt wird die Anfrage an gesendet. AWS Die meisten AWS SDKs verwenden eine HTTP-Bibliothek, die Verbindungspools verwendet, um eine bestehende Verbindung wiederzuverwenden, wenn eine HTTP-Anfrage gestellt wird. Im Allgemeinen werden Verbindungen wiederverwendet, wenn eine Anfrage aufgrund von Drosselungsfehlern fehlgeschlagen ist, aber nicht, wenn eine Anfrage aufgrund eines vorübergehenden Fehlers fehlschlägt.
RequestBookkeeping
:
Token werden dem Token-Bucket hinzugefügt, wenn die Anfrage erfolgreich ist. Nur im adaptive
Wiederholungsmodus wird die Füllrate des Token-Buckets für die Anforderungsrate auf der Grundlage der Art der erhaltenen Antwort aktualisiert.
Retryable
:
In diesem Schritt wird anhand der folgenden Kriterien bestimmt, ob eine Antwort erneut versucht werden kann:
-
Den HTTP-Statuscode .
-
Der vom Dienst zurückgegebene Fehlercode.
-
Verbindungsfehler, definiert als jeder vom SDK empfangene Fehler, bei dem keine HTTP-Antwort vom Dienst empfangen wird.
Vorübergehende Fehler (HTTP-Statuscodes 400, 408, 500, 502, 503 und 504) und Drosselungsfehler (HTTP-Statuscodes 400, 403, 429, 502, 503 und 509) können alle potenziell wiederholt werden. Das SDK-Wiederholungsverhalten wird in Kombination mit Fehlercodes oder anderen Daten aus dem Dienst bestimmt.
MAX_ATTEMPTS
:
Die Standardanzahl der maximalen Versuche wird durch die retry_mode
Einstellung festgelegt, sofern sie nicht durch die Einstellung überschrieben wird. max_attempts
HasRetryQuota
In diesem Schritt wird ein Token aus dem Token-Bucket für Wiederholungsversuche abgerufen. Wenn der Token-Bucket für Wiederholungen leer ist, wird die Anfrage nicht erneut versucht.
ExponentialBackoff
Bei einem Fehler, der erneut versucht werden kann, wird die Verzögerung beim erneuten Versuch anhand eines verkürzten exponentiellen Backoffs berechnet. Die SDKs Verwendung eines verkürzten binären exponentiellen Backoffs mit Jitter. Der folgende Algorithmus zeigt, wie die Zeit bis zum Schlafen (in Sekunden) für eine Antwort auf eine Anfrage definiert wird: i
seconds_to_sleep_i = min(b*r^i, MAX_BACKOFF)
Im vorherigen Algorithmus gelten die folgenden Werte:
b = random number within the range of: 0 <= b <= 1
r = 2
MAX_BACKOFF = 20 seconds
für die meisten SDKs. Weitere Informationen finden Sie in Ihrem spezifischen SDK-Leitfaden oder Quellcode.
Support von AWS SDKs und Tools
Im Folgenden werden die in diesem Thema beschriebenen Funktionen und Einstellungen SDKs unterstützt. Alle teilweisen Ausnahmen werden vermerkt. Alle Einstellungen für JVM-Systemeigenschaften werden AWS SDK for Kotlin nur von AWS SDK für Java und vom unterstützt.
SDK | Unterstützt | Hinweise oder weitere Informationen |
---|---|---|
AWS CLI v2 | Ja | |
SDK for C++ | Ja | |
SDK for Go V2 (1.x) |
Ja | |
SDK for Go 1.x (V1) | Nein | |
SDK for Java 2.x | Ja | |
SDK for Java 1.x | Ja | JVM-Systemeigenschaften: anstelle von verwendenaws.maxAttempts ; com.amazonaws.sdk.maxAttempts anstelle von verwendencom.amazonaws.sdk.retryMode . aws.retryMode |
SDK für 3.x JavaScript | Ja | |
SDK für 2.x JavaScript | Nein | Unterstützt eine maximale Anzahl von Wiederholungsversuchen, exponentielles Backoff mit Jitter und eine Option für eine benutzerdefinierte Methode für Wiederholungs-Backoff. |
SDK für Kotlin | Ja | |
SDK for .NET 3.x | Ja | |
SDK for PHP 3.x | Ja | |
SDK for Python (Boto3) |
Ja | |
SDK for Ruby 3.x | Ja | |
SDK für Rust | Ja | |
SDK für Swift | Ja | |
Tools für PowerShell | Ja |