Come posso risolvere i problemi di latenza elevata nelle richieste di API Gateway integrate con Lambda?

5 minuti di lettura
0

Quando invio richieste a un'API Gateway Amazon API integrata con una funzione AWS Lambda, i tempi di risposta sono lenti. Come posso determinare la causa della latenza elevata?

Risoluzione

Quando l'endpoint di un'API integrata con una funzione Lambda impiega troppo tempo per inviare risposte a un client, è necessario risolvere il problema della latenza elevata. Esamina i parametri di API Gateway per scoprire quale sezione del flusso di richieste/risposte causa la latenza elevata. Dopo aver determinato la causa della latenza elevata, puoi cercare un modo per ridurre i ritardi.

Filtra i parametri di CloudWatch per esaminare quelli relativi alla latenza sull'API

Per identificare la sezione del flusso di richieste/risposte che causa la latenza elevata, inizia dai seguenti passaggi:

  1. Osserva la latenza del client dopo l'invio di una richiesta all'API.
  2. Una volta annotata la latenza complessiva, apri la console Amazon CloudWatch. Nel pannello di navigazione a sinistra, scegli Metrics (Parametri), All metrics (Tutti i parametri). Nella casella di ricerca dei parametri, inserisci APIGateway. Dai risultati della ricerca, scegli API Gateway, ApiID.
  3. Nell'elenco delle API, filtra l'API specificata utilizzando l'ID o il nome dell'API. Dopo aver filtrato, seleziona le caselle di controllo IntegrationLatency e Latency.
    Nota: l'ID e il nome dell'API sono disponibili nella console API Gateway.
  4. Apri la scheda Graphed metrics (Parametri con grafici). In Statistic (Statistica), scegli Maximum (Massimo). Per Period (Periodo), scegli 1 minute (1 minuto). Sopra il grafico, seleziona il periodo di tempo Custom (Personalizzato). Scegli l'intervallo di tempo durante il quale il client ha registrato una latenza elevata.
  5. Esamina entrambi i parametri IntegrationLatency e Latency. Quando questi parametri hanno valori elevati, prendi nota di valori e timestamp. I valori possono spiegare la causa dell'elevata latenza.

Confronta i parametri per identificare la causa della latenza elevata

Continua a esaminare i parametri relativi al flusso di richieste/risposte per individuare la causa della latenza elevata:

  1. Confronta il parametro Latency di API Gateway con il valore di latenza complessivo osservato sul client.
    Ad esempio, un'API ha un parametro Latency con un valore Maximum approssimativamente uguale al valore Max Latency del client. Questi valori suggeriscono che il ritardo massimo nel flusso di richiesta/risposta corrisponde al tempo impiegato da API Gateway per elaborare le richieste. Il tempo di elaborazione di API Gateway include il tempo impiegato per inviare richieste a Lambda, attendere le risposte da Lambda e inviare risposte a un client.
  2. Confronta il parametro IntegrationLatency con il parametro Latency per l'API.
    Ad esempio, il parametro IntegrationLatency è approssimativamente uguale al parametro Latency. Questi valori indicano che la latenza dell'API è causata principalmente dalle richieste di back-end inviate a Lambda che impiegano più tempo per la risposta. Il parametro IntegrationLatency include il tempo che intercorre tra il momento in cui API Gateway invia una richiesta e quello in cui API Gateway riceve una risposta dal back-end
  3. Quando il parametro IntegrationLatency è basso rispetto al parametro Latency per l'API, i tempi di risposta del back-end sono bassi. In questo scenario, l'elaborazione delle richieste o delle risposte dell'API richiede più tempo.
    Ad esempio, i modelli di mappatura configurati nell'API o in un sistema di autorizzazione API Gateway Lambda potrebbero creare ritardi.
  4. Quando il parametro Latency per l'API è molto inferiore alla latenza osservata sul client, il percorso potrebbe causare ritardi. Esamina il percorso tra il client e API Gateway per confermare se ci sono endpoint intermedi che stanno aggiungendo ritardi.
    Ad esempio, le connessioni VPN o i proxy privati potrebbero creare ritardi.

Visualizza i parametri Lambda per identificare la causa di un parametro IntegrationLatency elevato

Infine, concentrati sui parametri Lambda relativi al flusso di richieste/risposte per individuare la causa di un parametro IntegrationLatency elevato:

  1. Controlla il parametro Duration della funzione Lambda per verificare se il tempo di esecuzione della funzione Lambda è più lungo. Se il tempo di esecuzione della funzione Lambda è aumentato, esamina il log di CloudWatch per individuare la sezione di codice che causa una latenza elevata. Per impostazione predefinita, le funzioni Lambda registrano le istruzioni START, END e REPORT nei log di CloudWatch. Aggiungi istruzioni di registrazione personalizzate in ogni sezione logica del codice della funzione Lambda per ottenere log dettagliati di CloudWatch.
  2. Se il parametro Duration non è cambiato presso il client durante il periodo di latenza elevata, determina se il tempo di inizializzazione è aumentato. Il tempo di inizializzazione in una funzione Lambda equivale al tempo impiegato per configurare l'ambiente di esecuzione per elaborare una richiesta. Le richieste provenienti da API Gateway potrebbero richiedere un nuovo ambiente per l'elaborazione. Questa impostazione viene effettuata tramite Lambda. In genere, il codice presente all'esterno del gestore della funzione Lambda viene eseguito durante il periodo di inizializzazione. Il completamento di un codice che richiede più tempo può causare ritardi nei tempi complessivi di risposta al client.
    Nota: il tempo di inizializzazione è noto come INIT o avvio a freddo.
  3. Verifica l'eventuale aumento di Duration del tempo di inizializzazione verificando le istruzioni del report nei log delle funzioni Lambda. Il tempo di inizializzazione elevato per alcune richieste può causare un aumento del parametro IntegrationLatency per API Gateway.

Informazioni correlate

Utilizzo dei parametri per API HTTP

Dimensioni e parametri di Gateway Amazon API

Monitoraggio dell'esecuzione delle API WebSocket con parametri CloudWatch

Visualizzazione dei parametri nella console CloudWatch

Ciclo di vita dell'ambiente di esecuzione Lambda