Escalabilidade de instâncias gerenciadas do Lambda - AWS Lambda

Escalabilidade de instâncias gerenciadas do Lambda

As instâncias gerenciadas do Lambda não escalam quando as invocações chegam e não oferecem suporte a inicializações a frio. Em vez disso, elas escalam de forma assíncrona usando sinais de consumo de recursos. Atualmente, as instâncias gerenciadas escalam com base na utilização de recursos da CPU e na saturação de multissimultaneidade.

Principais diferenças:

  • Lambda (padrão): escala quando não há ambiente de execução livre para lidar com uma invocação recebida (inicialização a frio)

  • Instâncias gerenciadas do Lambda: escalam de forma assíncrona com base na utilização de recursos da CPU e na saturação de multissimultaneidade dos ambientes de execução

Se seu tráfego mais do que dobrar em 5 minutos, será possível ver controles de utilização quando o Lambda aumentar a escala verticalmente das instâncias e ambientes de execução para atender à demanda.

O ciclo de vida de escalabilidade

As instâncias gerenciadas do Lambda usam uma arquitetura distribuída para gerenciar a escalabilidade:

Componentes:

  • Instâncias gerenciadas: executadas na sua conta, nas sub-redes que você fornece

  • Roteador e escalador: componentes compartilhados do Lambda que roteiam invocações e gerenciam a escalabilidade

  • Agente do Lambda: executado em cada instância gerenciada para gerenciar o ciclo de vida do ambiente de execução e monitorar o consumo de recursos

Como funciona:

  1. Quando você publica uma versão da função com um provedor de capacidade, o Lambda executa instâncias gerenciadas em sua conta. Ele executa três por padrão, para resiliência de AZ, e inicia três ambientes de execução antes de marcar sua versão de função como ATIVA.

  2. Cada instância gerenciada pode executar ambientes de execução para várias funções mapeadas para o mesmo provedor de capacidade.

  3. Conforme o tráfego flui para a sua aplicação, os ambientes de execução consomem recursos. O agente do Lambda notifica o escalador, que decide se quer escalar novos ambientes de execução ou instâncias gerenciadas.

  4. Se o roteador tentar enviar uma invocação para um ambiente de execução com alto consumo de recursos, o agente do Lambda nessa instância o notificará para tentar novamente em outra.

  5. À medida que o tráfego diminui, o agente do Lambda notifica o escalador, que toma a decisão de reduzir a escala verticalmente dos ambientes de execução e reduzir a escala horizontalmente das instâncias gerenciadas.

Ajuste do comportamento de escalabilidade

É possível personalizar o comportamento de escalabilidade das instâncias gerenciadas por meio de quatro controles:

Controles em nível de função

1. Memória da função e vCPUs

Escolha o tamanho da memória e a alocação de vCPUs para sua função. O menor tamanho de função com suporte é de 2 GB e 1 vCPU.

Considerações:

  • Selecione uma configuração de memória e vCPU que ofereça suporte a execuções multissimultâneas da sua função.

  • Não é possível configurar uma função com menos de 1 vCPU, pois as funções executadas em instâncias gerenciadas devem oferecer suporte a workloads multissimultâneas

  • Não é possível escolher menos de 2 GB, pois isso corresponde à proporção de 2 para 1 memória por vCPU das instâncias c, que têm a menor proporção

  • Para aplicações em Python, talvez seja necessário escolher uma proporção maior de memória para vCPUs, como 4 para 1 ou 8 para 1, devido à forma como o Python lida com a multissimultaneidade

  • Se você estiver executando operações intensivas de CPU ou executando pouca E/S, é necessário escolher mais de uma vCPU

2. Simultaneidade máxima

Defina a simultaneidade máxima por ambiente de execução.

Comportamento padrão: o Lambda escolhe padrões sensatos que equilibram o consumo de recursos e o throughput, o que funciona para uma ampla variedade de aplicações.

Diretrizes de ajuste:

  • Aumente a simultaneidade: se suas invocações de função usarem muito pouca CPU, será possível aumentar a simultaneidade máxima até um máximo de 64 por vCPU

  • Reduza a simultaneidade: se a sua aplicação consome uma grande quantidade de memória e muito pouca CPU, é possível reduzir sua simultaneidade máxima

Importante: como as instâncias gerenciadas do Lambda são destinadas a aplicações multissimultâneas, ambientes de execução com simultaneidade muito baixa podem sofrer controles de utilização durante a escalabilidade.

Controles em nível de provedor de capacidade

3. Utilização de recursos do destino

Escolha seu próprio destino para o consumo de utilização da CPU.

Comportamento padrão: o Lambda mantém espaço suficiente para que seu tráfego dobre em 5 minutos sem controles de utilização.

Opções de otimização:

  • Se a sua workload for muito estável ou se sua aplicação não for sensível a restrições, será possível definir a meta em um nível alto para obter maior utilização e custos mais baixos

  • Se você quiser manter o espaço livre para picos de tráfego, é possível definir metas de recursos em um nível baixo, o que exigirá mais capacidade

4. Seleção do tipo de instância

Defina os tipos de instância permitidos ou excluídos.

Comportamento padrão: o Lambda escolhe os melhores tipos de instância para sua workload. Recomendamos que as instâncias gerenciadas do Lambda escolham os tipos de instância para você, pois restringir o número de tipos de instância possíveis pode resultar em menor disponibilidade.

Configuração personalizada:

  • Requisitos específicos de hardware: defina os tipos de instância permitidos em uma lista de instâncias compatíveis. Por exemplo, se você tiver uma aplicação que exija alta largura de banda da rede, poderá selecionar vários tipos de instâncias n.

  • Otimização de custos: para ambientes de testes ou desenvolvimento, é possível escolher tipos de instância menores, como tipos de instância m7a.large

Próximas etapas