Wie behebe ich zeitweise auftretende Timeoutfehler in Amazon DynamoDB?

Letzte Aktualisierung: 19.08.2022

Wenn ich AWS SDK für die Interaktion mit Amazon DynamoDB verwende, sehe ich zeitweise auftretende Verbindungs-Timeout- oder Anforderungs-Timeout-Fehler, wie zum Beispiel die folgenden:

  • HTTP-Anforderung konnte nicht ausgeführt werden: Verbindung mit dynamodb.xx-xxxx-x.amazonaws.com:443 [dynamodb.us-east-1.amazonaws.com/x.xxx.xxx.x] fehlgeschlagen: Verbindungszeitlimit abgelaufen
  • com.amazonaws.SdkClientException: Die HTTP-Anforderung konnte nicht ausgeführt werden. Anforderung wurde vor der Konfiguration des Anforderungs-Timeouts nicht abgeschlossen

Auflösung

Wenn Sie einen API-Aufruf an DynamoDB durchführen, passiert Folgendes:

  1. Ihre Anwendung löst den DynamoDB-Endpunkt mithilfe Ihres lokalen DNS-Servers auf.
  2. Nachdem die IP-Adresse des DynamoDB-Endpunkts abgerufen wurde, stellt die Anwendung eine Verbindung zum Endpunkt her und führt den API-Aufruf durch.
  3. Der Endpunkt leitet diesen Aufruf an einen der Backend-Knoten weiter.

Während dieses Vorgangs kann der API-Aufruf zeitweise zu Verbindungs-Timeout- oder Anforderungs-Timeoutfehlern führen. In den meisten Fällen resultiert der Timeoutfehler aus einem clientseitigen Fehler, der aufgrund von Netzwerkproblemen oder falschen SDK-Konfigurationen auf der Clientseite auftritt, bevor der API-Aufruf DynamoDB erreicht.

Gehen Sie wie folgt vor, um diese Fehler zu beheben:

  • Passen Sie die SDK-HTTP-Client-Parameter entsprechend Ihrem Anwendungsfall und Anwendungs-SLA an. Zusätzlich zum Optimieren von connectionTimeout, RequestTimeout und MaxRetries können Sie auchClientExecutionTimeout und SocketTimeout optimieren. Der Parameter ClientExecutionTimeout gibt die maximal zulässige Gesamtzeit an, die für die Ausführung eines End-to-End-Vorgangs und das Empfangen der gewünschten Antwort aufgewendet wurde, einschließlich eventuell auftretender Wiederholungen. Stellen Sie sicher, dass dieser Wert größer als der individuelle requestTimeout-Wert ist. Der Parameter socketTimeout gibt die maximale Zeit an, die der HTTP-Client auf den Empfang einer Antwort von einer bereits bestehenden TCP-Verbindung wartet. Weitere Informationen finden Sie unter Optimieren der HTTP-Anforderungseinstellungen für AWS Java SDK für latenzfähige Amazon-DynamoDB-Anwendungen.
  • Stellen Sie sicher, dass Sie ständigen Datenverkehr senden oder Verbindungen wiederverwenden. Wenn Sie keine Anforderungen stellen, sollten Sie erwägen, dass der Client-Dummy-Datenverkehr an eine DynamoDB-Tabelle sendet. Sie können auch Clientverbindungen wiederverwenden oder das Verbindungspooling verwenden. Diese Techniken halten interne Caches warm, was dazu beiträgt, die Latenz zu reduzieren und Timeout-Fehler auf Clientseite zu vermeiden. Weitere Informationen finden Sie beispielsweise unter Wiederverwenden von Verbindungen mit Keep-Alive in Node.js.
  • Sehen Sie sich Ihre Amazon-Virtual-Private-Cloud-Flow-Protokolle (Amazon VPC) an, um zu überprüfen, ob während des Zeitraums, in dem Sie den Fehler erhalten haben, eingehenden Datenverkehr zu DynamoDB vorhanden ist. Sie können AWS X-Ray auch verwenden, um die Latenz Ihrer Anwendung zu überwachen.

War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?