Acerca dos ambientes de execução de serviços

Por predefinição, os serviços do Cloud Run não têm um ambiente de execução especificado, o que significa que o Cloud Run seleciona o ambiente de execução com base nas funcionalidades usadas. Por isso, a menos que especifique um ambiente de execução para o seu serviço, o Cloud Run pode selecionar o ambiente de primeira ou segunda geração.

Tenha em atenção que as tarefas do Cloud Run só usam o ambiente de execução de segunda geração e que isto não pode ser alterado para tarefas.

O ambiente de execução de primeira geração apresenta tempos de início a frio rápidos e emulação da maioria, mas não de todas as chamadas do sistema operativo. Originalmente, este era o único ambiente de execução disponível para serviços no Cloud Run.

O ambiente de execução de segunda geração oferece compatibilidade total com o Linux em vez da emulação de chamadas do sistema. Este ambiente de execução oferece:

  • Desempenho mais rápido da CPU
  • Desempenho da rede mais rápido, especialmente na presença de perda de pacotes
  • Compatibilidade total com o Linux, incluindo suporte para todas as chamadas do sistema, espaços de nomes e cgroups
  • Compatibilidade com o sistema de arquivos de rede

Embora o ambiente de execução de segunda geração tenha geralmente um desempenho mais rápido sob carga sustentada, tem tempos de início a frio mais longos do que a primeira geração para a maioria dos serviços.

Como escolher um ambiente de execução

Deve usar a primeira geração se se aplicar alguma das seguintes situações:

  • O seu serviço do Cloud Run tem tráfego intermitente e precisa de ser dimensionado rapidamente para muitas instâncias, ou o seu serviço é sensível aos tempos de arranque a frio.
  • O seu serviço do Cloud Run tem tráfego pouco frequente que causa um aumento da escala a partir de zero frequente.
  • Quiser usar menos de 512 MiB de memória. O ambiente de execução de segunda geração requer, pelo menos, 512 MiB de memória.

Deve usar a segunda geração se alguma das seguintes situações se aplicar ao seu serviço do Cloud Run:

  • O seu serviço tem de usar o NFS, que só é suportado pela segunda geração.
  • O seu serviço tem um tráfego relativamente estável e é tolerante a inícios a frio um pouco mais lentos.
  • O seu serviço tem cargas de trabalho com utilização intensiva do CPU.
  • O seu serviço pode beneficiar de um desempenho mais rápido da rede.
  • O seu serviço tem de usar software que tenha problemas de execução na primeira geração devido a chamadas de sistema não implementadas.
  • O seu serviço precisa da funcionalidade cgroup do Linux.
  • O seu serviço usa infraestrutura de terceiros para proteger contentores.

Práticas recomendadas para usar o ambiente de execução de segunda geração

Recomendamos que o seu contentor instale um processador SIGTERM, especialmente se estiver a usar a faturação baseada em pedidos.

O processamento de SIGTERM dá ao seu contentor a oportunidade de executar quaisquer tarefas de limpeza necessárias, como o esvaziamento de registos antes de sair. Se o seu contentor não detetar o sinal SIGTERM, continua a ter 10 segundos para realizar estas tarefas. Estes 10 segundos são faturáveis.

Como verificar se o seu contentor processa SIGTERM

Para determinar se o seu contentor tem um controlador SIGTERM instalado:

  1. Inicie o Cloud Shell. Pode encontrar a opção Ativar botão do Cloud Run Ativar Cloud Shell no cabeçalho da página de documentação em que se encontra. Pode ter de a autorizar e aguardar pelo respetivo aprovisionamento. Em alternativa, inicie uma sessão autónoma.

  2. Execute o contentor localmente no Cloud Shell:

    docker run IMAGE_URL

    Substitua IMAGE_URL por uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .

  3. Abra outro separador no Cloud Shell e obtenha uma lista dos contentores em execução na sessão atual do Cloud Shell:

    docker container ls

    Tem de localizar o ID do contentor devolvido pelo comando.

  4. Usando o ID do contentor, envie um sinal SIGTERM para o contentor

    docker kill -s SIGTERM CONTAINER_ID
  5. Volte ao separador onde invocou docker run para ver se o contentor foi terminado (parado). Se o sinal SIGTERM fez com que o contentor terminasse, o seu contentor está a processar o SIGTERM.

Como processar SIGTERM

Se o seu contentor não processar SIGTERM, a forma mais simples de adicionar um processador SIGTERM é envolver o seu serviço com tini. Ao fazê-lo, o seu serviço é executado como um subprocesso do tini, que assume a função do processo de inicialização do contentor. Consulte as instruções do Docker para ver instruções.

Em alternativa, pode alterar a sua aplicação para processar diretamente o SIGTERM.

O que se segue?