Puoi utilizzare le richieste di riscaldamento 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 in esecuzione in un'istanza Compute Engine. Il caricamento di un'istanza può avvenire nelle seguenti situazioni:
- Quando esegui nuovamente il deployment di una versione dell'app.
- Quando vengono create nuove istanze a causa del carico delle richieste la capacità del set attuale di istanze in esecuzione.
- Quando si verificano operazioni di manutenzione e riparazione dell'infrastruttura di base o dell'hardware fisico.
Il caricamento del codice dell'app in una nuova istanza può comportare richieste di caricamento. Il caricamento delle richieste può comportare un aumento della latenza delle richieste per gli utenti, ma è possibile evitare questa latenza utilizzando le richieste di preparazione. Le richieste di riscaldamento caricano del codice dell'app in una nuova istanza prima che le richieste in tempo reale raggiungano l'istanza in questione.
Se le richieste di warmup sono abilitate per la tua applicazione, App Engine tenta di per rilevare quando la tua applicazione ha bisogno di una nuova istanza e avvia un 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 nella tua app sono attivate le richieste di riscaldamento. Ad esempio, se la tua app non genera traffico, la prima richiesta all'app sarà sempre una richiesta di caricamento, non una richiesta di riscaldamento.
Le richieste di riscaldamento utilizzano le ore di istanza come qualsiasi altra richiesta al tuo
nell'applicazione App Engine. Nella maggior parte dei casi in cui le richieste di riscaldamento sono attivate,
non noterai un aumento delle ore di istanza perché la tua applicazione viene semplicemente inizializzata in una richiesta di riscaldamento anziché in una richiesta di caricamento. Il tuo
l'utilizzo delle ore di istanza può aumentare se decidi di eseguire altre attività, ad esempio
pre-memorizzazione nella cache durante una richiesta di warmup. Se imposti
min_idle_instances
a un valore superiore a 0
, potresti riscontrare richieste di riscaldamento quando queste istanze
all'avvio, ma rimarranno disponibili dopo tale data.
Abilitazione delle richieste di riscaldamento in corso...
Le richieste di preriscaldamento vengono utilizzate dal programmatore di App Engine, che controlla la scalabilità automatica delle istanze in base alla configurazione fornita dall'utente. Con riscaldamento
richieste abilitate, App Engine invia GET
richieste a /_ah/warmup
. Tu
può implementare gestori per questa richiesta per eseguire attività specifiche dell'applicazione,
come la pre-memorizzazione nella cache dei dati dell'applicazione.
Il programmatore avvia le istanze quando stabilisce che sono necessarie altre istanze. Le richieste di riscaldamento possono essere visualizzate in log anche se sono disabilitate perché lo scheduler le usa per avviare le istanze.
Tieni presente che non è garantito che le richieste di riscaldamento vengano chiamate. In alcuni casi vengono inviate richieste di caricamento: ad esempio, se l'istanza è la prima avviata o se si verifica un aumento brusco del traffico. Tuttavia, farà del nostro meglio tentativo di inviare richieste a istanze già predisposte se le richieste di riscaldamento sono abilitate.
Per attivare le richieste di riscaldamento, aggiungi l'elemento warmup
sotto la direttiva
inbound_services
nel file app.yaml
, ad esempio:
inbound_services:
- warmup
Registrazione del gestore
Puoi registrare lo script che gestisce le richieste di riscaldamento nel file app.yaml
del progetto. Ad esempio:
inbound_services:
- warmup
handlers:
- url: /_ah/warmup
script: warmup.php
login: admin
Questo esempio registra un gestore per ascoltare le richieste di riscaldamento
Percorso della richiesta /_ah/warmup
con
warmup.php
file.
Creazione del gestore
Crea un gestore che elabori le richieste inviate a /_ah/warmup
.
Il gestore deve eseguire qualsiasi logica di riscaldamento necessaria all'app.
L'esempio seguente si basa sull'esempio precedente:
Nell'ambiente di runtime PHP 5, devi eseguire il deployment di un front controller per gestire tutto l'instradamento delle richieste, incluse le richieste /_ah/warmup
.
Ad esempio, il seguente controller frontale manuale contiene il codice per gestire le richieste di warmup:
<?php
// Handle your warmup logic for your app.
switch (@parse_url($_SERVER['REQUEST_URI'])['path']) {
case '/_ah/warmup':
echo "Warmup successful";
break;
// Other handlers
// ...
}
?>
Passaggi successivi
Potrebbe essere opportuno archiviare i valori in un datastore in memoria, Memcache, che offre alla tua app un accesso rapido ai dati senza query.
Ad esempio, se crei e memorizzi un elenco degli articoli di tendenza attuali per il tuo sito, puoi creare l'elenco durante il riscaldamento e memorizzarlo in Memcache. Quando quando arriva una richiesta di un utente, App Engine non deve eseguire le query nel datastore e l'applicazione può soddisfare la richiesta dell'utente più velocemente.