Como escolher um ambiente do App Engine

É possível executar os aplicativos no App Engine usando o ambiente flexível ou o ambiente padrão. Também é possível optar por usar os dois ambiente simultaneamente para um mesmo aplicativo e, assim, permitir que seus serviços aproveitem os benefícios individuais de cada um deles.

Os ambientes do App Engine

O App Engine é indicado para aplicativos projetados com arquitetura de microsserviços (em inglês), principalmente se você decidir utilizar ambos os ambientes. Use as seções a seguir para saber mais e entender qual ambiente atende melhor às necessidades do seu aplicativo.

Quando escolher o ambiente padrão

As instâncias do aplicativo são executadas em um sandbox (em inglês), usando o ambiente de execução de uma das linguagens compatíveis, que estão listadas abaixo.

Aplicativos que precisam lidar com escalonamento rápido.

O ambiente padrão é ideal para aplicativos com as seguintes características:

  • O código-fonte é escrito em versões específicas das linguagens de programação compatíveis:
    • Python 2.7, Python 3.7, Python 3.8
    • Java 8 e Java 11
    • Node.js 8, Node.js 10 e Node.js 12
    • PHP 5.5, PHP 7.2, PHP 7.3 e PHP 7.4 (Beta)
    • Ruby 2.5, Ruby 2.6 (Beta) e Ruby 2.7 (Beta)
    • Go 1.11, Go 1.12, Go 1.13 e Go 1.14
  • Destina-se a ser executado gratuitamente ou a um custo muito baixo, em que você paga apenas pelo que precisa e quando precisa. Por exemplo, o aplicativo pode ser escalonado para 0 instâncias quando não há tráfego.
  • Passa por picos súbitos e extremos de tráfego que exigem escalonamento imediato.

Quando escolher o ambiente flexível

As instâncias do aplicativo são executadas em contêineres do Docker em máquinas virtuais (VM, na sigla em inglês) do Compute Engine.

Aplicativos que recebem tráfego consistente, passam por flutuações de tráfego regulares ou atendem aos parâmetros para aumentar e diminuir gradualmente a escala.

O ambiente flexível é ideal para aplicativos com as seguintes características:

  • Código-fonte escrito em uma versão de qualquer uma das linguagens de programação compatíveis:
    Python, Java, Node.js, Go, Ruby, PHP ou .NET
  • Executado em um contêiner do Docker que inclui um ambiente de execução personalizado ou código-fonte escrito em outras linguagens de programação.
  • Usa ou depende de frameworks que incluem código nativo.
  • Acessa os recursos ou serviços do projeto do Google Cloud que estejam na rede do Compute Engine.

Comparação entre recursos de alto nível

A tabela a seguir resume as diferenças entre os dois ambientes:

Recurso Ambiente padrão Ambiente flexível
Tempo de inicialização de instâncias Segundos Minutos
Tempo limite máximo da solicitação Depende do ambiente de execução e do tipo de escalonamento. 60 minutos
Linhas de execução em segundo plano Sim, com restrições Sim
Processos em segundo plano Não Sim
Depuração SSH Não Sim
Escalonamento Manual, básico, automático Manual, automático
Escalonamento para zero Sim Não, mínimo de 1 instância
Gravação em disco local
  • Java 8, Java 11, Node.js, Python 3, PHP 7, Ruby, Go 1.11 e Go 1.12+ têm acesso de leitura e gravação ao diretório /tmp.
  • O Python 2.7 e o PHP 5.5 não têm acesso de gravação ao disco.
Sim, em disco temporário (inicializado em cada inicialização de VM)
Modificação do ambiente de execução Não Sim (pelo Dockerfile)
Tempo de implantação Segundos Minutos
Patches de segurança automáticos no local Sim Sim (exclui o ambiente de execução da imagem do contêiner)
Acesso a APIs e serviços do Google Cloud, como Cloud Storage, Cloud SQL, Memorystore, Tarefas e outros. Sim Sim
WebSockets Nenhum
Java 8, Python 2 e PHP 5 fornecem uma API Sockets proprietária (Beta), mas a API não está disponível em ambientes de execução padrão mais recentes.
Sim
Compatível com a instalação de binários de terceiros
  • Sim para Java 8, Java 11, Node.js, Python 3, PHP 7, Ruby 2.5 (Beta), Go 1.11 e Go 1.12+.
  • Não para Python 2.7 e PHP 5.5.
Sim
Local América do Norte, Ásia-Pacífico ou Europa América do Norte, Ásia-Pacífico ou Europa
Preços Baseado em instância/hora Baseado no uso de vCPU, memória e discos permanentes

Para uma comparação aprofundada dos ambientes, consulte o guia da linguagem utilizada: Python, Java, Go ou PHP.

Comparação do ambiente flexível com o Compute Engine

O ambiente flexível do App Engine apresenta as seguintes diferenças em relação ao Compute Engine:

  • As instâncias de VM do ambiente flexível são reiniciadas semanalmente. Durante as reinicializações, os serviços de gerenciamento do Google aplicam todas as atualizações de sistema operacional e segurança necessárias.

  • Você sempre tenha acesso raiz às instâncias de VM do Compute Engine. Por padrão, o acesso SSH às instâncias de VM no ambiente flexível está desativado. Se você quiser, é possível ativar o acesso raiz às instâncias de VM do seu aplicativo.

  • As implantações de código podem levar mais tempo à medida que as imagens de contêiner são criadas usando o serviço Cloud Build.

  • A região geográfica de uma instância de VM do ambiente flexível é determinada pelo local especificado para o aplicativo do App Engine do projeto do Cloud. Os serviços de gerenciamento do Google garantem que as instâncias de VM compartilhem o mesmo local para otimizar o desempenho.

Como migrar do ambiente padrão para o flexível

Se você tem um aplicativo no ambiente padrão, talvez queira mover alguns serviços para o ambiente flexível. Para saber mais, consulte as recomendações para Python, Java, Go e PHP.

Para migrar serviços específicos, consulte as instruções para Python, Java, Go e PHP.