Einer der ärgerlichsten Aspekte bei der Verwendung von GAE für eine brandneue App ist, dass Sie sich damit befassen müssen, dass Instanzen wieder gestartet werden, wenn niemand innerhalb von 15 Minuten Ihre Server erreicht hat. Da die App neu ist oder nur wenige Benutzer hat, gibt es Perioden mit großer Latenz für einige Benutzer, die keine Ahnung haben, dass Instanzen "hochgefahren" werden.
Soweit ich es sehe, haben Sie diese Optionen basierend auf den Dokumenten :
Verwenden Sie manual-scaling
und setzen Sie die Anzahl der Instanzen auf 1
.
Wenn Sie manual-scaling
verwenden, ist die Anzahl der Instanzen, die Sie angeben, die, die Sie haben werden - nicht mehr und nicht weniger. Dies ist eindeutig ineffizient, da Sie möglicherweise für nicht verwendete Instanzen bezahlen und Instanzen nicht automatisch hinzugefügt / entfernt werden, wenn der Verkehr zunimmt / abnimmt.
Verwenden Sie basic-scaling
und setzen Sie idle-timeout
auf etwa 24 Stunden oder 48 Stunden.
Dies würde Ihre Instanz so lange ausführen, wie jemand Ihre API mindestens einmal innerhalb dieses Zeitraums abfragt.
Verwenden Sie automatic-scaling
mit min-idle-instances
und Aufwärmanforderungen aktiviert.
Dies funktioniert nicht wie vorgesehen. Gemäß diesen Dokumenten :
Wenn Ihre App keinen Traffic liefert, wird die erste Anfrage an die App gesendet immer eine Ladeanforderung sein, keine Warmup-Anfrage.
Das löst unser Problem nicht, denn wenn null Instanzen laufen, dann gibt es überhaupt nichts zum Aufwärmen. So erhalten Sie immer noch Latenz bei der ersten Anfrage.
Der gewünschte Effekt, den ich gerne hätte, ist , dass immer eine Instanz läuft und dann von dort aus skaliert wird, wenn der Traffic erhöht wird (und natürlich herunterskaliert, aber nie unter eine Instanz geht). Es wäre wie automatische Skalierung, aber mit 1 Instanz läuft immer.
Ist das in GAE möglich? Oder vermisse ich etwas?
Im Moment ist meine vorübergehende Lösung, meine App auf manual-scaling
mit 1 Instanz zu setzen, damit meine App zumindest für neue Benutzer nutzbar ist.
Eine Lösung, die ich ausprobiert habe und arbeitet, ist die automatische Skalierung und die Ausgabe eines Cron-Jobs, der alle öffentlichen statischen API-Methoden (es kann nur null Params nehmen und null zurückgeben) in einem Servlet alle fünf Minuten ausführt.
Hier erfahren Sie, wie Sie das einrichten: Ссылка
Dies gibt Ihnen den Vorteil von 28 kostenlosen Instanzenstunden gegenüber der manuellen Skalierung von 8 Stunden :) woot woot
Tags und Links java android google-app-engine