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
Das Wiederholungsverhalten umfasst Einstellungen, die festlegen, wie SDKs versucht wird, die Wiederherstellung nach Fehlern durchzuführen, die auf Anfragen zurückzuführen sind AWS-Services.
Konfigurieren Sie diese Funktionalität wie folgt:
retry_mode
- geteilt AWSconfig
DateieinstellungAWS_RETRY_MODE
- Umgebungsvariableaws.retryMode
- JVM Systemeigenschaft: Nur Java/Kotlin-
Gibt an, wie das SDK Entwicklertool versucht, es erneut zu versuchen.
Standardwert: Dieser Wert ist spezifisch für IhrenSDK. Suchen Sie in Ihrem spezifischen SDK Handbuch oder in Ihrer SDK Codebasis nach dem Standardwert
retry_mode
.Zulässige Werte:
-
standard
— (Empfohlen) Der empfohlene Satz von Wiederholungsregeln für AWS SDKs. Dieser Modus umfasst eine Reihe von Standardfehlern, die wiederholt werden, und passt die Anzahl der Wiederholungsversuche 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 Sie SDK (überprüfen Sie Ihren spezifischen SDK Leitfaden oder Ihre SDK Codebasis).
-
max_attempts
- geteilt AWSconfig
DateieinstellungAWS_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ürmax_attempts
Sie spezifischen Standardwert SDK (den Standardwert finden Sie in Ihrer SDK spezifischen SDK Anleitung oder in Ihrer Codebasis). -
Falls
retry_mode
jastandard
— Führt drei Versuche durch. -
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 Unterbrechungen, um zu verhindern, dass bei Ausfällen erneut SDK versucht wird. | Unterstützt das Unterbrechen von Stromkreisen, um zu verhindern, dass es bei Ausfällen erneut versucht. SDK |
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. In diesem Fall ist eine Ressource 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 egion-and-table R-Paar hat. Wenn Sie bei der Verwendung des adaptive
Modus eine unerwartete Latenz feststellen, finden Sie weitere Informationen in den spezifischen AWS Dokumentationsleitfaden für den Dienst, den Sie verwenden.
Einzelheiten zur Implementierung im Wiederholungsmodus
Das Tool AWS SDKsverwenden Sie Token-Bucketsadaptive
Wiederholungsmodus) wie schnell Anfragen gesendet werden sollen. Zwei Token-Buckets werden verwendetSDK: 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 Wiederholungsversuche vorübergehend deaktiviert werden SDK sollen, 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, SDK wird die Anfrage nicht erneut versucht.
-
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. SDKMöglicherweise stehen Ihnen 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
:
Dieser Schritt sendet die Anfrage an AWS. Die meisten AWS SDKsverwenden eine HTTP Bibliothek, die Verbindungspools verwendet, um eine bestehende Verbindung wiederzuverwenden, wenn HTTP Sie eine Anfrage stellen. 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:
-
Der HTTP Statuscode.
-
Der vom Dienst zurückgegebene Fehlercode.
-
Verbindungsfehler, definiert als jeder Fehler, der vom Dienst empfangen wird und SDK bei dem keine HTTP Antwort vom Dienst empfangen wird.
Vorübergehende Fehler (HTTPStatuscodes 400, 408, 500, 502, 503 und 504) und Drosselungsfehler (HTTPStatuscodes 400, 403, 429, 502, 503 und 509) können alle potenziell wiederholt werden. SDKDas 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 meistenSDKs. Weitere Informationen finden Sie in Ihrer spezifischen SDK Anleitung oder Ihrem Quellcode.
Kompatibilität mit AWS SDKs
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 unterstützt von AWS SDK for Java und die AWS SDK for Kotlin nur.
SDK | Unterstützt | Notizen oder weitere Informationen |
---|---|---|
AWS CLI v2 | Ja | |
SDKfür C++ | Ja | |
SDKfür Go V2 (1.x) |
Ja | |
SDKfür Go 1.x (V1) | Nein | |
SDKfür Java 2.x | Ja | |
SDKfür Java 1.x | Ja | JVMSystemeigenschaften: com.amazonaws.sdk.maxAttempts anstelle von verwendenaws.maxAttempts ; com.amazonaws.sdk.retryMode anstelle von aws.retryMode verwenden. |
SDKfür JavaScript 3.x | Ja | |
SDKfü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 Backoffwiederholungen. |
SDKfür Kotlin | Ja | |
SDKfür. NET3.x | Ja | |
SDKfür 3.x PHP | Ja | |
SDKfür Python (Boto3) |
Ja | |
SDKfür Ruby 3.x | Ja | |
SDKfür Rust | Ja | |
SDKfür Swift | Ja | |
Tools für PowerShell | Ja |