Gestione delle risorse dell'app

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

Visualizzazione dei rapporti di utilizzo

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

Visualizzare i report sull'utilizzo della dashboard

Visualizza 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 diminuire il numero di istanze utilizzate per pubblicare 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 App Engine Memcache. Inoltre, l'impostazione delle intestazioni cache-control dell'applicazione può influire in modo significativo sull'efficienza con cui i dati vengono memorizzati nella cache da server e browser. Anche la memorizzazione nella cache per pochi secondi può influire sull'efficienza con cui la tua applicazione gestisce il traffico.
  • Utilizza App Engine Memcache in modo più efficiente: utilizza chiamate batch per get, set, delete e così via anziché una serie di chiamate individuali. Valuta la possibilità di utilizzare l'API asincrona Memcache.
  • Utilizza le attività per funzionalità non associate a richieste: se la tua applicazione esegue operazioni che possono essere svolte al di fuori dell'ambito di una richiesta rivolta agli utenti, inseriscile in un'attività. L'invio di questo lavoro a Task Queue anziché attendere il completamento prima di restituire una risposta può ridurre significativamente la latenza rivolta agli utenti. Task Queue può quindi offrirti un controllo molto maggiore sui tassi di esecuzione e contribuire a uniformare il carico.
  • Utilizzare Firestore in modalità Datastore (Datastore) in modo più efficiente: vedi di seguito per maggiori dettagli.
  • Esegui più chiamate di recupero URL in parallelo:
    • Raggruppa più chiamate URL Fetch anziché gestirle singolarmente all'interno di singole richieste rivolte agli utenti e gestiscile in un'attività offline in parallelo tramite URL Fetch asincrono.
    • Utilizza l'API URL Fetch asincrona.
  • Per le sessioni HTTP, scrivi in modo asincrono: Java ti consente di configurare l'applicazione per scrivere in modo asincrono i dati delle sessioni HTTP in Datastore aggiungendo <async-session-persistence enabled="true"/> a appengine-web.xml. I dati di sessione vengono sempre scritti in modo sincrono in App Engine Memcache e se una richiesta tenta di leggere i dati di sessione quando App Engine Memcache non è disponibile, il failover viene eseguito su Datastore, che potrebbe non avere ancora l'aggiornamento più recente. Ciò significa che esiste un piccolo rischio che la tua applicazione visualizzi dati di sessione obsoleti, ma per la maggior parte delle applicazioni il vantaggio della latenza supera di gran lunga il rischio.

Modificare le impostazioni di rendimento della scalabilità automatica

Il file di configurazione appengine-web.xml contiene diverse impostazioni che puoi utilizzare per modificare 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 Elementi di scalabilità. Guarda il video New Scheduler Settings di App Engine per vedere gli effetti di queste impostazioni.

Abilitare le richieste simultanee in Java

L'attivazione di questa impostazione ridurrà il numero di istanze necessarie per gestire il traffico della tua applicazione, ma la tua applicazione deve essere thread-safe per funzionare correttamente. Scopri come utilizzare le richieste simultanee attivando threadsafe nel file appengine-web.xml.

Configurazione delle impostazioni di Task Queue

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

  • Imposta l'intestazione X-AppEngine-FailFast per le attività che non sono sensibili alla latenza. Questa intestazione indica allo scheduler di non riuscire immediatamente la richiesta se non è disponibile un'istanza esistente. Task Queue riproverà e eseguirà il backoff finché un'istanza esistente non diventerà disponibile per gestire la richiesta. Tuttavia, è importante notare che quando le richieste con X-AppEngine-FailFast impostato occupano istanze esistenti, le richieste senza questo set di intestazioni potrebbero comunque causare l'avvio di nuove istanze.
  • Configura le impostazioni della coda di attività.
    • Se imposti il parametro "rate" su un valore inferiore, Task Queue eseguirà le attività a una velocità inferiore.
    • Se imposti il parametro "max_concurrent_requests" su un valore inferiore, verranno eseguite meno attività contemporaneamente.

Pubblica contenuti statici, se possibile

La pubblicazione di contenuti statici in Java 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 Blob non consuma ore di istanza.

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 del datastore, alle dimensioni delle attività nella coda di attività e alla quantità di dati archiviati in Blobstore. Ecco alcune cose che puoi fare per assicurarti di non archiviare 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 Gestione dell'utilizzo di 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. Ecco alcune strategie che possono ridurre il consumo di risorse Datastore, nonché la latenza delle richieste a Datastore:

  • Il visualizzatore di dati della console Google Cloud mostra il numero di operazioni di scrittura necessarie 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à. Utilizza la funzionalità"Ottieni indici" per vedere quali indici sono definiti nella tua applicazione. Puoi vedere quali indici vengono attualmente utilizzati per la tua applicazione nella pagina di ricerca della consoleGoogle Cloud .
  • Quando progetti il modello dei dati, potresti essere in grado di scrivere le query in modo da evitare del tutto gli indici personalizzati. Per saperne di più su come App Engine genera gli indici, leggi la documentazione Query e indici.
  • Quando possibile, sostituisci le proprietà indicizzate (che sono quelle predefinite) con proprietà non indicizzate (Java ), che riduce il numero di operazioni di scrittura di Datastore quando inserisci un'entità. Attenzione: se in un secondo momento decidi di dover eseguire query sulla proprietà non indicizzata, dovrai non solo modificare il codice per utilizzare nuovamente le proprietà indicizzate, ma dovrai anche eseguire una map reduce su tutte le entità per ripristinarle.
  • Grazie ai miglioramenti apportati al pianificatore di query Datastore nelle versioni 1.5.2 e 1.5.3 di App Engine, ora le tue query potrebbero richiedere meno indici rispetto a prima. Anche se potresti comunque scegliere di mantenere determinati indici personalizzati per motivi di prestazioni, potresti essere in grado di eliminare 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 basate solo su chiavi anziché query di entità.
  • Per ridurre la latenza, sostituisci più entità get() con un batch get().
  • Utilizza i cursori Datastore per la paginazione anziché l'offset.
  • Parallelizza più RPC Datastore tramite l'API Async Datastore.

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 Prezzi.

Gestione della larghezza di banda

Per ridurre la larghezza di banda in uscita, puoi impostare l'intestazione Cache-Control appropriata nelle risposte e impostare tempi di scadenza ragionevoli per i file statici. L'utilizzo delle intestazioni Cache-Control pubbliche in questo modo consentirà ai server proxy e al browser dei tuoi client di memorizzare nella cache le risposte per il periodo di tempo designato.

La larghezza di banda in entrata è più difficile da controllare, poiché corrisponde alla quantità di dati che gli utenti inviano alla tua app. Tuttavia, puoi utilizzare le regole firewall di App Engine per consentire o limitare intervalli di indirizzi IP e subnet.

Gestione di altre risorse

Una delle strategie migliori per controllare l'utilizzo dell'API Email è utilizzare Cloud Trace per assicurarti di non effettuare più chiamate del necessario. È sempre una buona idea assicurarsi di controllare i tassi di errore e di prestare attenzione a eventuali chiamate non valide che potresti effettuare. In alcuni casi, è possibile intercettare queste chiamate in anticipo.