Instâncias são as unidades computacionais que o App Engine usa para fazer o dimensionamento automático do aplicativo. A qualquer momento, o aplicativo pode estar em execução em uma ou várias instâncias, com solicitações espalhadas por todas elas.
As instâncias com escalonamento manual são executadas indefinidamente, mas não há garantia de tempo de atividade, já que elas podem ser encerradas antecipadamente devido a falhas ou reiniciadas para as atualizações. Falhas de hardware ou software que causem encerramento antecipado ou reinicializações frequentes podem ocorrer sem qualquer aviso e levar muito tempo para serem solucionadas.
Todas as instâncias flexíveis podem ser reiniciadas semanalmente se houver atualizações disponíveis. Esta programação não é garantida. Durante essas reinicializações, atualizações críticas e compatíveis com versões anteriores são automaticamente implementadas no sistema operacional. A imagem do aplicativo permanecerá a mesma durante as reinicializações.
Verificação de integridade
O App Engine envia solicitações periódicas de verificação de integridade para confirmar que uma instância está em execução e para verificar se uma instância foi totalmente iniciada e está pronta para aceitar solicitações recebidas. Por padrão, elas são ativadas e conhecidas como verificações de integridade divididas. Uma instância que recebe uma verificação de integridade precisa responder à verificação de integridade dentro de um intervalo de tempo especificado.
Se você precisar estender o comportamento padrão das verificações de integridade divididas para seu aplicativo, poderá personalizar o arquivo app.yaml
para configurar dois tipos de verificações de integridade:
- As verificações de atividade detectam se uma instância de VM e o contêiner dela estão em execução. Quando uma instância de VM falha na verificação de atividade, a instância é reiniciada automaticamente. As verificações de atividade podem falhar devido aos limites e intervalos de tempo configurados ou à falha do contêiner.
- As verificações de prontidão detectam se uma instância de VM está pronta para aceitar solicitações recebidas. Se uma instância de VM falhar na verificação de prontidão, isso significa que a instância de VM ainda não terminou a inicialização e não está pronta para receber solicitações. Quando a instância de VM for aprovada na verificação de prontidão e tiver concluído a inicialização, ela será adicionada ao pool de instâncias disponíveis.
Saiba mais sobre os comportamentos da verificação de integridade divididos no guia Como migrar para verificações de integridade divididas.
Conforme a instância passa por essas verificações de integridade, os registros do App Engine podem indicar que a instância está em qualquer um dos seguintes estados:
- Íntegro A instância recebeu as solicitações de verificação de integridade e as está
processando. Um status íntegro indica que a instância tem mais de 820 MB de espaço em disco disponível e precisa responder a uma verificação de integridade com um código de status HTTP
200
. - Não íntegro A instância recusou as solicitações de verificação de integridade e não respondeu a um número especificado de solicitações de verificação de integridade consecutivas. O App Engine continuará enviando solicitações de verificação de integridade e reiniciará a instância se uma instância não íntegra continuar falhando ao responder a um número predeterminado de verificações de integridade consecutivas.
- Lameduck. A instância está programada para ser encerrada ou reiniciada.
Durante os desligamentos, a instância conclui as solicitações em andamento e recusa novas
solicitações. O aplicativo retorna um código
503
para indicar que a instância não pode processar solicitações. Antes de uma instância ser encerrada ou reiniciada, a execução do script de desligamento precisa ser limitada e não pode ser configurada para um tempo menor ou maior. - App Lameduck. A instância está se preparando para veicular o tráfego. O aplicativo
retorna um código
503
para indicar que a instância não consegue processar solicitações. Quando uma instância de VM tiver concluído a inicialização e estiver pronta para veicular o tráfego, ela se tornará íntegra e processará as solicitações. Se uma instância de VM não for iniciada a tempo, ela será alterada para não íntegra e será removida.
O comportamento do lameduck e do app lameduck faz parte de um processo normal pelo qual a instância de VM passa.
Como monitorar o uso de recursos
A página "Instâncias" do Console do Google Cloud fornece visibilidade sobre o desempenho das instâncias. Veja o uso de memória e CPU de cada instância, bem como o tempo de atividade, o número de solicitações e outras estatísticas. Você também pode iniciar manualmente o processo de encerramento de qualquer instância.
NTP com ambiente flexível do App Engine
O ambiente flexível do App Engine tem serviços de protocolo de tempo de rede (NTP, na sigla em inglês) que usam servidores NTP do Google. No entanto, os serviços NTP no ambiente flexível não são editáveis.
Local da instância
As instâncias são localizadas automaticamente por região geográfica, de acordo com as configurações do projeto.
Escalonamento de instâncias
Durante a execução de um aplicativo, as solicitações recebidas são encaminhadas para uma instância atual ou nova do serviço/versão apropriada. Cada versão ativa pode ter
pelo menos uma instância em execução e o tipo de escalonamento de um serviço ou versão
controla como as instâncias são criadas.
Você especifica o tipo de escalonamento no
app.yaml
do app.
Por padrão, o aplicativo usa o escalonamento automático, o que significa que o App Engine
gerenciará o número de instâncias inativas.
- Escalonamento automático
- O escalonamento automático cria instâncias baseadas na taxa de solicitação, nas latências de resposta
e em outras métricas do aplicativo. É possível especificar limites para cada uma dessas
métricas, bem como um número mínimo de instâncias para continuar em execução o tempo todo,
configurando o elemento
automatic_scaling
.
- Escalonamento manual
- O escalonamento manual especifica o número de instâncias que são executadas continuamente, seja qual for o nível de carga. Isso permite a realização de tarefas como inicializações complexas e a execução de aplicativos que dependem do estado da memória ao longo do tempo.