Gestione delle risorse dell'applicazione

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

Visualizzazione dei rapporti di utilizzo

Quando valuti le prestazioni dell'applicazione, dovresti controllare il numero di istanze in esecuzione e il consumo delle risorse da parte dell'applicazione.

Visualizzare i report sull'utilizzo delle dashboard

Visualizza la pagina Istanze

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

Gestione della scalabilità delle istanze dinamiche

Riduzione della latenza in corso...

La latenza dell'applicazione influisce sul numero di istanze necessarie per gestire il traffico. Diminuisci la latenza per 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:

  • Aumentare la memorizzazione nella cache dei dati condivisi a cui si accede di frequente. Questo è un altro modo per dire: utilizza la memcache di App Engine. 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 di alcuni secondi può influire sull'efficienza con cui l'applicazione gestisce il traffico. Le applicazioni Python dovrebbero inoltre utilizzare la memorizzazione nella cache nel runtime.
  • Utilizza App Engine Memcache in modo più efficiente: utilizza le chiamate batch per get, imposta, eliminazione e così via anziché una serie di singole chiamate. Valuta la possibilità di utilizzare l'API Memcache Async.
  • Utilizza attività per la funzionalità non legata alla richiesta: se la tua applicazione esegue operazioni che possono essere svolte oltre l'ambito di una richiesta rivolta agli utenti, inseriscila in un'attività. L'invio di questo lavoro alla coda delle attività invece di attendere il completamento prima di restituire una risposta può ridurre notevolmente la latenza rivolta agli utenti. La coda di attività può quindi darti un maggiore controllo sulle velocità di esecuzione e aiutarti ad alleggerire 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 un'attività offline in parallelo tramite il recupero asincrono di URL.
    • Utilizza l'API URL Fetch asincrona.
  • Per le sessioni HTTP, scrivi in modo asincrono.

Modifica le impostazioni del rendimento della scalabilità automatica

Il file di configurazione app.yaml 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 Elementi di scalabilità. Guarda il video delle nuove impostazioni dello scheduler di App Engine per vedere gli effetti di queste impostazioni.

Abilita le richieste in parallelo in Python

Le istanze dell'applicazione possono gestire più richieste contemporaneamente in Python. Se abiliti questa impostazione, verrà ridotto il numero di istanze necessarie per gestire il traffico della tua applicazione, ma quest'ultima deve essere sicura per i thread affinché questa operazione funzioni correttamente. Scopri come utilizzare le richieste in parallelo abilitando threadsafe nel file app.yaml.

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 provochino 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 sulle attività non sensibili alla latenza. Questa intestazione indica allo scheduler di interrompere immediatamente la richiesta se un'istanza esistente non è disponibile. La coda di attività proverà di nuovo ed eseguirà il backoff finché un'istanza esistente non sarà disponibile per gestire la richiesta. Tuttavia, è importante notare che quando le richieste con il set X-AppEngine-FailFast occupano istanze esistenti, le richieste senza questo set di intestazioni possono comunque causare l'avvio di nuove istanze.
  • Configura le impostazioni della coda di attività.
    • Se imposti il parametro "rate" su un valore inferiore, la coda di attività eseguirà le attività a una velocità inferiore.
    • Se imposti il parametro "max_concurrent_requests" su un valore inferiore, verranno eseguite meno attività contemporaneamente.
  • Se possibile, pubblicare contenuti statici

    La pubblicazione di contenuti statici in Python viene gestita dall'infrastruttura di 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à in Datastore, alle dimensioni degli indici Datastore, alle dimensioni delle attività nella coda di attività e alla quantità di dati archiviati in Blobstore. Ecco alcune azioni che puoi intraprendere per assicurarti di non archiviare più dati del necessario:

    • Elimina tutte le entità o i BLOB di cui l'applicazione non ha più bisogno.
    • Rimuovi eventuali 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 comportare una riduzione del consumo di risorse di Datastore e una minore latenza 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 della scrittura di ciascuna entità. Per informazioni su come interpretare questi dati, consulta Informazioni sui costi di scrittura.
    • Rimuovi tutti gli indici non necessari, in modo da ridurre i costi di archiviazione e scrittura delle entità. Utilizza la funzionalità"Recupera indici" per vedere quali indici sono definiti nella tua applicazione. Puoi vedere quali indici vengono attualmente pubblicati per la tua applicazione nella pagina di ricerca della console Google Cloud.
    • Durante la progettazione del 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 ulteriori informazioni su come App Engine genera indici.
    • Quando possibile, sostituisci le proprietà indicizzate (che sono quelle predefinite) con proprietà non indicizzate (Python), 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, non solo dovrai modificare il codice per utilizzare nuovamente le proprietà indicizzate, ma dovrai eseguire una riduzione di mappa su tutte le entità per fare in modo che vengano rispettate.
    • Grazie ai miglioramenti dello strumento di pianificazione delle query di Datastore nelle release di App Engine 1.5.2 e 1.5.3, le tue 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 riuscire a 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 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 l'impaginazione anziché l'offset.
    • Carica in contemporanea più RPC di Datastore tramite l'API datastore asinc.

    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 nelle tue 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 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é 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 gli intervalli di indirizzi IP e subnet.

    Gestione di altre risorse

    Una delle strategie migliori per controllare l'utilizzo dell'API Email è quella di utilizzare Appstats per assicurarti di non effettuare più chiamate del necessario. È sempre opportuno controllare i tassi di errore e verificare eventuali chiamate non valide. In alcuni casi potrebbe essere possibile ricevere le chiamate in anticipo.