Por que minha métrica Iteratorage do Lambda está aumentando e como faço para diminuí-la?

6 minuto de leitura
0

Vejo um aumento (ou picos) na métrica IteratorAge da minha função do AWS Lambda.

Breve descrição

A idade do iterador de uma função do Lambda aumenta quando a função não consegue processar com eficiência os dados gravados nos fluxos que invocam a função. Para diminuir a métrica IteratorAge da função, você deve aumentar o throughput do processamento do fluxo.

Os seguintes fatores influenciam a métrica IteratorAge de uma função:

Leia este artigo para entender como cada fator afeta a idade do iterador. Em seguida, reconfigure sua função ou fluxo de dados para diminuir a idade do iterador da função com base no seu caso de uso. Para mais informações sobre invocações do Lambda, consulte Trabalhar com métricas de funções do AWS Lambda.

Observação: Para fluxos do Amazon DynamoDB, consulte Por que a métrica do Lambda IteratorAge está aumentando para meus Amazon DynamoDB Streams?

Resolução

Diminuir a duração do runtime da sua função

Uma duração de runtime alta aumenta a idade do iterador de uma função. Diminuir a duração aumenta o throughput de uma função, o que diminui a idade do iterador de uma função.

Para diminuir a duração do runtime da sua função, siga um destes procedimentos ou ambos:

1.    Aumente a quantidade de memória alocada para a função. O Lambda aloca a potência da CPU em proporção à memória.

2.    Otimize seu código de função para que seja necessário menos tempo para processar registros.

Observação: Para mais informações sobre a duração e o desempenho do seu Lambda, consulte Uso do AWS Lambda com a AWS X-Ray.

Aumentar o tamanho do lote do seu fluxo

Se a duração do runtime da sua função for independente do número de registros em um evento, aumentar o tamanho do lote da função diminuirá a idade do iterador.

Para aumentar o tamanho do lote da sua função, siga as instruções em Configuração de um fluxo como fonte de eventos.

**Observação:**Se a duração da sua função depender do número de registros em um evento, aumentar o tamanho do lote da função não diminui a idade do iterador. Para mais informações, consulte Trabalhar com fluxos.

Verificar se sua função processa corretamente os erros de invocação

Erros de invocação podem fazer com que uma função do Lambda demore mais para processar um evento ou processar o mesmo evento mais de uma vez. Como os registros de eventos são lidos sequencialmente, uma função não pode progredir para registros posteriores se um lote de registros causar um erro toda vez que for repetido. Nessa situação, a idade do iterador aumenta linearmente à medida que esses registros envelhecem.

Se sua função retornar um erro, o Lambda tentará continuamente o lote novamente. As repetições em lote continuam até que o processamento seja bem-sucedido, o máximo de tentativas seja atingido ou os dados expirem do fluxo.

Verifique se sua função manipula os registros gravados no fluxo de maneira elegante. Conforme você desenvolve sua função, registrar e instrumentar seu código pode ajudá-lo a diagnosticar erros.

Para mais informações, consulte o seguinte:

Gerenciar sua ocorrência de aceleração

Como os registros de eventos são lidos sequencialmente, uma função não pode avançar para o próximo registro se a invocação atual for limitada. Nessa situação, a idade do iterador aumentará enquanto o Lambda repete as invocações controladas.

Para gerenciar o controle da sua função do Lambda, solicite um aumento de simultaneidade ou analise problemas de desempenho na função.

Distribuir uniformemente os registros no fluxo

As chaves de partição em cada registro de dados determinam os fragmentos no fluxo em que os registros são gravados. Um aumento no tráfego para seu fluxo com registros contendo a mesma chave de partição faz com que um fragmento receba um número desproporcional de registros. Isso resulta em um fragmento quente.

As métricas aprimoradas em nível de fragmento do Kinesis permitem que você verifique a taxa de ingestão em cada fragmento e solucione problemas em um fragmento quente.

Para mais informações, consulte Under the hood: scaling your Kinesis data streams(Nos bastidores: dimensionamento dos fluxos de dados do Kinesis).

Aumentar a contagem de fragmentos do seu fluxo

Um baixo número de fragmentos em um fluxo aumenta a idade do iterador de uma função. Aumentar o número de fragmentos em um fluxo aumenta o número de funções simultâneas do Lambda que consomem do seu fluxo, o que diminui a idade do iterador de uma função.

Para aumentar a contagem de fragmentos do seu fluxo, siga as instruções em Refragmentar um fluxo.

Observação: A divisão de fragmentos não tem um efeito imediato na idade do iterador de uma função. Os registros existentes permanecem nos fragmentos nos quais foram gravados. Esses fragmentos devem recuperar sua lista de pendências antes que a idade do iterador para os fragmentos diminua. Para mais informações, consulte Trabalhar com fluxos.

Aumente o throughput de processamento de fluxo testando diferentes configurações de fator de paralelização e usando a distribuição aprimorada

Para testar as configurações do fator de paralelização

Você pode melhorar o processamento do fluxo configurando o fator de paralelização da função para aumentar o número de invocações simultâneas do Lambda para cada fragmento de um fluxo. Isso é feito especificando o número de lotes simultâneos que o Lambda pesquisa de cada fragmento. Isso é configurado na configuração da fonte do evento.

Se seu fator de paralelização estiver definido como 10, você poderá ter até 50 invocações simultâneas do Lambda para processar cinco fragmentos de dados do Kinesis.

Por exemplo, execuções simultâneas = número de fragmentos x lotes simultâneos por fragmento (fator de paralelização).

Para mais informações, consulte Usar o AWS Lambda com o Amazon Kinesis e Novos controles de escalabilidade do AWS Lambda para origens de eventos do Kinesis e Amazon DynamoDB.

Observação: Ao aumentar o número de lotes simultâneos por fragmento, o Lambda valida o processamento em ordem no nível da chave de partição.

Para usar uma distribuição aprimorada

Você pode reduzir a latência e aumentar o throughput de leitura criando um consumidor de fluxo de dados com distribuição aprimorada. Os consumidores do fluxo obtêm uma conexão dedicada com cada fragmento que não afeta outros aplicativos que também estão lendo o fluxo.

Para mais informações, consulte Desenvolver consumidores personalizados com taxa de transferência dedicada (distribuição avançada) e Usar o AWS Lambda com o Amazon Kinesis.

**Observação:**É uma boa prática usar a distribuição aprimorada se você tiver muitos aplicativos lendo os mesmos dados ou se estiver reprocessando fluxo com registros grandes.

Informações relacionadas

Práticas recomendadas para trabalhar com funções do Lambda

Mapeamentos da origem do evento do Lambda

Escalabilidade de funções do AWS Lambda

Refragmentação, escalonamento e processamento paralelo

Configuração do fluxo de dados e da função

AWS OFICIAL
AWS OFICIALAtualizada há um ano