Drei einfache Schritte zum Sparen von Kosten beim Prototyping mit der App Engine Flexible Environment

Wenn Sie jemals Google App Engine verwendet haben, wissen Sie, dass dies einer der schnellsten Wege ist, um von der Idee zum funktionierenden Prototyp zu gelangen. Solange Sie die Sandbox-Beschränkungen einhalten, müssen Sie keine Server einrichten, Pakete installieren oder mühsame DevOps-Aufgaben ausführen, die Sie verlangsamen.

Mit der Einführung der App Engine Flexible Environment (früher als Managed VMs bezeichnet) hob Google viele der Sandbox-Einschränkungen auf und fügte weitere integrierte Laufzeiten hinzu, einschließlich Node.js und Ruby. Sie können sogar alles anpassen, indem Sie Ihr eigenes Dockerfile angeben!

Siehe den Vergleich hier.

Diese Flexibilität hat jedoch einen Preis. Die flexible Umgebung ist langsamer zu implementieren und kann nicht so schnell skaliert werden wie die Standardumgebung. Die Standardbereitstellung ist auch für das Prototyping zu umfangreich.

Der größte Unterschied ist meiner Meinung nach das Fehlen einer Skalierung auf Null. Mit App Engine Standard wird alles heruntergefahren, wenn niemand Ihre Anwendung verwendet. In dem Moment, in dem ein Benutzer die App Engine besucht, wird eine Instanz in Millisekunden gestartet, um die neue Anforderung zu bearbeiten. In Kombination mit der großzügigen kostenlosen Stufe müssen Sie sich nicht wirklich um die Infrastrukturkosten für Prototypen kümmern. Derzeit muss in der flexiblen Umgebung mindestens eine Instanz ausgeführt werden, um den Datenverkehr zu bedienen, und es gibt keine freie Ebene.

Schauen wir uns einige Best Practices für das Prototyping mit der flexiblen Umgebung an, mit denen die Kosten minimiert werden können.

Update 2019: Ich empfehle dringend, für die meisten Aufgaben Cloud Run anstelle von App Engine Flex zu verwenden. Meiner Meinung nach kombiniert es das Beste aus App Engine Standard (Pay-per-Use, Skalierung auf Null) mit App Engine Flex (Flexibilität, Dockerfiles). Der einzige große Vorteil von Flex sind die größeren Instanzen.

Die Standardbereitstellung

Starten wir eine Node.js-App in der App Engine Flexible Environment. Die Standard-app.yaml sieht ungefähr so ​​aus:

Laufzeit: nodejs
env: flex

Stellen Sie es mit dem Befehl gcloud bereit:

$ gcloud App bereitstellen

Nach der Bereitstellung der App können wir den Abschnitt "Instances" von App Engine überprüfen, um Folgendes zu sehen:

Standardmäßig werden zwei n1-standard-1-VMs gestartet. Dies soll eine höhere Zuverlässigkeit bieten.

Sehen wir uns die monatlichen Kosten für diese Bereitstellung an. Ich habe diese Standardbereitstellung hier im Google Cloud Pricing Calculator konfiguriert.

Es sind über 80 US-Dollar pro Monat!

Während dieser Preis in Ordnung wäre, wenn Sie den Produktionsverkehr bedienen würden, ist er in der Prototypenphase ziemlich lächerlich.

Erster Schritt: Reduzieren Sie die Anzahl der Instanzen

Wir können unsere Kosten halbieren, indem wir eine Instanz anstelle von zwei starten. Aktivieren Sie dazu die manuelle Skalierung (für einen Prototyp ist keine automatische Skalierung erforderlich) und setzen Sie die Instanzen auf 1. Weitere Informationen zur Skalierung finden Sie hier.

Ändern Sie die app.yaml:

Laufzeit: nodejs
env: flex
manuelle_skalierung:
  Instanzen: 1

Dies wird unsere Kosten von rund 80 auf 40 US-Dollar senken! Nett!

Dies ist jedoch für einen Prototyp sehr teuer. Normalerweise benötigt ein Prototyp nur minimale Ressourcen, damit wir ihn weiter optimieren können.

Schritt zwei: Verwenden Sie kleinere Instanzen

Leider ist dieser Schritt derzeit nicht möglich! Hoffentlich wird diese Option in Zukunft zurückgebracht.

#Während der g1-small schon ziemlich klein ist, können wir noch kleiner werden.

#Das F1-Micro ist eine perfekte Instanz für Prototypen. Es verfügt über genügend RAM und #CPU, um die meisten Workloads auf Prototypebene auszuführen, sodass Sie nicht # Geld für ungenutzte Ressourcen ausgeben.

Laufzeit: nodejs
env: flex
manuelle_skalierung:
  Instanzen: 1
#Ressourcen:
# cpu: .5
# memory_gb: 0.18
# disk_size_gb: 10

#Jetzt sinkt der Preis von 40 USD auf nur 15 USD! Sehr schön!

Schritt Drei: Entwicklere Instanzen herunterfahren

Wenn Sie an einem Prototyp arbeiten, brauchen Sie ihn wahrscheinlich nicht rund um die Uhr. Standardmäßig stellt App Engine jedes Mal eine neue Version bereit. Dies macht das Zurücksetzen auf eine alte Version oder das Aufteilen des Datenverkehrs und das Testen von A / B sehr einfach, ist jedoch für einen Prototyp nicht erforderlich.

Ändern Sie Ihren Bereitstellungsbefehl wie folgt:

$ gcloud app deploy --version dev

Wenn Sie mit der Arbeit für den Tag fertig sind, können Sie Ihre Instanz mit dem folgenden Befehl herunterfahren:

App-Versionen von $ gcloud stoppen dev

Und Sie können es genauso einfach wieder starten:

$ gcloud-App-Versionen starten dev

Nehmen wir an, Sie arbeiten 6 Tage die Woche 10 Stunden am Tag, weil Sie ein 10-facher Ingenieur sind. Wenn Sie App Engine nach Hause ausschalten, sinken die Gesamtkosten auf 15 bis 20 US-Dollar pro Monat!

Fazit

Durch Befolgen dieser drei Schritte haben wir die Kosten für App Engine Flexible von 80 USD auf 20 USD gesenkt.

Das ist eine 85% ige Preissenkung!

Obwohl es wie App Engine Standard immer noch nicht kostenlos ist, halte ich es für viel vernünftiger.

Das Beste daran: Sie müssen weder einen Code noch Vorgänge ändern, um Ihren Prototypen in den Produktionsmaßstab zu bringen. Wechseln Sie einfach zurück zur automatischen Skalierung und ändern Sie Ihre CPU- und RAM-Anforderungen in der App.yaml, und schon kann es losgehen!

Denken Sie also daran: Verwenden Sie beim Prototyping eine einzelne kleine Instanz und fahren Sie sie herunter!

Blinddarm

app.yaml:

Laufzeit: nodejs
env: flex
manuelle_skalierung:
  Instanzen: 1
#Ressourcen:
# cpu: .5
# memory_gb: 0.18
# disk_size_gb: 10

Bereitstellen:

$ gcloud app deploy --version dev

Halt:

App-Versionen von $ gcloud stoppen dev

Start:

$ gcloud-App-Versionen starten dev