Configurazione delle richieste di riscaldamento per migliorare le prestazioni

Puoi utilizzare le richieste di riscaldamento per ridurre la latenza delle richieste e delle risposte durante il caricamento del codice dell'app in un'istanza appena creata.

Spesso App Engine deve caricare il codice dell'app in una nuova istanza. Il caricamento di un'istanza può verificarsi nelle seguenti situazioni:

  • Quando esegui nuovamente il deployment di una versione dell'app.
  • Quando vengono create nuove istanze a causa del carico delle richieste che supera la capacità dell'insieme di istanze in esecuzione.
  • Quando si verificano interventi di manutenzione e riparazione dell'infrastruttura sottostante o dell'hardware fisico.

Il caricamento del codice dell'app in una nuova istanza può comportare il caricamento delle richieste. Caricare le richieste può comportare un aumento della latenza delle richieste per gli utenti, ma puoi evitarla utilizzando le richieste di riavvio. Le richieste di riscaldamento consentono di caricare il codice dell'app in una nuova istanza prima che venga raggiunta da qualsiasi richiesta in tempo reale.

Se le richieste di riscaldamento 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 riscaldamento per inizializzare una nuova istanza. Tuttavia, questi tentativi di rilevamento non funzionano sempre. Di conseguenza, potresti riscontrare richieste di caricamento, anche se nella tua app sono attive le richieste di riscaldamento. Ad esempio, se la tua app non gestisce traffico, la prima richiesta all'app sarà sempre una richiesta di caricamento, non una richiesta di richiesta.

Le richieste di riscaldamento utilizzano le ore di istanza come qualsiasi altra richiesta alla tua applicazione App Engine. Nella maggior parte dei casi in cui sono abilitate le richieste di riscaldamento, non noterai un aumento delle ore di istanza perché l'applicazione viene semplicemente avviata in una richiesta di riscaldamento anziché in una richiesta di caricamento. L'utilizzo delle ore di istanza può aumentare se decidi di svolgere più operazioni, ad esempio la memorizzazione nella cache durante una richiesta di riscaldamento. Se imposti min_idle_instances su un valore superiore a 0, potresti riscontrare richieste di riscaldamento quando queste istanze si avviano per la prima volta, ma rimarranno disponibili dopo tale data.

Abilitazione delle richieste di riscaldamento

Le richieste di riscaldamento vengono utilizzate dallo scheduler di App Engine, che controlla la scalabilità automatica delle istanze in base alla configurazione fornita dall'utente. Con le richieste di riscaldamento attivate, App Engine invia le richieste GET a /_ah/warmup. Puoi implementare gestori per questa richiesta per eseguire attività specifiche dell'applicazione, come i dati dell'applicazione prima della memorizzazione nella cache.

Lo scheduler avvia le istanze quando determina che sono necessarie più istanze. Le richieste di riavvio possono 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 riscaldamento vengano chiamate. In alcuni casi vengono inviate le richieste di caricamento, ad esempio se l'istanza è la prima avviata o se il traffico è in aumento. Tuttavia, ci sarà un tentativo di tentativo migliore di inviare richieste alle istanze già calde se le richieste di riscaldamento sono abilitate.

Per abilitare le richieste di riscaldamento, aggiungi l'elemento warmup nell'istruzione inbound_services nel file app.yaml, ad esempio:

inbound_services:
- warmup

Creazione del gestore

Crea un gestore che elaborerà le richieste che vengono inviate a /_ah/warmup. Il tuo gestore deve eseguire le logiche di riscaldamento necessarie all'app.

Nell'ambiente di runtime PHP 7+, devi eseguire il deployment di un controller anteriore per gestire tutto il routing delle richieste, incluse le richieste /_ah/warmup.

Ad esempio, il seguente controller anteriore manuale contiene codice per gestire le richieste di richiesta:

<?php
  // Handle your warmup logic for your app.
  switch (@parse_url($_SERVER['REQUEST_URI'])['path']) {
    case '/_ah/warmup':
      echo "Warmup successful";
      break;
    // Other handlers
    // ...
  }
?>