Configurar a simultaneidade reservada para uma função - AWS Lambda

Configurar a simultaneidade reservada para uma função

No Lambda, simultaneidade corresponde ao número de solicitações em andamento que a função está processando, no momento. Há dois tipos de controle de simultaneidade disponíveis:

  • Simultaneidade reservada: isso define o número máximo e mínimo de instâncias simultâneas alocadas à função. Quando uma função tem simultaneidade reservada, nenhuma outra função pode usar essa simultaneidade. A simultaneidade reservada é útil para garantir que suas funções mais críticas sempre tenham simultaneidade suficiente para lidar com as solicitações recebidas. Além disso, a simultaneidade reservada pode ser usada para limitar a simultaneidade e evitar a sobrecarga dos recursos subsequentes, como as conexões de banco de dados. A simultaneidade reservada atua como limite inferior e superior: ela reserva a capacidade especificada exclusivamente para a função e, ao mesmo tempo, impede que ela ultrapasse esse limite. Configurar a simultaneidade reservada para uma função não acarreta cobranças adicionais.

  • Simultaneidade provisionada: é o número de ambientes de execução inicializados previamente alocados para a função. Esses ambientes de execução estão prontos para responder imediatamente às solicitações de função de entrada. A simultaneidade provisionada é útil para reduzir as latências de inicialização a frio das funções e foi criada para tornar as funções disponíveis com tempos de resposta na ordem das dezenas de milissegundos. Geralmente, as workloads interativas são as que mais se beneficiam do recurso. São aplicações em que os usuários iniciam solicitações, como aplicações móveis e da Web, e que são mais sensíveis à latência. As workloads assíncronas, como pipelines de processamento de dados, costumam ser menos sensíveis à latência e, portanto, geralmente não precisam de simultaneidade provisionada. A configuração da simultaneidade provisionada gera cobranças na sua Conta da AWS.

Este tópico detalha como gerenciar e configurar a simultaneidade reservada. Para uma visão geral conceitual desses dois tipos de controles de simultaneidade, consulte Simultaneidade reservada e  simultaneidade provisionada. Para obter informações, sobre a configuração da simultaneidade provisionada, consulte Configurar a simultaneidade provisionada para uma função.

nota

As funções do Lambda vinculadas a um mapeamento da origem do evento do Amazon MQ têm uma simultaneidade máxima padrão. Para o Apache Active MQ, o número máximo de instâncias simultâneas é 5. Para o Rabbit MQ, o número máximo de instâncias simultâneas é 1. Definir a simultaneidade reservada ou provisionada para a função não altera esses limites. Para solicitar um aumento na simultaneidade máxima padrão ao usar o Amazon MQ, entre em contato com Suporte.

Configurar a simultaneidade reservada

Você pode definir configurações de simultaneidade reservada para uma função usando o console do Lambda ou a API do Lambda.

Para reservar simultaneidade para uma função (console)
  1. Abra a página Funções do console do Lambda.

  2. Escolha a função para a qual você deseja reservar a simultaneidade.

  3. Escolha Configuration (Configuração) e escolha (Concurrency (Simultaneidade).

  4. Em Concurrency (Simultaneidade), selecione Edit (Editar).

  5. Selecione Reserve concurrency (Reservar simultaneidade). Insira a quantidade de simultaneidade para reservar para a função.

  6. Escolha Salvar.

Você pode reservar até o valor da simultaneidade da conta não reservada menos 100. As 100 unidades restantes de simultaneidade se destinam a funções que não estão usando simultaneidade reservada. Por exemplo, se sua conta tiver um limite de simultaneidade de 1 mil, você não poderá reservar todas as 1 mil unidades de simultaneidade para uma única função.

Ocorrerá um erro se você tentar reservar simultaneidade em excesso.

Reservar simultaneidade para uma função afeta o grupo de simultaneidades disponíveis para outras funções. Por exemplo, se você reservar 100 unidades de simultaneidade para function-a, outras funções da sua conta deverão compartilhar as 900 unidades restantes de simultaneidade, mesmo que function-a não use todas as 100 unidades de simultaneidade reservadas.

Para controlar intencionalmente a utilização de uma função, defina a simultaneidade reservada como zero. Isso impede que sua função processe todos os eventos até que você remova o limite.

Para configurar a simultaneidade reservada com a API do Lambda, use as operações da API a seguir.

Por exemplo, para configurar a simultaneidade reservada com a AWS Command Line Interface (CLI), use o comando put-function-concurrency. O comando a seguir reserva 100 unidades de simultaneidade para uma função denominada my-function:

aws lambda put-function-concurrency --function-name my-function \ --reserved-concurrent-executions 100

Você observará um resultado parecido com o seguinte:

{ "ReservedConcurrentExecutions": 100 }

Estimar com precisão a simultaneidade reservada necessária para uma função

Se sua função estiver atendendo a tráfego no momento, você poderá visualizar facilmente as métricas de simultaneidade usando as métricas do CloudWatch. Especificamente, a métrica ConcurrentExecutions apresenta o número de invocações simultâneas para cada função em sua conta.

Gráfico mostrando a simultaneidade de uma função ao longo do tempo.

O gráfico anterior sugere que essa função atende a uma média de cinco a dez solicitações simultâneas e atinge o pico de 20 solicitações em um dia típico. Suponha que existam muitas outras funções na sua conta.  Se essa função for essencial para sua aplicação e você não desejar descartar solicitação alguma, use um número maior ou igual a 20 como sua definição de simultaneidade reservada.

Com alternativa, lembre-se de que você também pode calcular a simultaneidade usando a fórmula a seguir:

Concurrency = (average requests per second) * (average request duration in seconds)

Multiplicar a média de solicitações por segundo pela duração média da solicitação em segundos fornece uma estimativa aproximada do quanto de simultaneidade você precisa reservar. É possível estimar a média de solicitações por segundo usando a métrica Invocation e a duração média da solicitação em segundos usando a métrica Duration. Consulte Uso de métricas do CloudWatch com o Lambda para obter mais detalhes.

Você deve se familiarizar também com as restrições de throughput upstream e downstream. Embora as funções do Lambda sejam dimensionadas perfeitamente com a carga, as dependências de upstream e downstream talvez não tenham os mesmos recursos de throughput. Se você precisar limitar até que ponto a função pode ser escalada, configure simultaneidade reservada na função.