Das AWS SDK implementiert eine automatische Wiederholungslogik mit Exponential Backoff. Boto3 bietet drei Wiederholungsverarbeitungsmodi.
Das Überprüfen des GitHub-Repositorys von botocore zeigt, dass es im Februar 2020 standardmäßig und anpassungsfähig ist. Hinzugefügte und frühere Implementierungen werden als Legacy bezeichnet.
Add support for new retry modes #1972
Aus Kompatibilitätsgründen ist der Standard Legacy und die Funktionen wurden in Standard / Adaptiv hinzugefügt Um es zu verwenden, müssen Sie den Wiederholungsverarbeitungsmodus explizit ändern.
Instanziieren Sie das Botocore-Konfigurationsobjekt und senden Sie die Konfigurationsinformationen an den Client Sie können es bestehen. Die verfügbaren Optionen sind "max_attempts" und "mode". Die standardmäßige maximale Anzahl von Wiederholungsversuchen variiert je nach Wiederholungsverarbeitungsmodus. Kann durch max_attempts angepasst werden.
import boto3
from botocore.config import Config
config = Config(
retries = {
'max_attempts': 10,
'mode': 'standard'
}
)
ec2 = boto3.client('ec2', config=config)
Legacy retry mode Dies ist der Standardmodus, der von Boto3-Clients verwendet wird. Der zur Berechnung der Backoff-Zeit verwendete Faktor ist 2. Der v1-Wiederholungshandler (https://github.com/boto/botocore/blob/master/botocore/retryhandler.py) wird verwendet. Es gibt eine begrenzte Anzahl von Fehlern / Ausnahmen für Wiederholungsversuche.
Standard retry mode Wiederholungsregeln sind mit mehrsprachigen AWS SDKs und konsistenter Logik standardisiert. Es behandelt mehr Drosselungs- / Begrenzungsfehler und Ausnahmen als der Legacy-Modus. Der Faktor, der zur Berechnung der Backoff-Zeit verwendet wird, beträgt 2, wie im Legacy-Modus, jedoch mit maximal 20 Sekunden. Der v2-Wiederholungshandler (https://github.com/boto/botocore/tree/master/botocore/retries) wird verwendet.
legacy | standard | |
---|---|---|
Standardmäßige maximale Anzahl von Versuchen | 5 | 3 |
Umgang mit vorübergehenden Verbindungsfehlern | ConnectionError ConnectionClosedError ReadTimeoutError EndpointConnectionError |
RequestTimeout RequestTimeoutException PriorRequestNotComplete ConnectionError HTTPClientError |
throttling/Nicht reagieren, um Fehler und Ausnahmen einzuschränken | Throttling ThrottlingException ThrottledException RequestThrottledException ProvisionedThroughputExceededException |
Throttling ThrottlingException ThrottledException RequestThrottledException TooManyRequestsException ProvisionedThroughputExceededException TransactionInProgressException RequestLimitExceeded BandwidthLimitExceeded LimitExceededException RequestThrottled SlowDown EC2ThrottledException |
Wiederholen Sie den Vorgang nach Statuscode | 429/500/502/503/504/509 usw. | 500/502/503/504 |
Formel zur Berechnung der Verzögerungszeit | rand(0, 1) * (2 ^ (attempts - 1)) | min(rand(0, 1) * 2 ^ attempt, 20) |
Adaptive retry mode Clientseitig mit Token-Bucket-Algorithmus zusätzlich zur Standardmodus-Funktionalität Automatische Ratenbegrenzungsfunktion und Fehler- / Ausnahme- / HTTP-Statuscode auf der AWS-Serviceseite für jeden erneuten Versuch Die Möglichkeit, Ratenbegrenzungsvariablen basierend auf zu ändern, wurde hinzugefügt. Eine flexible Neuausführung kann auf der Clientseite entsprechend dem Fehlerinhalt durchgeführt werden. ** Dies ist ein experimenteller Modus, daher können sich seine Funktionen und sein Verhalten in Zukunft ändern. ** **.
Retries - Boto3 Docs https://boto3.amazonaws.com/v1/documentation/api/latest/guide/retries.html
das ist alles. Ich bin froh, wenn Sie es als Referenz verwenden können.
Recommended Posts