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
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. 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. 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.
- 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 do Google Cloud 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. É possível ver os índices em exibição no momento para seu aplicativo na página de pesquisa do console do Google Cloud.
- 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 umget()
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.