Como gerenciar recursos do app

O App Engine gera relatórios de uso sobre o desempenho do aplicativo e a utilização de recursos. Abaixo estão listadas as estratégias em potencial para gerenciar os recursos com mais eficiência. Para mais informações, consulte a página de preços.

Como ver relatórios de uso

Ao avaliar o desempenho do aplicativo, você precisa verificar o número de instâncias em que o aplicativo está em execução e como ele consome recursos.

Ver os relatórios de uso do painel

Ver a página Instâncias

Nas seções a seguir, você verá algumas estratégias para gerenciar recursos.

Como gerenciar o escalonamento dinâmico de instância

Como diminuir a latência

A latência do aplicativo afeta o número de instâncias necessárias para processar o tráfego. Ao diminuir a latência, é possível reduzir o número de instâncias usadas para exibir o aplicativo. O Cloud Trace é uma ferramenta útil para visualizar dados sobre latência e entender possíveis alterações para diminuí-la.

Depois de usar o Cloud Trace para ver a latência, execute algumas das seguintes estratégias para reduzir a latência:

  • Aumente o armazenamento em cache de dados compartilhados e frequentemente acessados: ou seja, use o Memcache do App Engine. Além disso, definir cabeçalhos de controle de cache do aplicativo pode impactar a eficiência com que os dados são armazenados em cache pelos servidores e navegadores. Armazenar em cache, mesmo que por apenas alguns segundos, afeta a eficiência da exibição do tráfego pelo aplicativo. Os aplicativos Python também precisam usar o cache no tempo de execução.
  • Use o Memcache do App Engine com mais eficiência: use chamadas em lote para as operações get, set, delete etc., em vez de uma série de chamadas individuais. Considere usar a API Memcache Async.
  • Usar tarefas para um recurso não vinculado a uma solicitação: se o aplicativo executar um trabalho que possa ser feito além do escopo de uma solicitação voltada para o usuário, coloque-o em uma tarefa. Se você enviar esse trabalho para a fila de tarefas em vez de aguardar a conclusão dele antes do retorno de uma resposta, será possível reduzir significativamente a latência do usuário. Assim, a fila de tarefas oferece muito mais controle sobre as taxas de execução e ajuda a reduzir a carga.
  • Use o Firestore no modo Datastore (Datastore) com mais eficiência: consulte abaixo mais detalhes.
  • Execute várias chamadas de busca de URL em paralelo:
    • Reúna em lote várias chamadas de busca de URL, em vez de lidar com cada uma em solicitações individuais voltadas para o usuário, e processe-as em uma tarefa off-line em paralelo por meio da busca de URL assíncrona.
    • Use a URL Fetch API assíncrona.
  • Para sessões HTTP, grave de forma assíncrona.

Alterar configurações de desempenho do escalonamento automático

O arquivo de configuração app.yaml contém várias definições que você pode usar para ajustar a compensação entre desempenho e carga de recursos para uma versão específica do aplicativo. Para uma lista das configurações de escalonamento automático disponíveis, consulte os elementos de escalonamento. Assista ao vídeo Novas configurações do programador do App Engine para ver os efeitos dessas configurações.

Ativar solicitações simultâneas no Python

As instâncias do aplicativo podem veicular várias solicitações simultâneas no Python. Se esta configuração for ativada, o número de instâncias necessárias para veicular o tráfego do aplicativo será reduzido. No entanto, o aplicativo precisa ser seguro para thread para que isso funcione corretamente. Leia sobre como usar solicitações simultâneas ativando o threadsafe no seu arquivo app.yaml.

Como definir configurações da fila de tarefas

As configurações padrão de fila de tarefas são ajustadas visando o desempenho. Com esses padrões, quando você coloca várias tarefas em uma fila simultaneamente, é provável que novas instâncias de front-end sejam iniciadas. Veja algumas sugestões para o ajuste da fila de tarefas que visam preservar as horas da instância:

  • Defina o cabeçalho X-AppEngine-FailFast nas tarefas que não sejam sensíveis à latência. Esse cabeçalho instrui o programador a cancelar imediatamente a solicitação se uma instância não estiver disponível. A fila de tarefas tentará novamente e recuará até que uma instância fique disponível para atender à solicitação. No entanto, é importante observar que, quando as solicitações com o conjunto X-AppEngine-FailFast ocupam instâncias, ainda será possível que as solicitações sem esse conjunto de cabeçalho causem a inicialização de novas instâncias.
  • Defina as configurações da fila de tarefas.
    • Ao definir o parâmetro "rate" com um valor menor, a fila de tarefas executará as tarefas mais lentamente.
    • Ao definir o parâmetro "max_concurrent_requests" com um valor menor, menos tarefas serão executadas simultaneamente.
  • Exibir conteúdo estático quando possível

    A veiculação de conteúdo estático em Python é processada pela infraestrutura especializada do App Engine, que não consome horas de instância. Se você precisar configurar cabeçalhos personalizados, use a API Blobstore. A veiculação real da resposta do Blob não consome horas de instância.

    Como gerenciar o armazenamento de aplicativos

    O App Engine calcula os custos de armazenamento com base no tamanho das entidades no Datastore, no tamanho dos índices do armazenamento de dados, no tamanho das tarefas na fila de tarefas e no volume de dados armazenados no Blobstore. Execute estes procedimentos para não armazenar mais dados do que o necessário:

    • Exclua todas as entidades ou os blobs de que o aplicativo não precisa mais.
    • Remova todos os índices desnecessários, conforme abordado na seção Como gerenciar o uso do Datastore abaixo, para reduzir os custos de armazenamento do índices.

    Como gerenciar o uso do Datastore

    O App Engine é responsável pelo número de operações realizadas no Datastore. Estas são algumas das estratégias capazes de reduzir o consumo de recursos do Datastore, além de diminuir a latência em solicitações para o Datastore:

    • O visualizador de dados do console mostra o número de operações de gravação que foram necessárias para criar cada entidade no Datastore local. Use essas informações para compreender o custo da gravação de cada entidade. Consulte Noções básicas sobre os custos de gravação para saber mais sobre como interpretar esses dados.
    • Remova qualquer índice desnecessário. Isso reduzirá os custos de armazenamento e gravação da entidade. Use a funcionalidade "Get Indexes" para ver quais índices estão definidos no aplicativo. Veja quais índices são exibidos para o aplicativo na Página de pesquisa do console.
    • Ao projetar o modelo de dados, grave as consultas de modo a evitar índices personalizados. Leia a documentação sobre Consultas e índices para saber mais sobre como o App Engine gera índices.
    • Sempre que possível, substitua as propriedades com índice (que são o padrão) por propriedades sem índice ( Python). Isso reduz o número de operações de gravação no Datastore quando uma entidade é incluída. Cuidado: se mais tarde você decidir que precisa realizar consultas na propriedade sem índice, será necessário modificar o código para voltar a usar propriedades com índice, bem como executar uma redução de mapa em todas as entidades para incluí-las novamente.
    • Devido às melhorias no planejador de consultas do Datastore nas versões 1.5.2 e 1.5.3 do App Engine, as consultas agora exigem menos índices do que antes. Mesmo podendo manter certos índices personalizados por motivos de desempenho, é possível excluir outros para reduzir custos de armazenamento e gravação de entidade.
    • Reconfigure o modelo de dados para substituir consultas por busca por chave, que é mais acessível e mais eficiente.
    • Use consultas apenas por chaves em vez de consultas de entidade, quando possível.
    • Para diminuir a latência, substitua os get()s de várias entidades por um get() em lote.
    • Use os cursores do Datastore para paginação em vez de deslocamento.
    • Carregue em paralelo várias RPCs do Datastore por meio da API Async Datastore.

    Observação: pequenas operações do Datastore incluem para alocar IDs do Datastore ou consultas apenas por chaves. Consulte a página de preços para mais informações sobre custos.

    Como gerenciar a largura de banda

    Para reduzir a largura de banda de saída, defina o cabeçalho Cache-Control apropriado nas respostas e prazos de validade razoáveis para arquivos estáticos. Usar cabeçalhos Cache-Control públicos dessa maneira permitirá que os servidores proxy e o navegador dos clientes armazenem em cache as respostas do período designado.

    A largura de banda de entrada é mais difícil de controlar, já que é a quantidade de dados que os usuários enviam ao seu aplicativo. No entanto, é possível usar regras de firewall do App Engine para permitir ou restringir intervalos de endereços IP e sub-redes.

    Como gerenciar outros recursos

    Uma das melhores estratégias de auditoria do uso da Email API é usando Appstats para verificar se você não está realizando mais chamadas do que o necessário. É sempre uma boa ideia conferir as taxas de erro e se você está realizando chamadas inválidas. Em alguns casos, é possível detectar essas chamadas com antecedência.