Come posso risolvere gli errori di timeout intermittenti in Amazon DynamoDB?

Ultimo aggiornamento: 19/08/2022

Quando utilizzo AWS SDK per interagire con Amazon DynamoDB, visualizzo errori di timeout di connessione o timeout della richiesta intermittenti, come i seguenti:

  • Unable to execute HTTP request: Connect to dynamodb.xx-xxxx-x.amazonaws.com:443 [dynamodb.us-east-1.amazonaws.com/x.xxx.xxx.x] failed: connect timed out (Impossibile eseguire la richiesta HTTP: connessione a dynamodb.xx-xxxx-x.amazonaws.com:443 [dynamodb.us-east-1.amazonaws.com/x.xxx.xxx.x] non riuscita: connessione scaduta)
  • com.amazonaws.SdkClientException: Unable to execute HTTP request (com.amazonaws.sdkClientException: impossibile eseguire la richiesta HTTP). La richiesta non è stata completata prima della configurazione del timeout della richiesta

Risoluzione

Quando effettui una chiamata API a DynamoDB, si verifica quanto segue:

  1. L'applicazione risolve l'endpoint DynamoDB utilizzando il server DNS locale.
  2. Dopo aver ottenuto l'indirizzo IP dell'endpoint DynamoDB, l'applicazione si connette all'endpoint ed effettua la chiamata API.
  3. L'endpoint instrada questa chiamata a uno dei nodi di backend.

Durante questo processo, la chiamata API potrebbe causare in modo intermittente errori di timeout della connessione o timeout della richiesta. Nella maggior parte dei casi, l'errore di timeout deriva da un errore lato client che si verifica prima che la chiamata API raggiunga DynamoDB a causa di problemi di rete o configurazioni SDK errate sul lato client.

Per risolvere questi errori, completa le seguenti operazioni:

  • Regola i parametri del client HTTP dell’SDK in base al tuo caso d'uso e al contratto di servizio dell'applicazione. Oltre a ottimizzare connectionTimeout, requestTimeout e maxRetries, puoi ottimizzare anche clientExecutionTimeout e socketTimeout. Il parametro ClientExecutionTimeout indica il tempo massimo totale consentito impiegato per eseguire un'operazione end-to-end e ricevere la risposta desiderata, inclusi eventuali nuovi tentativi che potrebbero essere richiesti. Assicurati di impostare questo valore in modo che sia maggiore del singolo valore requestTimeout. Il parametro SocketTimeout indica il tempo massimo di attesa del client HTTP per ricevere una risposta da una connessione TCP già stabilita. Per ulteriori informazioni, consulta Ottimizzazione delle impostazioni delle richieste HTTP dell’SDK Java AWS per le applicazioni Amazon DynamoDB che riconoscono la latenza.
  • Assicurati di inviare traffico costante o di riutilizzare le connessioni. Se non si effettui richieste, considera un client che invii traffico fittizio a una tabella DynamoDB. In alternativa, puoi riutilizzare le connessioni client o utilizzare il pool di connessioni. Queste tecniche mantengono calde le cache interne, il che aiuta a ridurre la latenza ed evitare errori di timeout sul lato client. Per un esempio, consulta Riutilizzo delle connessioni con keep-alive in Node.js.
  • Visualizza i log di flusso del cloud privato virtuale Amazon (Amazon VPC) per verificare se c'era traffico in entrata verso DynamoDB durante il periodo di tempo in cui si è verificato l'errore. Puoi anche utilizzare AWS X-Ray per monitorare la latenza della tua applicazione.

Questo articolo è stato utile?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?