O App Engine gera relatórios de utilização sobre o desempenho e a utilização de recursos da sua aplicação. Seguem-se potenciais estratégias para gerir os seus recursos de forma mais eficiente. Para mais informações, consulte a página de preços.
Ver relatórios de utilização
Ao avaliar o desempenho da aplicação, deve verificar o número de instâncias em que a aplicação está a ser executada e como a aplicação consome recursos.
Veja os relatórios de utilização do painel de controlo
As secções seguintes sugerem algumas estratégias para gerir recursos.
Gerir o escalamento dinâmico de instâncias
Diminuir a latência
A latência da aplicação afeta o número de instâncias necessárias para processar o seu tráfego. Ao diminuir a latência, pode reduzir o número de instâncias usadas para publicar a sua aplicação. O Cloud Trace é uma ferramenta útil para ver dados sobre a latência e compreender potenciais alterações para a diminuir.
Depois de usar o Cloud Trace para ver a latência, experimente algumas das seguintes estratégias para reduzir a latência:
- Aumente o armazenamento em cache dos dados partilhados acedidos com frequência: esta é outra forma de dizer que deve usar o App Engine Memcache. Além disso, a definição dos cabeçalhos de controlo de cache da sua aplicação pode ter um impacto significativo na eficiência com que os seus dados são colocados em cache pelos servidores e navegadores. Mesmo o armazenamento em cache de elementos durante alguns segundos pode ter um impacto na eficiência com que a sua aplicação publica tráfego.
- Use o App Engine Memcache de forma mais eficiente: use chamadas em lote para obter, definir, eliminar, etc., em vez de uma série de chamadas individuais.
- Use tarefas para funcionalidades não associadas a pedidos: se a sua aplicação realizar trabalho que possa ser feito fora do âmbito de um pedido do utilizador, coloque-o numa tarefa! O envio deste trabalho para a fila de tarefas, em vez de esperar que seja concluído antes de devolver uma resposta, pode reduzir significativamente a latência visível para o utilizador. Em seguida, a fila de tarefas pode dar-lhe muito mais controlo sobre as taxas de execução e ajudar a suavizar a carga.
- Usar o Firestore no modo Datastore (Datastore) de forma mais eficiente: consulte mais detalhes abaixo.
- Executar várias chamadas de obtenção de URL em paralelo:
- Agrupe várias chamadas URL Fetch em vez de as processar individualmente em pedidos individuais orientados para o utilizador e processe-as numa tarefa offline em paralelo através do URL Fetch assíncrono.
- Use goroutines.
- Para sessões HTTP, escreva de forma assíncrona.
Altere as definições de desempenho do ajuste de escala automático
O ficheiro de configuração contém várias definições que pode usar para ajustar o compromisso entre o desempenho e o carregamento de recursos para uma versão específica da sua app. Para ver uma lista das definições de escalabilidade automática disponíveis, consulte os elementos de escalabilidade.app.yaml
Veja o vídeo Novas definições do Scheduler do App Engine para ver os efeitos destas definições.
Configurar definições da fila de tarefas
As predefinições da fila de tarefas estão otimizadas para o desempenho. Com estas predefinições, quando coloca várias tarefas numa fila em simultâneo, é provável que cause o início de novas instâncias do front-end. Seguem-se algumas sugestões sobre como ajustar a fila de tarefas para conservar as horas de instância:
- Defina o cabeçalho X-AppEngine-FailFast em tarefas que não sejam sensíveis à latência. Este cabeçalho indica ao programador que deve falhar imediatamente o pedido se não estiver disponível uma instância existente. A fila de tarefas vai tentar novamente e recuar até que uma instância existente fique disponível para processar o pedido. No entanto, é importante ter em atenção que, quando os pedidos com o cabeçalho X-AppEngine-FailFast definido ocupam instâncias existentes, os pedidos sem esse cabeçalho definido podem continuar a fazer com que sejam iniciadas novas instâncias.
Apresente conteúdo estático sempre que possível
A publicação de conteúdo estático é processada por uma infraestrutura especializada do App Engine, que não consome horas de instância. Se precisar de definir cabeçalhos personalizados, use a API Blobstore. A publicação real da resposta do blob não consome horas de instância.
Gerir o armazenamento de aplicações
O App Engine calcula os custos de armazenamento com base no tamanho das entidades no Datastore, no tamanho dos índices do Datastore, no tamanho das tarefas na fila de tarefas e na quantidade de dados armazenados no Blobstore. Seguem-se algumas medidas que pode tomar para se certificar de que não armazena mais dados do que o necessário:
- Elimine todas as entidades ou blobs de que a sua aplicação já não precisa.
- Remova todos os índices desnecessários, conforme abordado na secção Gerir a utilização do Datastore abaixo, para reduzir os custos de armazenamento de índices.
Gerir a utilização do Datastore
O App Engine contabiliza o número de operações realizadas no Datastore. Seguem-se algumas estratégias que podem resultar numa redução do consumo de recursos do Datastore, bem como numa menor latência para pedidos ao Datastore:
- O Google Cloud visualizador de dados da consola apresenta o número de operações de gravação necessárias para criar cada entidade no seu Datastore local. Pode usar estas informações para compreender o custo de escrever cada entidade. Consulte o artigo Compreender os custos de gravação para ver informações sobre como interpretar estes dados.
- Remova todos os índices desnecessários, o que reduz os custos de armazenamento e de gravação de entidades. Pode ver que índices estão atualmente a ser apresentados para a sua aplicação na Google Cloud página de pesquisa da consola.
- Ao criar o modelo de dados, pode escrever as consultas de forma a evitar completamente os índices personalizados. Leia a documentação Consultas e índices para mais informações sobre como o App Engine gera índices.
- Sempre que possível, substitua as propriedades indexadas (que são as predefinições) por propriedades não indexadas ( ), o que reduz o número de operações de escrita do Datastore quando coloca uma entidade. Atenção: se decidir mais tarde que precisa de poder consultar a propriedade não indexada, não só tem de modificar o código para usar novamente propriedades indexadas, como também tem de executar um map reduce em todas as entidades para as repor.
- Devido às melhorias do planeador de consultas do Datastore nas versões 1.5.2 e 1.5.3 do App Engine, as suas consultas podem agora exigir menos índices do que anteriormente. Embora possa optar por manter determinados índices personalizados por motivos de desempenho, pode eliminar outros, reduzindo os custos de armazenamento e de gravação de entidades.
- Reconfigure o modelo de dados para poder substituir as consultas por obtenção por chave, que é mais barata e eficiente.
- Sempre que possível, use consultas apenas de chaves em vez de consultas de entidades.
- Para diminuir a latência, substitua várias entidades
get()
s por um loteget()
. - Use cursores do Datastore para paginação em vez de deslocamento.
- Paralelize vários RPCs do Datastore através da API Datastore assíncrona.
Nota: as operações do Datastore pequenas incluem chamadas para atribuir IDs do Datastore ou consultas apenas de chaves. Consulte a página de preços para mais informações sobre os custos.