App Engine genera report di utilizzo sulle prestazioni e sull'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 relativa ai pricing.
Visualizzazione dei rapporti di utilizzo
Quando valuti le prestazioni dell'applicazione, devi controllare il numero di istanze in esecuzione dall'applicazione e il consumo di risorse da parte dell'applicazione.
Visualizzare i report sull'utilizzo della dashboard
Le sezioni seguenti suggeriscono alcune strategie per la gestione delle risorse.
Gestione della scalabilità dinamica delle istanze
Riduzione della latenza
La latenza delle applicazioni influisce sul numero di istanze necessarie per gestire il traffico. Diminuendo la latenza, puoi ridurre il numero di istanze utilizzate per gestire l'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 ridurre la latenza:
- Aumenta la memorizzazione nella cache dei dati condivisi a cui si accede di frequente. In altri termini, utilizza App Engine Memcache. Inoltre, l'impostazione delle intestazioni di controllo della cache 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 pochi secondi può avere un impatto sull'efficienza con cui la tua applicazione gestisce il traffico.
- Utilizzo più efficiente di App Engine Memcache: utilizza le chiamate batch per get, set, delete ecc. anziché una serie di chiamate individuali. Prendi in considerazione l'utilizzo dell'API Memcache Async.
- Utilizza attività per funzionalità non associate alle richieste: se la tua applicazione esegue operazioni che possono essere eseguite oltre l'ambito di una richiesta rivolta agli utenti, inseriscila in un'attività. L'invio di questo lavoro alla coda di attività invece di attendere il completamento prima di restituire una risposta può ridurre notevolmente la latenza per gli utenti. La coda di attività può quindi offrirti un controllo molto maggiore sulle velocità di esecuzione e aiutarti a semplificare il carico.
- Utilizza 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 di recupero URL invece di gestirle singolarmente all'interno di singole richieste rivolte agli utenti e gestiscile in parallelo in un'attività offline tramite il recupero asincrono di URL.
- Utilizza l'API URL Fetch asincrona.
- Per le sessioni HTTP, scrivi in modo asincrono. Java consente di configurare l'applicazione per scrivere in modo asincrono dati delle sessioni HTTP in Datastore aggiungendo
<async-session-persistence enabled="true"/>
aappengine-web.xml
. I dati delle sessioni vengono sempre scritti in modo sincrono in App Engine Memcache e se una richiesta tenta di leggere i dati della sessione quando App Engine Memcache non è disponibile, eseguirà il failover su Datastore, che potrebbe non disporre ancora dell'aggiornamento più recente. Ciò significa che esiste un rischio minimo per la tua applicazione di vedere dati sulle sessioni inattivi, ma per la maggior parte delle applicazioni il vantaggio della latenza supera di gran lunga i rischi.
Modificare le impostazioni delle prestazioni della scalabilità automatica
Il file di configurazione appengine-web.xml
contiene diverse impostazioni che puoi utilizzare per regolare il compromesso tra prestazioni e carico di risorse per una versione specifica dell'app. Per un elenco delle impostazioni di scalabilità automatica disponibili, consulta la pagina relativa agli elementi di scalabilità.
Guarda il video sulle nuove impostazioni dello scheduler
di App Engine per vedere gli effetti di queste impostazioni.
Abilita richieste in parallelo in Java
L'abilitazione di questa impostazione ridurrà il numero di istanze necessarie per gestire il traffico per l'applicazione. Tuttavia, l'applicazione deve essere threadsafe per poter funzionare correttamente. Scopri come
utilizzare le richieste in parallelo abilitando threadsafe nel
file appengine-web.xml
.
Configurazione delle impostazioni delle code di attività
Le impostazioni predefinite per la coda di attività sono ottimizzate per le prestazioni. Con questi valori predefiniti, quando metti più attività in una coda contemporaneamente, è probabile che causino l'avvio di nuove istanze di frontend. Ecco alcuni suggerimenti su come ottimizzare la coda di attività per risparmiare ore di istanza:
- Imposta l'intestazione X-AppEngine-FailFast su attività che non sono sensibili alla latenza. Questa intestazione indica allo scheduler di fallire immediatamente la richiesta se non è disponibile un'istanza esistente. La coda di attività effettuerà un nuovo tentativo e un backoff finché non sarà disponibile un'istanza esistente per gestire la richiesta. Tuttavia, è importante notare che quando le richieste con set X-AppEngine-FailFast occupano istanze esistenti, le richieste senza questo set di intestazione possono comunque causare l'avvio di nuove istanze.
- Configura le impostazioni della coda di attività.
- Se imposti il parametro "rate" su un valore più basso, la coda di attività eseguirà le attività più lentamente.
- Se imposti il parametro "max_concurrent_requests" su un valore inferiore, verranno eseguite meno attività contemporaneamente.
Se possibile, pubblica contenuti statici
La pubblicazione di contenuti statici in Java viene gestita dall'infrastruttura specializzata di App Engine, che non utilizza 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 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 tutte le entità o i blob non più necessari per l'applicazione.
- Rimuovi tutti 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 nel datastore. Di seguito sono riportate alcune strategie che possono comportare una riduzione del consumo di risorse del datastore e una latenza minore per le richieste a Datastore:
- Il visualizzatore dati della console Google Cloud mostra il numero di operazioni di scrittura necessarie per creare ogni entità nel datastore locale. Puoi utilizzare queste informazioni per comprendere il costo di scrittura di ogni entità. Consulta Informazioni sui costi di scrittura per informazioni su come interpretare questi dati.
- Rimuovi tutti gli indici non necessari, riducendo così 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 sono attualmente pubblicati per la tua applicazione nella pagina di 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 indici personalizzati. Consulta la documentazione su Query e indici per ulteriori informazioni su come App Engine genera gli indici.
- Quando possibile, sostituisci le proprietà indicizzate (che sono quelle predefinite) con proprietà non indicizzate (Java), in modo da ridurre il numero di operazioni di scrittura di Datastore quando inserisci un'entità. Attenzione: se in un secondo momento decidi di poter eseguire query sulla proprietà non indicizzata, dovrai non solo modificare il codice per utilizzare di nuovo le proprietà indicizzate, ma dovrai anche eseguire una riduzione della mappa su tutte le entità per renderle reputate.
- A causa dei miglioramenti dello strumento di pianificazione delle query di Datastore nelle release di App Engine 1.5.2 e 1.5.3, le query potrebbero ora richiedere meno indici rispetto a prima. Anche se puoi comunque scegliere di conservare determinati indici personalizzati per motivi legati alle 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, il che è più economico ed efficiente.
- Quando possibile, utilizza query basate solo su chiavi anziché query sulle entità.
- Per ridurre la latenza, sostituisci più entità
get()
con unaget()
in batch. - Utilizza i cursori Datastore per l'impaginazione anziché l'offset.
- Parallelizza più RPC Datastore tramite l'API per datastore asincrono.
Nota: le operazioni Datastore ridotte comprendono chiamate per l'allocazione di ID Datastore o query basate solo su chiavi. Consulta la pagina relativa ai pricing per ulteriori informazioni sui costi.
Gestione della larghezza di banda
Per ridurre la larghezza di banda in uscita, puoi
impostare l'intestazione Cache-Control
appropriata sulle risposte e impostare tempi di scadenza ragionevoli
per i file statici. L'utilizzo di intestazioni Cache-Control
pubbliche in questo modo consentirà ai server proxy e al browser del tuo client di memorizzare le risposte nella cache per il periodo di tempo specificato.
La larghezza di banda in entrata è più difficile da controllare, poiché si tratta della 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.