Aprimoramento da performance de inicialização com o Lambda SnapStart - AWS Lambda

Aprimoramento da performance de inicialização com o Lambda SnapStart

O Lambda SnapStart para Java pode aprimorar a performance de inicialização de aplicações sensíveis à latência em até dez vezes sem custos extras e, geralmente, sem alterações no código da função. O maior contribuinte para a latência de inicialização (geralmente chamado de tempo de inicialização a frio) é o tempo que o Lambda demora para inicializar a função, que inclui carregar o código da função, iniciar o runtime e inicializar o código da função.

Com o SnapStart, o Lambda inicializará a função quando você publicar uma versão da função. O Lambda usa um snapshot microVM do Firecracker do estado da memória e do disco do ambiente de execução inicializado, criptografa o snapshot e o armazena em cache para acesso de baixa latência. Quando você invoca a versão da função pela primeira vez e à medida que aumenta a escala verticalmente das invocações, o Lambda retoma novos ambientes de execução do snapshot armazenado em cache, em vez de realizar a inicialização do zero, melhorando a latência de inicialização.

Importante

Se suas aplicações dependerem da exclusividade de estado, você deverá avaliar o código da função e verificar se ele é resiliente às operações de snapshots. Para ter mais informações, consulte Tratamento da exclusividade com o Lambda SnapStart.

Recursos compatíveis e limitações

O SnapStart é compatível com os runtimes gerenciados do Java 11 e versões posteriores. Outros runtimes gerenciados (como nodejs20.x e python3.12), Runtimes somente para sistema operacional e imagens de contêiner não são compatíveis.

O SnapStart não é compatível com simultaneidade provisionada, com o Amazon Elastic File System (Amazon EFS) nem com um armazenamento temporário com mais de 512 MB.

Para trabalhar com o SnapStart, é possível usar o console do Lambda, a AWS Command Line Interface (AWS CLI), a API do Lambda, o AWS SDK for Java, o AWS CloudFormation, o AWS Serverless Application Model (AWS SAM) e o AWS Cloud Development Kit (AWS CDK). Para ter mais informações, consulte Ativação e gerenciamento do Lambda SnapStart.

nota

É possível usar o SnapStart somente em versões de funções publicadas e aliases que direcionam para versões. Não é possível usar o SnapStart em uma versão não publicada de uma função ($LATEST).

Regiões compatíveis

O SnapStart está disponível nas seguintes Regiões da AWS:

  • Leste dos EUA (Norte da Virgínia)

  • Leste dos EUA (Ohio)

  • Oeste dos EUA (N. da Califórnia)

  • Oeste dos EUA (Oregon)

  • África (Cidade do Cabo)

  • Ásia-Pacífico (Hong Kong)

  • Asia Pacific (Mumbai)

  • Ásia-Pacífico (Hyderabad)

  • Ásia-Pacífico (Tóquio)

  • Ásia-Pacífico (Seul)

  • Asia Pacific (Osaka)

  • Ásia-Pacífico (Singapura)

  • Ásia-Pacífico (Sydney)

  • Ásia-Pacífico (Jacarta)

  • Ásia-Pacífico (Melbourne)

  • Canadá (Central)

  • Europa (Estocolmo)

  • Europa (Frankfurt)

  • Europa (Zurique)

  • Europa (Irlanda)

  • Europa (Londres)

  • Europa (Paris)

  • Europa (Milão)

  • Europa (Espanha)

  • Oriente Médio (Emirados Árabes Unidos)

  • Middle East (Bahrain)

  • South America (São Paulo)

Considerações sobre compatibilidade

Com o SnapStart, o Lambda usa um único snapshot como estado inicial para diversos ambientes de execução. Se sua função usar qualquer um dos itens a seguir durante a fase de inicialização, talvez seja necessário realizar algumas alterações antes de usar o SnapStart:

Exclusividade

Se o código de inicialização gerar conteúdo exclusivo que é incluído no snapshot, o conteúdo poderá não ser exclusivo quando for reutilizado em ambientes de execução. Para manter a exclusividade ao usar o SnapStart, você deve gerar conteúdo exclusivo após a inicialização. Isso inclui IDs exclusivos, segredos exclusivos e entropia que são usados para gerar a pseudoaleatoriedade. Para saber como restaurar a exclusividade, consulte Tratamento da exclusividade com o Lambda SnapStart.

Conexões de rede

O estado das conexões que a função estabelece durante a fase de inicialização não é garantido quando o Lambda retoma a função de um snapshot. Valide o estado das conexões de rede e restabeleça-as conforme necessário. Na maioria dos casos, as conexões de rede que um SDK da AWS estabelece são retomadas automaticamente. Para outras conexões, analise as práticas recomendadas.

Dados temporários

Algumas funções realizam o download ou inicializam dados efêmeros, como credenciais temporárias ou carimbos de data e hora em cache, durante a fase de inicialização. Atualize os dados efêmeros no manipulador de função antes de usá-los, mesmo quando não estiver usando o SnapStart.

Preços do SnapStart

Não há custos adicionais para o SnapStart. Você será cobrado com base no número de solicitações para as funções, no tempo que o código demora para ser executado e na memória configurada para a função. A duração é calculada a partir do momento em que o código começa a ser executado até que ele retorne ou seja encerrado, com arredondamento para o 1 ms mais próximo.

As cobranças por duração se aplicam ao código executado no manipulador de função, ao código de inicialização declarado fora do manipulador, ao tempo que demora para o runtime (JVM) carregar e aos códigos executados em um hook de runtime. Para obter mais informações sobre como o Lambda calcula a duração, consulte Monitoramento para o Lambda SnapStart.

Para funções configuradas com o SnapStart, o Lambda recicla periodicamente os ambientes de execução e executa novamente o código de inicialização. Para obter resiliência, o Lambda cria snapshots em diversas regiões. As cobranças são aplicadas sempre que o Lambda executa novamente o código de inicialização em outra região. Para obter mais informações sobre como o Lambda calcula as cobranças, consulte Definição de preço do AWS Lambda.

Comparação entre o Lambda SnapStart e a simultaneidade provisionada

Tanto o Lambda SnapStart quanto a simultaneidade provisionada poderão reduzir inicializações a frio e latências discrepantes quando uma função aumentar a escala verticalmente. O SnapStart ajuda você a aprimorar a performance da inicialização em até dez vezes sem custos extras. A simultaneidade provisionada mantém as funções inicializadas e prontas para responder em milissegundos de dois dígitos. A configuração da simultaneidade provisionada gera cobranças em sua conta da Conta da AWS. Use a simultaneidade provisionada se sua aplicação tiver requisitos rígidos de latência de inicialização a frio. Não é possível usar o SnapStart e a simultaneidade provisionada na mesma versão da função.

nota

O SnapStart funciona melhor quando usado com invocações de funções em escala. As funções que são invocadas com pouca frequência podem não ter as mesmas melhorias de desempenho.

Recursos adicionais

Além de ler os outros tópicos deste capítulo, também recomendamos que você veja o workshop Início mais rápido com o AWS Lambda SnapStart e assista à sessão Rápidas inicializações a frio para suas funções Java do AWS re:Invent 2022.