Puoi utilizzare le richieste di warmup per ridurre la latenza di richieste e risposte durante il caricamento del codice dell'app in un'istanza appena creata.
App Engine deve spesso caricare il codice dell'app in una nuova istanza. Il caricamento di un'istanza può avvenire nelle seguenti situazioni:
- Quando esegui di nuovo il deployment di una versione dell'app.
- Quando vengono create nuove istanze perché il carico delle richieste supera la capacità dell'insieme corrente di istanze in esecuzione.
- Quando si verificano manutenzione e riparazioni dell'infrastruttura sottostante o dell'hardware fisico.
Il caricamento del codice dell'app in una nuova istanza può comportare richieste di caricamento. Le richieste di caricamento possono comportare un aumento della latenza delle richieste per gli utenti, ma puoi evitare questa latenza utilizzando le richieste di warmup. Le richieste di warmup caricano il codice dell'app in una nuova istanza prima che le richieste live raggiungano l'istanza. Le richieste di warmup, come le altre richieste, sono soggette al timeout della richiesta.
Se le richieste di warmup sono abilitate per la tua applicazione, App Engine tenta di rilevare quando l'applicazione ha bisogno di una nuova istanza e avvia una richiesta di warmup per inizializzare una nuova istanza. Tuttavia, questi tentativi di rilevamento non funzionano in tutti i casi. Di conseguenza, potresti riscontrare richieste di caricamento, anche se le richieste di warmup sono abilitate nella tua app. Ad esempio, se la tua app non gestisce traffico, la prima richiesta all'app sarà sempre una richiesta di caricamento, non una richiesta di warmup.
Le richieste di warmup utilizzano le ore di istanza come qualsiasi altra richiesta all'applicazione App Engine. Nella maggior parte dei casi in cui le richieste di warmup sono abilitate, non noterai un aumento delle ore di istanza perché l'applicazione viene inizializzata in una richiesta di warmup anziché in una richiesta di caricamento. L'utilizzo delle ore di istanza può aumentare se decidi di eseguire più operazioni, ad esempio la pre-memorizzazione nella cache durante una richiesta di warmup. Se imposti
min_idle_instances
su un valore maggiore di 0, potresti riscontrare richieste di warmup al primo avvio di queste istanze, ma rimarranno disponibili dopo questo periodo di tempo.
Abilitazione delle richieste di warmup
Le richieste di warmup vengono utilizzate dallo scheduler di App Engine, che controlla lo scalabilità automatica delle istanze in base alla configurazione fornita dall'utente. Con le richieste di warmup abilitate, App Engine invia richieste GET a /_ah/warmup. Puoi implementare i gestori per questa richiesta per eseguire attività specifiche dell'applicazione, ad esempio la pre-memorizzazione nella cache dei dati dell'applicazione.
Lo scheduler avvia le istanze quando determina che sono necessarie altre istanze. Le richieste di warmup potrebbero essere visualizzate nei log anche se sono disabilitate perché lo scheduler le utilizza per avviare le istanze.
Tieni presente che non è garantito che le richieste di warmup vengano chiamate. In alcune situazioni vengono inviate richieste di caricamento: ad esempio, se l'istanza è la prima ad essere avviata o se si verifica un aumento rapido del traffico. Tuttavia, se le richieste di warmup sono abilitate, verrà eseguito un tentativo "best effort" di inviare le richieste alle istanze già sottoposte a warmup.
Per abilitare le richieste di warmup, aggiungi l'elemento warmup alla
inbound_services
direttiva nel file app.yaml, ad esempio:
inbound_services:
- warmup
Creazione del gestore
Crea un gestore che elabori le richieste inviate a /_ah/warmup.
Il gestore deve eseguire qualsiasi logica di warmup necessaria per l'app.
Ad esempio, se utilizzi Flask, il gestore potrebbe essere simile al seguente: