Máximo de solicitações simultâneas para serviços

Para serviços do Cloud Run, cada revisão é escalonada automaticamente conforme o número de instâncias necessárias para processar todas as solicitações recebidas.

Quando mais instâncias estiverem processando solicitações, mais CPU e memória serão usadas, gerando custos maiores.

Para ter mais controle, o Cloud Run fornece uma configuração de solicitações simultâneas máximas por instância que especifica o número máximo de solicitações que podem ser processadas simultaneamente por uma determinada instância.

Máximo de solicitações simultâneas por instância

É possível configurar o máximo de solicitações simultâneas por instância. É possível aumentar esse valor para até 1.000. Por padrão, as instâncias do Cloud Run implantadas usando a CLI do Google Cloud ou o Terraform têm uma simultaneidade máxima 80 vezes maior que o número de vCPUs. Esse padrão só se aplica quando um novo serviço é criado, não a implantações subsequentes de uma revisão. As instâncias do Cloud Run implantadas usando o Google Cloud console têm uma simultaneidade padrão de 80.

Embora seja necessário usar o valor padrão, é possível, se necessário, diminuir a simultaneidade máxima. Por exemplo, se o código não puder processar solicitações paralelas, defina a simultaneidade como 1.

O valor de simultaneidade especificado é um limite máximo. Se a CPU da instância já estiver muito utilizada, o Cloud Run talvez não envie tantas solicitações para uma instância específica. Nesses casos, a instância do Cloud Run pode mostrar que a simultaneidade máxima não está sendo usada. Por exemplo, se o uso alto da CPU for mantido, o número de instâncias poderá ser escalonado verticalmente.

O diagrama a seguir mostra como a configuração do máximo de solicitações simultâneas por instância afeta o número de instâncias de contêiner necessárias para processar as solicitações simultâneas recebidas:

Diagrama máximo de solicitações simultâneas por instância

Ajustar a simultaneidade para escalonamento automático e utilização de recursos

Ajustar a simultaneidade máxima por instância influencia significativamente como seu serviço é escalonado e utiliza recursos.

  • Simultaneidade menor: força o Cloud Run a usar mais instâncias para o mesmo volume de solicitações, porque cada instância processa menos solicitações. Isso pode melhorar a capacidade de resposta de aplicativos que não são otimizados para alto paralelismo interno ou que você quer escalonar mais rapidamente com base na carga de solicitações.
  • Maior simultaneidade: permite que cada instância processe mais solicitações, o que pode levar a menos instâncias ativas e reduzir o custo. Isso é adequado para aplicativos eficientes em tarefas paralelas vinculadas a E/S ou que podem usar várias vCPUs para processamento simultâneo de solicitações.

Comece com a simultaneidade padrão, monitore de perto a performance e a utilização do aplicativo e faça ajustes conforme necessário.

Simultaneidade com instâncias de várias vCPUs

Ajustar a simultaneidade é especialmente importante se o serviço usar várias vCPUs, mas o aplicativo for de uma única linha de execução ou efetivamente de uma única linha de execução (vinculado à CPU).

  • Pontos de acesso de vCPU: um aplicativo de linha única em uma instância com várias vCPUs pode maximizar uma vCPU enquanto outras ficam ociosas. O escalonador automático de CPU do Cloud Run mede a utilização média da CPU em todas as vCPUs. A utilização média da CPU pode permanecer enganosamente baixa nesse cenário, impedindo um escalonamento eficaz com base na CPU.
  • Usar a simultaneidade para impulsionar o escalonamento: se o escalonamento automático baseado em CPU for ineficaz devido a hotspots de vCPU, reduzir a simultaneidade máxima se tornará uma ferramenta importante. Os hotspots de vCPU geralmente ocorrem quando várias vCPUs são escolhidas para um aplicativo de linha única devido a altas necessidades de memória. Usar a simultaneidade para impulsionar o escalonamento força o escalonamento com base na taxa de transferência de solicitações. Isso garante que mais instâncias sejam iniciadas para lidar com a carga, reduzindo o enfileiramento e a latência por instância.

Quando limitar a simultaneidade máxima a uma solicitação por vez?

É possível limitar a simultaneidade para que apenas uma solicitação por vez seja enviada para cada instância em execução. Considere fazer isso nos casos em que:

  • cada solicitação usa a maior parte da CPU ou memória disponível;
  • sua imagem de contêiner não foi projetada para processar várias solicitações ao mesmo tempo, por exemplo, seu contêiner depende do estado global que duas solicitações não podem compartilhar.

Uma simultaneidade de 1 provavelmente terá impacto negativo sobre o desempenho do escalonamento, já que muitas instâncias precisarão ser iniciadas para processar um pico nas solicitações de entrada. Consulte Compensações entre capacidade de processamento, latência e custo para mais considerações.

Estudo de caso

As métricas a seguir mostram um caso de uso em que 400 clientes fazem três solicitações por segundo a um serviço do Cloud Run configurado com um número máximo de solicitações simultâneas por instância de um. A linha superior verde mostra as solicitações ao longo do tempo, a linha azul inferior mostra o número de instâncias iniciadas para lidar com as solicitações.

Simultaneidade definida como 1

As métricas a seguir mostram 400 clientes fazendo três solicitações por segundo a um serviço do Cloud Run configurado com um máximo de solicitações simultâneas por instância de 80. A linha superior verde mostra as solicitações ao longo do tempo e a linha azul inferior mostra o número de instâncias iniciadas para processar as solicitações. Muito menos instâncias são necessárias para lidar com o mesmo volume de solicitações.

Simultaneidade definida como 80

Simultaneidade para implantações de código-fonte

Quando a simultaneidade está ativada, o Cloud Run não fornece isolamento entre solicitações simultâneas processadas pela mesma instância. Nesses casos, é necessário garantir que o código seja seguro para execução simultânea. Para mudar isso, defina um valor de simultaneidade diferente. Recomendamos começar com uma simultaneidade menor, como 8, e depois aumentá-la. Começar com uma simultaneidade muito alta pode levar a um comportamento intencional devido a restrições de recursos, como memória ou CPU.

Os runtimes de linguagem também podem afetar a simultaneidade. Alguns desses impactos específicos do idioma são mostrados na lista a seguir:

  • O Node.js é inerentemente uma única linha de execução. Para aproveitar a simultaneidade, use o estilo de código assíncrono do JavaScript, que é idiomático no Node.js. Consulte Controle de fluxo assíncrono na documentação oficial do Node.js para mais detalhes.

  • Para o Python 3.8 e versões mais recentes, o suporte a alta simultaneidade por instância requer linhas de execução suficientes para processar a simultaneidade. Recomendamos que você defina uma variável de ambiente de execução para que o valor das linhas de execução seja igual ao valor de simultaneidade, por exemplo: THREADS=8

A seguir

Para gerenciar o máximo de solicitações simultâneas por instância dos serviços do Cloud Run, consulte Como definir o máximo de solicitações simultâneas por instância.

Para otimizar a configuração máxima de solicitações simultâneas por instância, consulte dicas de desenvolvimento para ajustar a simultaneidade.