Como testar o desempenho das funções do AWS Lambda?

14

O custo do AWS Lambda depende do tempo em que uma função é executada e, em certa medida, do espaço ocupado pela memória. Ter funções que terminam mais rapidamente e consomem menos memória pode economizar bastante dinheiro. Especialmente quando essa função é executada frequentemente.

Como uma função Lambda do Node.js pode ser ajustada para velocidade e espaço reduzido na memória para economizar em custos?

Existem outros aspectos para o Lambda que são vantajosos para melhorar?

Evgeny
fonte

Respostas:

6

A resposta do Dawny33 é boa, mas eu começaria mais cedo no processo de desenvolvimento.

Observar o ambiente da nuvem para garantir que suas funções se comportem conforme o esperado (incluindo as funções de "produção", que podem operar com um conjunto de dados diferente) é crucial, pois pode revelar coisas impossíveis de reproduzir localmente ou com um conjunto de dados de teste.

No entanto, eu diria que esse teste de desempenho que você faz com o objetivo de otimização deve começar diretamente da máquina do desenvolvedor. Ou, pelo menos, de algum ambiente local antes de enviar para a nuvem.

A razão pela qual digo isso é que, embora o AWS Lambdas seja incrível em muitos pontos, o fato de você não ter um controle total no servidor limitará suas habilidades de instrumentação. Não estou dizendo que a instrumentação é impossível quando não há servidor, mas tente descobrir quantas interrupções de CPU você tem (e quantas são causadas pelo seu código) apenas por diversão;)

Portanto, o que eu aconselho, e isso na verdade não se limita ao servidor, é iniciar o perfil mais cedo. A criação de perfil do NodeJS pode ser feita com muitas ferramentas diferentes; NewRelic, dynatrace e AppDynamic são alguns dos grandes players. Também existe um player menor, alguns deles são apenas um pacote NPM para instalar (como o Nodefly). Também é possível executar o NodeJS sem nenhuma ferramenta adicional, pois existe um criador de perfil incorporado no mecanismo V8. Esta documentação do NodeJS o ajudará a começar.

Qualquer que seja a ferramenta escolhida, você deseja instalá-la localmente e coletar dados de criação de perfil. Isso pode envolver a execução de um agente ou a inclusão de um pacote no seu package.json. As instruções da sua ferramenta lhe dirão como instalá-lo. Um bom profiler permitirá que você saiba quanta memória e CPU você usa. Ferramentas melhores fornecerão informações sobre quantas chamadas remotas foram feitas e quanto tempo levaram.

Use os dados de criação de perfil fornecidos pela ferramenta para identificar gargalos e resolvê-los. Não há limite para a criação de perfis. Algumas pessoas (loucas?) Analisam as chamadas do sistema de sua função mais crítica. Pode ser necessário fazer esse tipo de coisa se você deseja economizar nanossegundos de sua função (mas talvez o AWS Lambda talvez não seja a melhor opção para começar).

Também é importante notar que, neste momento, não mencionei nada específico do AWS Lambda. Isso ocorre porque suas otimizações provavelmente não serão específicas do AWS Lambda (afinal, em sem servidor, você não deve se preocupar com o servidor / ambiente).

Certifique-se de que não apenas seu código funcione, mas funcione da maneira que você espera. Não otimize demais, mas mantenha um olho crítico no uso da CPU e da memória. Uma matriz de 2 MB deve realmente crescer para 10 MB quando você a classifica? Provavelmente não.

Em seguida, você poderá usar as ferramentas mencionadas por Dawny33, ou algumas outras ferramentas, para confirmar que suas funções executam da mesma forma quando implantadas no Lambda. No entanto, você já terá um nível muito alto de confiança em sua função e precisará validar apenas se eles se comportam corretamente, sem o perfil completo deles.

Alexandre
fonte
Sim, é importante, mas como isso pode ser feito? Existem algumas ferramentas, práticas, o que exatamente um desenvolvedor pode fazer? Não vejo nada disso mencionado nesta resposta: /
Evgeny
Eu disse isso através de criação de perfil e instrumentação. O NewRelic APM é um exemplo, mas esse é apenas um dos criadores de perfil disponíveis. Instale o criador de perfil, execute sua função, otimize. Não importa se ele será executado no AWS Lambda, a menos que você tenha um problema específico para o AWS. Vou atualizar minha resposta com base no seu comentário.
Alexandre
Alguns exemplos e links para artigos, blogs, criadores de perfil conhecidos que podem fazer o trabalho. Esse é o tipo de coisa que imho torna a resposta valiosa, não apenas enviando pessoas para fazer uma pergunta em algum lugar "como eu conto minhas interrupções na CPU, não tenho idéia".
Evgeny #
Bom ponto. Eu melhorei minha resposta novamente.
213 Alexandre Alexandre
5

Talvez eu não consiga responder completamente, mas aqui estão minhas opiniões sobre minha experiência limitada com o lambda:

  1. Desempenho de velocidade: a duração de uma única execução de uma função lambda estará presente no painel da monitoringguia do Lambda , que se parece com isso:

insira a descrição da imagem aqui

O mesmo acontece com aceleradores / erros / número de invocações.

  1. Também é possível configurar os filtros do CloudWatch para o uso da memória de uma função lambda, cujos dados podem ser usados ​​para otimizar ainda mais seu manipulador. Este é um post decente sobre como configurar um.
  2. Além disso, configure o log adequado , para que você possa acessar posteriormente os logs no CloudWatch. Este não é um hack de otimização em si, mas mais uma prática recomendada
  3. Teste : teste suas funções lambda completamente, para não perder casos extremos. Isso é importante, pois o lambda tenta novamente as funções com falha antes de desistir. Portanto, você pode economizar tempo antecipadamente se tiver testado a função corretamente. Guia para testar funções Lambda
Dawny33
fonte
5

Confira o IOpipe Profiler para obter os dumps completos do profiler v8 das invocações do Lambda. Você pode carregá-los no Chrome Devtools para ver exatamente onde o tempo da CPU é gasto e como a memória está sendo usada para suas funções.

insira a descrição da imagem aqui

Isenção de responsabilidade: trabalho para o IOpipe

adjohn
fonte
0

Use o agente StackImpact para obter perfis de CPU e memória. Mais detalhes na postagem do blog: CPU do AWS Lambda e perfil de memória (Node.js) . Como o processo do Lambda Node.js está congelando entre solicitações, a maioria das outras ferramentas provavelmente não funcionará imediatamente.

insira a descrição da imagem aqui

Isenção de responsabilidade: trabalho para StackImpact

logix
fonte
Embora pareça relacionado e potencialmente uma solução válida, estender um pouco sobre como ela pode ajudar a resolver a questão evitaria a sensação de um link responder apenas onde, se o link apodrecer, não há muito para ter uma primeira idéia de como ele pode ajudar.
Tensibai