Perché la metrica Lambda IteratorAge aumenta per il mio flusso DynamoDB?
Quando AWS Lambda consuma record dai flussi Amazon DynamoDB, vedo un picco nella metrica Lambda IteratorAge.
Breve descrizione
La metrica Lambda ](https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html#events-dynamodb-metrics)IteratorAge[ misura la latenza tra il momento in cui un record viene aggiunto a un flusso DynamoDB e il momento in cui la funzione elabora quel record. Un aumento di IteratorAge significa che Lambda non elabora in modo efficiente i record scritti nel flusso DynamoDB.
IteratorAge può aumentare per i motivi seguenti:
- Errori di invocazione
- Presenza di limitazioni
- Basso throughput Lambda
Risoluzione
Errori di invocazione
Lambda è progettata per elaborare batch di record in sequenza e quindi riprovare in caso di errori. Se una funzione restituisce un errore ogni volta che viene richiamata, Lambda continua a riprovare fino alla scadenza dei record. Oppure Lambda continua a riprovare fino a superare l'età massima che hai configurato nello strumento di mappatura dell'origine degli eventi. Il periodo di conservazione dei flussi DynamoDB è di 24 ore. Lambda continua a riprovare per un massimo di un giorno, dopodiché passa al batch di record successivo.
Per verificare se la causa principale del picco di IteratorAge è un errore di invocazione, controlla la metrica degli errori Lambda. Se la causa è un errore di invocazione, controlla i log Lambda per eseguire il debug dell'errore, quindi modifica il codice. Quando gestisci l'errore, assicurati di includere nel codice un'istruzione try-catch.
Lo ](https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html#services-dynamodb-eventsourcemapping)strumento di mappatura dell'origine degli eventi[ ha tre parametri che possono aiutarti a prevenire i picchi di IteratorAge:
- **Nuovi tentativi:**questo parametro imposta il numero massimo di tentativi di Lambda quando la funzione restituisce un errore.
- **Età massima del record:**questo parametro imposta l'età massima di un record che Lambda invia alla tua funzione. Utilizza questo parametro per escludere i record troppo vecchi.
- **Dividi il batch in caso di errore:**questo parametro ti consente di riprovare con batch più piccoli per isolare i record errati e risolvere i problemi di timeout. Quando la funzione restituisce un errore, divide il batch prima di riprovare.
Nota: La suddivisione di un batch non viene conteggiata ai fini della quota di nuovi tentativi.
Per conservare gli eventi scartati, configura lo strumento di mappatura dell'origine degli eventi in modo che invii i dettagli sui batch non riusciti a una coda Amazon Simple Queue Service (Amazon SQS). In alternativa, configura lo strumento di mappatura dell'origine degli eventi in modo che invii i dettagli a un argomento di Amazon Simple Notification Service (Amazon SNS). A tale scopo, utilizza il parametro Destinazione in caso di errore.
Presenza di limitazioni
Poiché i record degli eventi vengono letti in sequenza, se la chiamata corrente è limitata le funzioni Lambda non possono passare al record successivo.
Quando usi i flussi DynamoDB, non configurare più di due utenti sulla stessa partizione dei flussi. Se hai più di due lettori su una partizione, la tua funzione potrebbe venire limitata. Per ulteriori informazioni, consulta Lettura ed elaborazione di un flusso.
Se ti occorrono più di due lettori su una singola partizione dei flussi, usa un modello fanout. Configura la funzione Lambda in modo che consumi i record del flusso, quindi inoltrali ad altre funzioni Lambda downstream o a flussi Amazon Kinesis. Per Lambda, utilizza un limite di simultaneità per evitare limitazioni.
Throughput Lambda
Durata del runtime
Se la metrica ](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-metrics.html#monitoring-metrics-performance)Duration[ di una funzione Lambda è elevata, il throughput della funzione diminuisce e IteratorAge aumenta.
Per ridurre la durata di esecuzione della funzione, usa uno o entrambi i metodi seguenti:
- Aumenta la quantità di memoria allocata alla funzione.
- Ottimizza il codice della funzione in modo che richieda meno tempo per elaborare i record.
Esecuzioni Lambda simultanee
Il numero massimo di esecuzioni Lambda simultanee viene calcolato come segue:
Esecuzioni simultanee = numero di partizioni x batch simultanei per partizione (fattore di parallelizzazione)
- **Numero di partizioni:**in un flusso DynamoDB, c'è una mappatura uno a uno tra il numero di partizioni della tabella e il numero di partizioni dei flussi. Le dimensioni della tabella e il throughput della tabella determinano il numero di partizioni. Ogni partizione della tabella può servire fino a 3.000 unità di richiesta di lettura o 1.000 unità di richiesta di scrittura oppure la combinazione lineare di entrambe. Per aumentare la simultaneità, aumenta la capacità allocata alla tabella per aumentare il numero di partizioni.
- **Batch simultanei per partizione (fattore di parallelizzazione):**puoi configurare il numero di batch simultanei per partizione nello strumento di mappatura dell'origine degli eventi. Il valore predefinito è 1 e può essere aumentato fino a 10.
Ad esempio, se la tabella ha 10 partizioni e i batch simultanei per partizione sono impostati su 5, è possibile avere fino a 50 esecuzioni simultanee.
Nota: per elaborare la modifica a livello di elemento nell'ordine corretto in un dato momento, gli elementi con la stessa chiave di partizione vengono inseriti nello stesso batch. Assicurati che la chiave di partizione della tua tabella abbia un'elevata cardinalità e che il tuo traffico non generi chiavi sovrautilizzate. Ad esempio, se imposti il valore Batch simultanei per partizione su 10 e la destinazione del traffico di scrittura è una singola chiave di partizione, potrai avere una sola esecuzione simultanea per partizione.
Dimensione del batch
Per aiutarti ad aumentare il throughput Lambda, regola il valore della dimensione del batch. Se elabori un numero basso di record per batch, il flusso viene elaborato più lentamente. Se hai un numero elevato di record per batch, la durata di esecuzione della funzione potrebbe aumentare. Per trovare il valore migliore per il tuo caso d'uso, è consigliabile testare la dimensione del batch con più valori.
Se la durata di runtime della funzione è indipendente dal numero di record in un evento, l'aumento della dimensione del batch della funzione riduce l'età dell'iteratore della funzione.
Informazioni correlate
Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 6 mesi fa
- AWS UFFICIALEAggiornata 3 anni fa
- AWS UFFICIALEAggiornata 2 anni fa