2016-06-12 14 views
8

Una delle cose più irritanti dell'utilizzo di GAE per una nuova app sta avendo a che fare con istanze che vengono ripristinate se nessuno ha colpito i server in 15 minuti. Dal momento che l'app è nuova o ha pochi utenti, ci saranno periodi di grande latenza per alcuni utenti che non hanno idea che le istanze siano "spun up"Google App Engine: ridimensionamento automatico con istanza sempre attiva?

Per quanto vedo, queste opzioni si basano su il docs:

Usa manual-scaling e impostare il numero di istanze per 1.

Quando si utilizza manual-scaling, qualunque numero di istanze lo si imposta è quello che si avrà - non di più, né di meno. Questo è chiaramente inefficiente come si può pagare per le istanze non utilizzate e le istanze non vengono aggiunti automaticamente/rimosso come traffico aumenta/diminuisce

Usa basic-scaling e impostare idle-timeout a qualcosa come 24 ore o 48 ore.

Ciò manterrebbe l'istanza in esecuzione finché qualcuno interroga l'API almeno una volta entro tale periodo di tempo.

Utilizzare automatic-scaling con min-idle-instances e richieste di riscaldamento abilitate.

Questo non funziona come previsto. Secondo questi docs:

se la vostra applicazione è al servizio senza traffico, la prima richiesta per l'applicazione sarà sempre una richiesta di carico, non una richiesta di riscaldamento.

Questo non risolve il nostro problema perché se istanze zero sono in esecuzione, quindi non c'è nulla da riscaldare in primo luogo. In questo modo si ottiene ancora la latenza sulla prima richiesta.


L'effetto desiderato mi piacerebbe avere è di avere sempre un'istanza in esecuzione e quindi scalare da lì se il traffico è aumentato (e ovviamente scala verso il basso, ma mai scendere sotto un esempio). Sarebbe come il ridimensionamento automatico ma con 1 istanza sempre in esecuzione.

E 'possibile in GAE? O mi sta sfuggendo qualcosa?

Per ora, la mia soluzione temporanea è quella di impostare la mia app su manual-scaling con 1 istanza, quindi almeno la mia app è utilizzabile per i nuovi utenti.

+0

Un po 'hacker ma: Configurare un controllo sanitario tramite lo stackdriver.Richiesta gratuita ogni pochi minuti per mantenere viva l'istanza – zapl

+0

@zapl potresti fornire ulteriori informazioni su come impostare esattamente questo? – Micro

+0

https://cloud.google.com/monitoring/quickstart-lamp#gs-checks (o qualsiasi altro controllo di uptime che emette periodicamente richieste di http (s) semplici) – zapl

risposta

3

Una soluzione che ho provato e funziona è quella di utilizzare il ridimensionamento automatico ed emettere un processo cron che esegue solo un metodo pubblico statico api (può prendere solo zero param e restituire null) in un servlet ogni 5 minuti circa.

Vedi qui per come impostare che fino: https://cloud.google.com/appengine/docs/java/config/cron#creating_a_cron_job

Questo ti dà il vantaggio di 28 ore di istanza liberi vs usando di scala manuale 8 ore :) Woot Woot

+0

Puoi condividere i contenuti pertinenti del tuo file appengine-web. {Xml | yaml} che stai utilizzando per realizzare questo? Sono curioso –

+0

@CydeWeys Non c'è davvero niente di rilevante in questo. Basta guardare il link su come impostare un cron job - è tutto lì. – Micro