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 delle dashboard
Le sezioni seguenti suggeriscono alcune strategie per la gestione delle risorse.
Gestione della scalabilità dinamica delle istanze
Riduzione della latenza in corso...
La latenza dell'applicazione influisce sul numero di istanze necessarie per gestire per via del traffico. Diminuendo la latenza, puoi ridurre il numero di istanze utilizzate gestire la tua applicazione. Cloud Trace è uno strumento utile per visualizzare i dati sulla latenza e capire le potenziali modifiche per ridurla.
Dopo aver utilizzato Cloud Trace per visualizzare la latenza, prova alcune delle seguenti strategie per ridurla:
- Aumentare la memorizzazione nella cache dei dati condivisi a cui si accede di frequente. Ecco un altro modo usare la memcache di App Engine. Inoltre, l'impostazione del traffico le intestazioni cache-control possono avere un impatto significativo sull'efficienza dei dati memorizzati nella cache da server e browser. Anche la memorizzazione nella cache di alcuni elementi per pochi secondi può influire sull'efficienza con cui la tua applicazione gestisce il traffico. Le applicazioni Python devono anche utilizzare la cache in fase di runtime.
- Utilizza App Engine Memcache in modo più efficiente: utilizza le chiamate batch per ottenere, impostare, eliminare e così via invece di una serie di singole chiamate. Valuta la possibilità di utilizzare l'API Memcache Async.
- 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:
- Raggruppare più chiamate di recupero URL invece di gestirle individualmente all'interno delle singole richieste rivolte all'utente e 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.
Modificare le impostazioni di prestazioni della scalabilità automatica
app.yaml
di configurazione del deployment contiene diverse impostazioni che puoi utilizzare
Regola il compromesso tra prestazioni e carico di risorse per una versione specifica
della tua app.
Per un elenco delle impostazioni di scalabilità automatica disponibili, consulta
di scale.
Guarda il video Nuove impostazioni del programma 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. L'attivazione di questa impostazione riduce il numero di istanze necessarie per gestire il traffico per la tua applicazione, ma l'applicazione deve essere sicura per i thread per funzionare correttamente. Scopri come utilizzare le richieste contemporaneamente attivando 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, 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à proverà di nuovo ed eseguirà il backoff finché un'istanza esistente non diventa disponibile per gestire la richiesta. Tuttavia, è importante notare che quando le richieste con X-AppEngine-FailFast impostato occupano le istanze esistenti, le richieste senza questo header impostato possono comunque causare l'avvio di nuove istanze.
- Se imposti la "tariffa" su un valore inferiore, la coda di attività di eseguire le tue attività a una velocità inferiore.
- Se imposti "max_concurrent_requests" su un valore più basso, verranno eseguite contemporaneamente meno attività.
Pubblica contenuti statici, se possibile
Pubblicazione di contenuti statici in Python viene gestito da un'infrastruttura specializzata di App Engine, che non utilizza Ore di istanza. Se devi impostare intestazioni personalizzate, utilizza la API Blobstore. L'effettiva pubblicazione 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 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 dati della console Google Cloud mostra il numero di operazioni di scrittura necessari 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à. Usa il pulsante "Recupera indici" funzionalità per vedere quali indici sono definiti nell'applicazione. Puoi vedere quali indici vengono attualmente pubblicati per la tua applicazione nella pagina Ricerca della console Google Cloud.
- Quando progetti il tuo modello di 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 (Python), il che riduce il numero di operazioni di scrittura di Datastore quando inserisci un'entità. Attenzione, se in seguito decidi che devi poter per eseguire query sulla proprietà non indicizzata, dovrai non solo modificare per utilizzare di nuovo le proprietà indicizzate, ma dovrai eseguire una funzione di riduzione delle mappe su tutte le entità per farne una reputazione.
- A causa dei miglioramenti apportati allo strumento di pianificazione delle query di Datastore delle versioni 1.5.2 e 1.5.3 di App Engine, ora le tue query potrebbero richiedere meno indici rispetto al passato. Anche se puoi scegliere di conservare indici personalizzati per motivi legati alle prestazioni, potresti riuscire a eliminare altri, riducendo i costi di archiviazione e scrittura delle entità.
- Riconfigura il modello di dati in modo da poter sostituire le query con il recupero per chiave, che è più economico ed efficiente.
- Se possibile, utilizza query solo su chiavi anziché query sulle entità.
- Per ridurre la latenza, sostituisci più entità
get()
con un batchget()
. - 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 includono chiamate per l'allocazione ID o query basate solo su chiavi di Datastore. Consulta le la pagina dei prezzi per ulteriori informazioni sui costi.
Gestione della larghezza di banda
Per ridurre la larghezza di banda in uscita, puoi
imposta l'intestazione Cache-Control
appropriata nelle risposte e stabilisci tempi di scadenza ragionevoli
per i file statici. L'utilizzo di intestazioni Cache-Control
pubbliche in questo modo consentirà ai server proxy e ai browser dei tuoi clienti 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 inviati dagli utenti alla tua app. Tuttavia, puoi utilizzare le regole del firewall di App Engine per consentire o limitare intervalli di indirizzi IP e sottoreti.