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. Por padrão, cada instância de contêiner do Cloud Run pode receber até 80 solicitações ao mesmo tempo. É possível aumentar esse limite até 1.000.
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 máximo, e o Cloud Run talvez não envie tantas solicitações para uma instância específica se a CPU da instância já tiver muito uso.
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:
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.
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.
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.
Concorrência 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 alterar isso, defina um valor de simultaneidade diferente. Recomendamos começar com uma simultaneidade menor, como 8, e depois aumentar. 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 ambientes de execução de linguagem também podem afetar a simultaneidade. Alguns desses impactos específicos de 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.