Le istanze sono i componenti di base di App Engine, fornendo tutte le e le risorse necessarie per ospitare l'applicazione. In qualsiasi momento, i tuoi l'applicazione può essere in esecuzione su una o più istanze e le richieste vengono in tutti. Ogni istanza include un livello di sicurezza per garantire non possono influenzarsi inavvertitamente.
App Engine può creare e arrestare automaticamente le istanze come traffico fluttua oppure puoi specificare il numero di istanze da eseguire a prescindere una certa quantità di traffico. Per determinare come e quando vengono create nuove istanze, e specificare un tipo di scalabilità per la tua app. Le impostazioni di scalabilità vengono applicate Livello di versione di App Engine come parte di app.yaml .
Tipi di scalabilità
App Engine supporta i seguenti tipi di scalabilità, che controllano il modo in cui e quando vengono create le istanze:
- Automatica (impostazione predefinita)
- Base
- Manuale
Puoi specificare il tipo di scalabilità nel
app.yaml
.
Per impostazione predefinita, la tua app utilizza la scalabilità automatica, il che significa che App Engine
e gestire il numero di istanze inattive.
- Scalabilità automatica
- La scalabilità automatica crea istanze in base al tasso di richieste, alle latenze di risposta
e altre metriche dell'applicazione. Puoi specificare le soglie per ciascuno di questi
e un numero minimo di istanze da mantenere sempre in esecuzione
configurando l'elemento
automatic_scaling
.
- Scalabilità di base
- La scalabilità di base crea istanze quando la tua applicazione riceve richieste. Ciascuna verrà arrestata quando l'applicazione diventa inattiva. La scalabilità di base è ideale per attività intermittenti o guidate dall'attività utente.
- Scalabilità manuale
- La scalabilità manuale specifica il numero di istanze che vengono eseguite continuamente a prescindere dal livello di carico. Ciò permette attività come inizializzazioni complesse e applicazioni che si basano sullo stato della memoria nel tempo.
Funzionalità | Scalabilità automatica | Scalabilità di base | Scalabilità manuale |
---|---|---|---|
Timeout della richiesta |
Dieci minuti per richieste HTTP e attività in coda di attività. Se la tua app non
restituiscono una richiesta entro questo limite di tempo, App Engine interrompe
il gestore delle richieste
emessi
un errore da gestire.
Per runtime legacy (Java 8, PHP 5 e Python 2):
|
24 ore per richieste HTTP e attività in coda di attività. Se la tua app non
che restituisce una richiesta entro questo limite di tempo, App Engine interrompe
gestore delle richieste
emessi
un errore da gestire.
Un'istanza con scalabilità di base può scegliere di gestire |
Come la scalabilità di base. |
Thread in background | Non consentito | Consentito | Consentito |
Residenza | Le istanze vengono arrestate in base ai pattern di utilizzo. |
Le istanze vengono arrestate in base al idle_timeout
. Se un'istanza è stata inattiva, ad esempio non ha ricevuto
una richiesta per più di idle_timeout ,
in esecuzione viene arrestata.
|
Le istanze rimangono in memoria e lo stato viene conservato in tutte le richieste. Quando
vengono arrestate, compare una richiesta /_ah/stop
nei log.
Se è presente un gestore /_ah/stop o un indirizzo
gancio di arresto, ha 30
secondi prima che si verifichi l'arresto.
|
Avvio e arresto | Le istanze vengono create on demand per gestire le richieste e, quando il dispositivo è inattivo. |
Le istanze vengono create on demand per gestire le richieste e,
si arresta in caso di inattività, in base a idle_timeout
di configurazione del deployment. Un'istanza
interrotto manualmente
ha 30 secondi di tempo per completare la gestione delle richieste prima che venga forzata
terminato.
|
Alle istanze viene inviata automaticamente una richiesta di avvio da App Engine
di una richiesta GET vuota a /_ah/start . Come con
la scalabilità di base, un'istanza
interrotto manualmente
ha 30 secondi di tempo per completare la gestione delle richieste prima che venga forzata
terminato.
|
Indirizzabilità dell'istanza | Le istanze sono anonime. |
Istanza "i" della versione "v" del servizio "s" è indirizzabile all'URL:
https://i-dot-v-dot-s-dot-app_id.REGION_ID.r.appspot.com .
Se hai configurato un
mappatura dei sottodomini con caratteri jolly per un dominio personalizzato, puoi anche gestire
a un servizio o a una delle sue istanze tramite l'URL del modulo
https://s.domain.com o https://i.s.domain.com .
Puoi memorizzare nella cache in modo affidabile lo stato di ogni istanza e recuperarlo
richieste successive.
|
Come la scalabilità di base. |
Scalabilità |
App Engine scala il numero di istanze automaticamente in risposta
di elaborazione. Questo ridimensionamento tiene conto
Impostazioni di automatic_scaling fornite su un
per versione nel file di configurazione.
|
Un servizio con scalabilità di base viene configurato impostando il numero massimo
di istanze nel parametro max_instances
Impostazione basic_scaling . È scalabile il numero di istanze attive
con il volume di elaborazione.
|
Configuri il numero di istanze di ogni versione
di configurazione del servizio. Il numero di istanze di solito
corrisponde alla dimensione di un set di dati conservato in memoria o al
per il lavoro offline. Puoi modificare
di istanze di una versione con scalabilità manuale molto rapidamente, senza
arresto delle istanze attualmente in esecuzione mediante l'API Modules
Funzione set_num_instances .
|
Scalabilità delle istanze dinamiche
Le applicazioni App Engine che usano la scalabilità di base o automatica si basano da un numero qualsiasi di istanze dinamiche in un dato momento, a seconda del volume richieste in arrivo. Con l'aumento delle richieste, il numero di possono aumentare anche le istanze dinamiche.
App con scalabilità di base
Se utilizzi la scalabilità di base, App Engine tenta di mantenere bassi i costi, anche se ciò può causare una latenza più alta poiché il volume delle richieste in entrata aumenta.
Se nessuna delle istanze esistenti è disponibile per gestire una richiesta in entrata, App Engine avvia una nuova istanza. Anche dopo aver avviato una nuova istanza, alcune richieste potrebbero dover essere messe in coda fino a quando la nuova istanza non completa procedura di avvio. Se hai bisogno della latenza più bassa possibile, valuta l'utilizzo della scalabilità automatica, il che crea preventivamente nuove istanze per ridurre al minimo la latenza.
App con scalabilità automatica
Se utilizzi la scalabilità automatica, ogni istanza dell'app ha la propria coda per richieste in arrivo. Prima che le code diventino abbastanza lunghe da avere un effetto sulla latenza dell'app, App Engine crea automaticamente uno e un numero maggiore di nuove istanze per gestire il carico crescente.
Puoi configurare le impostazioni della scalabilità automatica in modo da ottenere un compromesso tra le prestazioni desiderate e il costo che puoi sostenere. La tabella seguente descrive queste impostazioni.
Impostazioni di scalabilità automatica | Descrizione |
---|---|
Utilizzo della CPU target | Imposta la soglia del rapporto di utilizzo della CPU per specificare la soglia di utilizzo della CPU alla quale verranno avviate più istanze per gestire il traffico. |
Utilizzo della velocità effettiva target | Imposta la soglia di velocità effettiva per il numero di richieste in parallelo dopo le quali più istanze inizieranno a gestire il traffico. |
Numero massimo di richieste in parallelo | Imposta il numero massimo di richieste in parallelo che un'istanza può accettare prima che lo scheduler generi una nuova istanza. |
Guarda il video sulle impostazioni dello scheduler di App Engine video per vedere gli effetti di queste impostazioni.
Scale down
Quando i volumi delle richieste diminuiscono, App Engine riduce il numero di istanze. La scalabilità verso il basso aiuta a garantire che tutte le applicazioni vengono utilizzate per ottimizzare l'efficienza e l'efficienza in termini di costi.
Quando un'applicazione non viene utilizzata, App Engine disattiva le istanze dinamiche associate, ma le ricarica immediatamente non appena vengono necessaria. Il ricaricamento delle istanze può comportare il caricamento di richieste e la latenza per gli utenti.
Puoi specificare un numero minimo di istanze inattive. L'impostazione di un'adeguata di istanze inattive per la tua applicazione in base al volume di richieste consente alla tua applicazione di gestire ogni richiesta con poca latenza, a meno che tu quando un volume di richieste è insolitamente elevato.
Scale down nella scalabilità automatica
Se la tua app utilizza la scalabilità automatica, sono necessari circa 15 minuti
di inattività, per iniziare l'arresto delle istanze inattive. Per mantenere uno o più
istanze inattive in esecuzione, imposta il valore di min_idle_instances
a 1
o superiore.
Scalabilità e batch di richieste
Se invii batch di richieste ai tuoi servizi, ad esempio per un'attività di elaborazione, verrà creato rapidamente un numero elevato di istanze. Me consigliamo di controllarlo limitando la frequenza del numero di richieste inviate per nel secondo, se possibile. Ad esempio, se utilizzi Google Tasks, puoi controllare la frequenza con cui le attività vengono inviato tramite push.
Ciclo di vita di un'istanza
Stati istanza
È sempre in esecuzione un'istanza di un servizio con scalabilità automatica. Tuttavia, un'istanza di un servizio scalato manuale o di base può essere in esecuzione o arrestato. Tutte le istanze dello stesso servizio e della stessa versione condividono lo stesso stato. Modifichi lo stato le tue istanze gestendo le tue versioni. Puoi:
- Utilizza la pagina Versioni nella Console Google Cloud
- Usa
gcloud app versions start
egcloud app versions stop
- Utilizzare l'API Forms
Avvio
Ogni istanza di servizio viene creata in risposta a una richiesta di avvio, ovvero
richiesta GET
HTTP vuota in /_ah/start
. App Engine invia questa richiesta
per creare un'istanza, gli utenti non possono inviare una richiesta a
/_ah/start
. Le istanze di scalabilità manuali e di base devono rispondere all'inizio
prima di poter gestire un'altra richiesta. La richiesta di avvio può essere utilizzata
per due scopi:
- Per avviare un programma a tempo indeterminato, senza accettare ulteriori richieste.
- Inizializzare un'istanza prima che riceva traffico aggiuntivo.
Avvio manuale, di base e con scalabilità automatica delle istanze in modo diverso. Quando
avvia un'istanza di scalabilità manuale, App Engine invia immediatamente
/_ah/start
richiesta per ogni istanza. Quando si avvia un'istanza di un modello
di scalabilità automatica, App Engine consente di accettare il traffico,
La richiesta /_ah/start
non viene inviata a un'istanza finché non riceve il primo utente
richiesta. Più istanze di scalabilità di base vengono avviate solo se necessario, in
per gestire l'aumento del traffico. La scalabilità automatica delle istanze
ricevere qualsiasi richiesta di /_ah/start
.
Quando un'istanza risponde alla richiesta /_ah/start
con un codice di stato HTTP
di 200–299
o 404
, viene considerato avviato correttamente e può
per gestire richieste aggiuntive. Altrimenti, App Engine termina
in esecuzione in un'istanza Compute Engine. Le istanze con scalabilità manuale vengono riavviate immediatamente, mentre
Le istanze di scalabilità vengono riavviate solo quando necessario per gestire il traffico.
Arresto
Il processo di chiusura può essere attivato da una serie di eventi eventi quali:
- Ci sono troppe istanze e non abbastanza richieste di app (traffico).
- Arresti manualmente un'istanza.
- Esegui il deployment di una versione aggiornata nel servizio.
- L'istanza supera la memoria massima per la sua configurazione
instance_class
. - L'applicazione esaurisce la quota di ore istanza.
- L'istanza è stata spostata in una macchina diversa, perché l'ambiente La macchina che esegue l'istanza viene riavviata oppure App Engine è stato spostato della tua istanza per migliorare la distribuzione del carico.
Uno dei vantaggi dell'ambiente standard di App Engine "paghi solo per quello che utilizzi" come piattaforma descritto in precedenza in Scalabilità orizzontale, il sistema esegue la scalabilità automatica. il numero di istanze fino a zero in assenza di traffico. Ciò consente di rendere App Engine è una soluzione conveniente per le piccole applicazioni che non ricevono e richieste continue. Quando un'istanza deve essere arrestata, le nuove istanze vengono instradate ad altre istanze (se presenti) e le richieste attualmente in fase di elaborazione hanno il tempo di essere completati.
Quando un'istanza deve essere arrestata, App Engine invia unKILL
(SIGKILL
), terminando l'istanza.
Caricamento delle richieste in corso...
Quando App Engine crea una nuova istanza per l'applicazione, l'istanza deve prima caricare le librerie e le risorse necessarie richiesta. Questo accade durante la prima richiesta all'istanza, denominata Caricamento richiesta. Durante una richiesta di caricamento, l'applicazione viene sottoposta una inizializzazione che fa sì che la richiesta richieda più tempo.
Le seguenti best practice ti consentono di ridurre la durata del caricamento richieste:
- Carica solo il codice necessario per l'avvio.
- Accedi al disco il meno possibile.
- In alcuni casi, il caricamento del codice da un file ZIP o jar è più veloce rispetto a quello da un molti file separati.
Richieste di riscaldamento
Le richieste di riscaldamento sono un tipo specifico di richiesta di caricamento che carica l'applicazione
codice in un'istanza in anticipo, prima che vengano effettuate richieste in tempo reale.
Le istanze con scalabilità manuale o di base non ricevono una richiesta /_ah/warmup
.
Tempo di attività istanza
App Engine tenta di mantenere in esecuzione le istanze di scalabilità manuale e di base a tempo indeterminato. Tuttavia, al momento non è garantito il tempo di attività per le query delle istanze di scalabilità di base. Errori hardware e software che causano terminazione anticipata o riavvii frequenti possono verificarsi senza preavviso e la loro risoluzione può richiedere molto tempo; quindi è necessario creare l'applicazione in modo da tollerare questi errori.
Ecco alcune buone strategie per evitare tempi di inattività dovuti al riavvio delle istanze:
- Riduci il tempo necessario per il riavvio delle istanze o per quelle nuove per iniziare.
- Per i calcoli a lunga esecuzione, crea periodicamente dei checkpoint in modo da può riprendere da quello stato.
- La tua app deve essere "stateless" in modo da non archiviare nulla nell'istanza.
- Utilizza le code per eseguire l'esecuzione asincrona delle attività.
- Se configuri le istanze sulla scalabilità manuale:
- Utilizza il bilanciamento del carico in più istanze.
- Configura più istanze di quelle necessarie per gestire il traffico normale.
- Scrivi una logica di fallback che utilizza i risultati memorizzati nella cache durante un processo di scalabilità manuale non è disponibile.
NTP con l'ambiente standard di App Engine
L'ambiente standard App Engine dispone di servizi NTP (Network Time Protocol) che utilizzano i server NTP di Google. Tuttavia, il servizio NTP non è modificabile.