Como gerenciar recursos de apps

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, você pode reduzir o número de instâncias usadas para veicular o aplicativo. Stackdriver Trace é uma ferramenta útil para ver dados sobre latência e entender alterações em potencial para diminuí-la.

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

  • Aumentar o armazenamento em cache de dados compartilhados e frequentemente acessados: ou seja, usar 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. O armazenamento de dados em cache, mesmo que seja feito por alguns segundos, pode afetar a eficiência da veiculação do tráfego pelo aplicativo.
  • Usar o Memcache do App Engine de maneira mais eficiente: 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, a latência do usuário poderá ser bastante reduzida. A fila de tarefas pode oferecer muito mais controle sobre as taxas de execução e ajudar a reduzir a carga.
  • Usar o Cloud Datastore com mais eficiência: consulte mais detalhes abaixo.
  • Executar várias chamadas de busca de URL em paralelo:
    • Agrupe várias chamadas de busca de URL, em vez de processar cada uma em solicitações individuais voltadas para o usuário, e processe-as em uma tarefa off-line paralelamente por meio da busca de URL assíncrona.
    • Use a API URL Fetch assíncrona.
  • Gravar de maneira assíncrona em sessões HTTP: o Java permite que o aplicativo seja configurado para gravar dados da sessão HTTP de maneira assíncrona no Cloud Datastore adicionando <async-session-persistence enabled="true"/> ao appengine-web.xml. Os dados da sessão são sempre gravados de maneira síncrona no Memcache do App Engine. Se uma solicitação tentar ler os dados da sessão quando o Memcache do App Engine não estiver disponível, ela fará failover no Cloud Datastore, que pode não ter a atualização mais recente. Isso significa que o aplicativo pode ler os dados desatualizados da sessão. No entanto, na maioria dos aplicativos, o benefício da latência supera o risco.

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

O arquivo de configuração appengine-web.xml contém várias definições que você pode usar para ajustar o dilema entre desempenho e carga de recursos em 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 (em inglês) para ver os efeitos dessas configurações no App Engine.

Como ativar solicitações simultâneas no Java

Se esta configuração for ativada, o número de instâncias necessárias para exibir o tráfego do aplicativo será reduzido. No entanto, o aplicativo precisa ser threadsafe para que isso funcione corretamente. Leia sobre como usar solicitações simultâneas ativando o threadsafe no arquivo appengine-web.xml.

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 atual não estiver disponível. A fila de tarefas tentará novamente e recuará até que uma instância atual 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, as solicitações sem esse conjunto de cabeçalho ainda podem causar 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.
  • Use back-ends para controlar por completo o número de instâncias usadas para a execução da tarefa. É possível usar filas push com back-ends dinâmicos ou filas pull com back-ends residentes.

Exibir conteúdo estático sempre que possível

A veiculação de conteúdo estático Java é gerenciada pela infraestrutura especializada do App Engine, que não consome horas de instância. Se você precisar definir cabeçalhos personalizados, use a Blobstore API. 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 Cloud Datastore, no tamanho dos índices do Cloud Datastore, no tamanho das tarefas na fila de tarefas e na quantidade de dados armazenados no Blobstore. Você pode executar 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, para reduzir os custos de armazenamento do índice.

Como gerenciar o uso do Cloud Datastore

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

  • O visualizador de dados do Console do GCP exibe o número de operações de gravação que foram necessárias para criar cada entidade no Cloud Datastore local. É possível usar 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 do GCP.
  • Ao projetar o modelo de dados, escreva as consultas de maneira que os índices personalizados sejam evitados. 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 indexadas, que são o padrão, por propriedades não indexadas (Java). Isso reduz o número de operações de gravação no Cloud Datastore quando uma entidade é incluída. Cuidado: se, posteriormente, você decidir que precisa realizar consultas na propriedade não indexada, além de modificar o código para voltar a usar as propriedades indexadas, também será preciso executar uma redução de mapa em todas as entidades para incluí-las novamente.
  • Devido às melhorias no planejador de consultas do Cloud Datastore nas versões 1.5.2 e 1.5.3 do App Engine, as consultas agora podem exigir 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 somente de chave em vez de consultas de entidade, quando possível.
  • Para diminuir a latência, substitua get()s de várias entidades por um get() de lote.
  • Use os cursores do Cloud Datastore para paginação em vez de desvio.
  • Carregue em paralelo várias RPCs do Cloud Datastore por meio da Async Datastore API.

Observação: exemplo de pequenas operações do Cloud Datastore são chamadas para alocar códigos ou consultas somente de chave do Cloud Datastore. Consulte a página de preços para mais informações sobre custos.

Como gerenciar a largura de banda

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

A banda larga de entrada é mais difícil de ser controlada, porque é a quantidade de dados que os usuários enviam para o aplicativo. No entanto, essa é uma boa oportunidade para mencionar o serviço de proteção contra DoS. Ele permite bloquear o tráfego de IPs considerados abusivos.

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.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Ambiente padrão do App Engine para Java 8