Gestione delle risorse dell'app

App Engine genera report sull'utilizzo relativi alle prestazioni e all'utilizzo delle risorse della tua applicazione. Di seguito sono elencate potenziali strategie per gestire le risorse in modo più efficiente. Per ulteriori informazioni, consulta la pagina relativa ai prezzi.

Visualizzazione dei rapporti di utilizzo

Quando valuti il rendimento dell'applicazione, devi controllare il numero di istanze in esecuzione e il modo in cui l'applicazione consuma le risorse.

Visualizzare i report sull'utilizzo della dashboard

Visualizzare la pagina Istanze

Le sezioni seguenti suggeriscono alcune strategie per la gestione delle risorse.

Gestione della scalabilità dinamica delle istanze

Riduzione della latenza

La latenza dell'applicazione influisce sul numero di istanze necessarie per gestire il traffico. Riducendo la latenza, puoi ridurre il numero di istanze utilizzate per eseguire la tua applicazione. Cloud Trace è uno strumento utile per visualizzare i dati sulla latenza e comprendere le potenziali modifiche per ridurla.

Dopo aver utilizzato Cloud Trace per visualizzare la latenza, prova alcune delle seguenti strategie per ridurla:

  • Aumenta la memorizzazione nella cache dei dati condivisi a cui si accede di frequente: un altro modo per dire: utilizza Memcache di App Engine. Inoltre, l'impostazione delle intestazioni cache-control dell'applicazione può avere un impatto significativo sull'efficienza con cui i dati vengono memorizzati nella cache da server e browser. Anche la memorizzazione nella cache per alcuni secondi può influire sull'efficienza con cui la tua applicazione gestisce il traffico.
  • Utilizza Memcache di App Engine in modo più efficiente: utilizza chiamate batch per get, set, delete e così via anziché una serie di chiamate singole.
  • Utilizza le attività per le funzionalità non legate alle richieste: se la tua applicazione svolge un lavoro che può essere svolto oltre l'ambito di una richiesta rivolta agli utenti, inseriscilo in un'attività. L'invio di questo lavoro alla coda di attività anziché attendere il completamento prima di restituire una risposta può ridurre notevolmente la latenza per l'utente. La coda di attività può quindi offrirti un maggiore controllo sulle frequenze di esecuzione e contribuire ad attenuare il carico.
  • Utilizzare Firestore in modalità Datastore (Datastore) in modo più efficiente: di seguito sono riportati ulteriori dettagli.
  • Esegui più chiamate URL Fetch in parallelo:
    • Raggruppa più chiamate URL Fetch anziché gestirle singolarmente all'interno di singole richieste rivolte agli utenti e gestirle in un'attività offline in parallelo tramite URL Fetch asincrono.
    • Utilizza le goroutine.
  • Per le sessioni HTTP, scrivi in modo asincrono.

Modificare le impostazioni di prestazioni della scalabilità automatica

Il file di configurazione app.yaml contiene diverse impostazioni che puoi utilizzare per regolare il compromesso tra prestazioni e carico delle risorse per una versione specifica della tua app. Per un elenco delle impostazioni di scalabilità automatica disponibili, consulta gli elementi di scalabilità. Guarda il video Nuove impostazioni del programma di App Engine per vedere gli effetti di queste impostazioni.

Nota:per tutte le istanze Go le richieste in parallelo sono attivate automaticamente.

Configurazione delle impostazioni della coda di attività

Le impostazioni predefinite per la coda di attività sono ottimizzate per il rendimento. Con questi valori predefiniti, se inserisci contemporaneamente più attività in una coda, è probabile che vengano avviate nuove istanze frontend. Ecco alcuni suggerimenti su come ottimizzare la coda di attività per risparmiare ore di istanza:

  • Imposta l'intestazione X-AppEngine-FailFast sulle attività non sensibili alla latenza. Questa intestazione indica allo scheduler di rifiutare immediatamente la richiesta se non è disponibile un'istanza esistente. La coda di attività riproverà e eseguirà il back-off fino a quando un'istanza esistente non sarà disponibile per soddisfare la richiesta. Tuttavia, è importante notare che quando le richieste con X-AppEngine-FailFast impostato occupano le istanze esistenti, le richieste senza questo header impostato potrebbero comunque causare l'avvio di nuove istanze.

Pubblica contenuti statici, se possibile

La pubblicazione di contenuti statici viene gestita da un'infrastruttura App Engine specializzata, che non consuma ore di istanza. Se devi impostare intestazioni personalizzate, utilizza l'API Blobstore. La pubblicazione effettiva della risposta del blob non consuma ore di istanze.

Gestione dello spazio di archiviazione delle applicazioni

App Engine calcola i costi di archiviazione in base alle dimensioni delle entità nel Datastore, alle dimensioni degli indici di Datastore, alle dimensioni delle attività nella coda di attività e alla quantità di dati archiviati in Blobstore. Ecco alcune operazioni che puoi svolgere per assicurarti di non memorizzare più dati del necessario:

  • Elimina le entità o i blob di cui la tua applicazione non ha più bisogno.
  • Rimuovi gli indici non necessari, come descritto nella sezione Gestire l'utilizzo del datastore di seguito, per ridurre i costi di archiviazione degli indici.

Gestione dell'utilizzo di Datastore

App Engine tiene conto del numero di operazioni eseguite in Datastore. Di seguito sono riportate alcune strategie che possono ridurre il consumo di risorse di Datastore e la latenza delle richieste a Datastore:

  • Il visualizzatore dei dati della console Google Cloud mostra il numero di operazioni di scrittura obbligatorie per creare ogni entità nel tuo Datastore locale. Puoi utilizzare queste informazioni per comprendere il costo di scrittura di ogni entità. Per informazioni su come interpretare questi dati, consulta la sezione Informazioni sui costi di scrittura.
  • Rimuovi gli indici non necessari, in modo da ridurre i costi di archiviazione e scrittura delle entità. Puoi vedere quali indici vengono attualmente pubblicati per la tua applicazione nella pagina Ricerca della console Google Cloud.
  • Quando progetti il tuo modello dei dati, potresti essere in grado di scrivere le query in modo da evitare del tutto gli indici personalizzati. Leggi la documentazione su Query e indici per saperne di più su come App Engine genera gli indici.
  • Se possibile, sostituisci le proprietà indicizzate (che sono quelle predefinite) con proprietà non indicizzate ( ), in modo da ridurre il numero di operazioni di scrittura di Datastore quando inserisci un'entità. Fai attenzione: se in un secondo momento decidi di dover eseguire query sulla proprietà non indicizzata, non solo dovrai modificare il codice per utilizzare nuovamente le proprietà indicizzate, ma dovrai eseguire un'operazione map reduce su tutte le entità per reimpostarle.
  • Grazie ai miglioramenti al pianificatore delle query di Datastore nelle release di App Engine 1.5.2 e 1.5.3, ora le query potrebbero richiedere meno indici rispetto al passato. Sebbene tu possa comunque scegliere di mantenere alcuni indici personalizzati per motivi di prestazioni, potresti essere in grado di eliminarne altri, riducendo i costi di archiviazione e scrittura delle entità.
  • Riconfigura il modello dei dati in modo da poter sostituire le query con il recupero per chiave, che è più economico ed efficiente.
  • Se possibile, utilizza query solo con chiavi anziché query con entità.
  • Per ridurre la latenza, sostituisci più get() entità con un get() batch.
  • Utilizza i cursori Datastore per l'impaginazione anziché l'offset.
  • Esegui il parallelismo di più RPC di Datastore tramite l'API Datastore asincrona.

Nota: le operazioni Datastore ridotte comprendono chiamate per l'allocazione di ID o query basate solo su chiavi di Datastore. Per ulteriori informazioni sui costi, consulta la pagina relativa ai prezzi.

Gestione di altre risorse

È sempre buona prassi verificare i tassi di errore e controllare se stai effettuando chiamate non valide. In alcuni casi potrebbe essere possibile rilevare queste chiamate frühzeitig.