Kosten optimieren: Computing, Container und serverloses Computing

Last reviewed 2023-07-12 UTC

Dieses Dokument des Google Cloud-Architektur-Frameworks enthält Empfehlungen zur Kostenoptimierung Ihrer virtuellen Maschinen (VMs), Container und serverlosen Ressourcen in Google Cloud.

Die Anleitung in diesem Abschnitt richtet sich an Architekten, Entwickler und Administratoren, die für die Bereitstellung und Verwaltung von Rechenressourcen für Arbeitslasten in der Cloud verantwortlich sind.

Rechenressourcen sind der wichtigste Teil Ihrer Cloud-Infrastruktur. Wenn Sie Ihre Arbeitslasten zu Google Cloud migrieren, ist eine typische erste Wahl Compute Engine, womit Sie VMs effizient in der Cloud bereitstellen und verwalten können. Compute Engine bietet eine breite Palette von Maschinentypen und ist global in allen Google Cloud-Regionen verfügbar. Mit den vordefinierten und benutzerdefinierten Maschinentypen von Compute Engine können Sie VMs bereitstellen, die ähnliche Rechenkapazität wie Ihre lokale Infrastruktur bieten, sodass Sie den Migrationsprozess beschleunigen können. Compute Engine bietet Ihnen den Preisvorteil, dass Sie nur für die verwendete Infrastruktur bezahlen. Sie profitieren außerdem von erheblichen Einsparungen, wenn Sie mehr Rechenressourcen mit Rabatten für kontinuierliche Nutzung verwenden.

Neben Compute Engine bietet Google Cloud Container und serverlose Rechendienste. Der serverlose Ansatz kann für neue Dienste, die nicht immer ausgeführt werden, kostengünstiger sein (z. B. APIs, Datenverarbeitung und Ereignisverarbeitung).

Neben allgemeinen Empfehlungen enthält dieses Dokument eine Anleitung zum Optimieren der Kosten Ihrer Rechenressourcen, wenn Sie die folgenden Produkte verwenden:

  • Compute Engine
  • Google Kubernetes Engine (GKE)
  • Cloud Run
  • Cloud Functions
  • App Engine

Allgemeine Empfehlungen

Die folgenden Empfehlungen gelten für alle Rechen-, Container- und serverlosen Dienste in Google Cloud, die in diesem Abschnitt erörtert werden.

Nutzung und Kosten verfolgen

Verwenden Sie die folgenden Tools und Techniken, um die Ressourcennutzung und -kosten zu überwachen:

Bereitstellung von Ressourcen steuern

Verwenden Sie die folgenden Empfehlungen, um die Menge der in der Cloud bereitgestellten Ressourcen und den Standort, an dem die Ressourcen erstellt werden, zu steuern:

  • Ressourcenkontingente verwenden, um sicherzustellen, dass der Ressourcenverbrauch und die Kosten die Prognose nicht überschreiten.
  • Ressourcen in der Region mit den niedrigsten Kosten bereitstellen, die den Latenzanforderungen Ihrer Arbeitslast entspricht. Einschränkung der Organisationsrichtlinie gcp.resourceLocations verwenden, um zu steuern, wo Ressourcen bereitgestellt werden.

Rabatte für zugesicherte Nutzung erhalten

Rabatte für zugesicherte Nutzung sind ideal für Arbeitslasten mit vorhersehbarem Ressourcenbedarf. Ermitteln Sie nach der Migration Ihrer Arbeitslast zu Google Cloud die Baseline für die erforderlichen Ressourcen und erhalten Sie höhere Rabatte für die zugesicherte Nutzung. Wenn Sie beispielsweise eine Zusicherung für 1 oder 3 Jahre erwerben, erhalten Sie einen erheblichen Rabatt auf die Preise von Compute Engine-VMs.

Kostenverfolgung mithilfe von Labels automatisieren

Definieren Sie Labels und weisen Sie sie konsistent zu. Im Folgenden finden Sie Beispiele dazu, wie Sie mithilfe von Labels die Kostenverfolgung automatisieren können:

  • Weisen Sie für VMs, die nur Entwickler während der Geschäftszeiten verwenden, das Label env: development zu. Mit Cloud Scheduler können Sie eine serverlose Cloud Functions-Funktion einrichten, um diese VMs nach den Geschäftszeiten herunterzufahren und bei Bedarf neu zu starten.

  • Weisen Sie bei einer Anwendung, die mehrere Cloud Run-Dienste und Cloud Functions-Instanzen hat, allen Cloud Run- und Cloud Functions-Ressourcen ein konsistentes Label zu. Identifizieren Sie die teuren Bereiche und ergreifen Sie Maßnahmen zur Kostensenkung.

Abrechnungsberichte anpassen

Konfigurieren Sie Ihre Cloud Billing-Berichte, indem Sie die erforderlichen Filter einrichten und die Daten nach Bedarf gruppieren (z. B. nach Projekten, Diensten oder Labels).

Kultur der Kosteneinsparung fördern

Schulen Sie Ihre Entwickler und Operatoren bezüglich Ihrer Cloud-Infrastruktur. Erstellen und fördern Sie Lernprogramme mit Präzenz- oder Onlinekursen, Foren, Begutachtungen durch Kollegen, gemeinsamer Programmierung und Kosteneinsparungsspielen. Wie in der DORA-Studie von Google gezeigt, ist die Organisationskultur ein wichtiger Faktor, um die Leistung zu verbessern, Nacharbeit und Burnout zu reduzieren und die Kosten zu optimieren. Durch Einblick in die Kosten ihrer Ressourcen können Mitarbeiter ihre Prioritäten und Aktivitäten an Geschäftszielen und Einschränkungen ausrichten.

Compute Engine

Dieser Abschnitt enthält Anleitungen zur Kostenoptimierung Ihrer Compute Engine-Ressourcen. Zusätzlich zu dieser Anleitung empfehlen wir, dass Sie den zuvor erläuterten allgemeinen Empfehlungen folgen.

Informationen zum Abrechnungsmodell

Weitere Informationen zu den Abrechnungsoptionen für Compute Engine finden Sie unter Preise.

Ressourcenverbrauch analysieren

Damit Sie den Ressourcenverbrauch in Compute Engine nachvollziehen können, müssen Sie Nutzungsdaten nach BigQuery exportieren. Fragen Sie den BigQuery-Datenspeicher ab, um die Trends der vCPU-Nutzung Ihres Projekts zu analysieren und die Anzahl der vCPUs zu ermitteln, die Sie zurückerhalten können. Wenn Sie Grenzwerte für die Anzahl der Kerne pro Projekt definiert haben, analysieren Sie Nutzungstrends, um Anomalien zu erkennen und Korrekturmaßnahmen zu ergreifen.

Inaktive Ressourcen zurückgewinnen

Orientieren Sie sich an den folgenden Empfehlungen, wenn Sie nicht verwendete VMs und Laufwerke identifizieren und zurückerhalten möchten, z. B. VMs für Proof-of-Concept-Projekte, die mittlerweile keine Priorität mehr haben:

  • Mit dem Recommender für inaktive VMs können Sie inaktive VMs und nichtflüchtige Speicher anhand von Nutzungsmesswerten identifizieren.
  • Bevor Sie Ressourcen löschen, prüfen Sie die möglichen Auswirkungen der Aktion und planen Sie, die Ressourcen bei Bedarf neu zu erstellen.
  • Erstellen Sie einen Snapshot, bevor Sie eine VM löschen. Wenn Sie eine VM löschen, werden die angehängten Laufwerke gelöscht, sofern Sie nicht die Option Laufwerk behalten ausgewählt haben.
  • Wenn möglich, sollten Sie VMs beenden, anstatt sie zu löschen. Wenn Sie eine VM beenden, wird die Instanz zwar beendet, Laufwerke und IP-Adressen bleiben jedoch erhalten, bis Sie sie trennen oder löschen.

Kapazität an den Bedarf anpassen

Planen Sie Ihre VMs so, dass sie automatisch gestartet und beendet werden. Wenn eine VM beispielsweise nur an fünf Tagen pro Woche acht Stunden pro Tag für verwendet wird (also 40 Stunden pro Woche), können Sie möglicherweise die Kosten um 75 % reduzieren, indem Sie die VM während der 128 Stunden in der Woche, in denen die VM nicht verwendet wird, beenden.

Führen Sie ein Autoscaling von Rechenkapazität anhand des Bedarfs mithilfe von verwalteten Instanzgruppen durch. Sie können die Kapazität anhand der für Ihr Unternehmen relevanten Parameter (z. B. CPU-Nutzung oder Load-Balancing-Kapazität) automatisch skalieren.

Geeignete Maschinentypen auswählen

Passen Sie die Größe Ihrer VMs entsprechend den Rechenanforderungen Ihrer Arbeitslast an. Verwenden Sie dazu den Recommender für den VM-Maschinentyp.

Bei Arbeitslasten mit vorhersehbaren Ressourcenanforderungen können Sie den Maschinentyp mithilfe von benutzerdefinierten VMs an Ihre Anforderungen anpassen und Kosten sparen.

Ziehen Sie für fehlertolerante Batchverarbeitungsarbeitslasten die Verwendung von Spot-VMs in Erwägung. Hochleistungs-Computing (HPC), Big Data, Medientranscodierung, Continuous Integration und Continuous Delivery (CI/CD) sowie zustandslose Webanwendungen sind Beispiele für Arbeitslasten, die auf Spot VMs bereitgestellt werden können. Ein Beispiel dafür, wie Descartes Labs die Analysekosten über VMs auf Abruf (der älteren Version von Spot-VMs) zur Verarbeitung von Satellitenbildern senken kann, finden Sie in der Fallstudie zu Descartes Labs.

Lizenzierungsoptionen bewerten

Wenn Sie Arbeitslasten von Drittanbietern zu Google Cloud migrieren, können Sie die Kosten senken, indem Sie Ihre eigenen Lizenzen (BYOL) verwenden. Wenn Sie beispielsweise Microsoft Windows Server-VMs bereitstellen möchten, können Sie anstelle eines Premium-Images, das zusätzliche Kosten für die Drittanbieterlizenz verursacht, ein benutzerdefiniertes Windows-BYOL-Image erstellen und verwenden. Sie zahlen dann nur für die VM-Infrastruktur, die Sie in Google Cloud verwenden. Mit dieser Strategie können Sie Ihre bestehenden Investitionen in Drittanbieterlizenzen weiter nutzen.

Wenn Sie sich für einen BYOL-Ansatz entscheiden, empfehlen wir Folgendes:

  • Stellen Sie die erforderliche Anzahl von Rechen-CPU-Kernen unabhängig vom Arbeitsspeicher mithilfe von benutzerdefinierten Maschinentypen bereit und begrenzen Sie die Lizenzkosten von Drittanbietern auf die Anzahl der CPU-Kerne, die Sie benötigen.
  • Reduzieren Sie die Anzahl der vCPUs pro Kern von 2 auf 1, indem Sie das gleichzeitige Multithreading (SMT) deaktivieren und Ihre Lizenzkosten um 50 % reduzieren.

Wenn Ihre Drittanbieter-Arbeitslasten dedizierte Hardware für die Erfüllung von Sicherheits- oder Compliance-Anforderungen benötigen, können Sie eigene Lizenzen auf Knoten für einzelne Mandanten verwenden.

Google Kubernetes Engine

Dieser Abschnitt enthält eine Anleitung zum Optimieren der Kosten Ihrer GKE-Ressourcen.

Zusätzlich zu den folgenden Empfehlungen finden Sie weitere Informationen in den zuvor erläuterten Allgemeinen Empfehlungen:

  • Verwenden Sie GKE Autopilot, damit GKE die Effizienz der Clusterinfrastruktur maximieren kann. Sie müssen nicht den Zustand Ihrer Knoten überwachen, kein Bin-Packing vornehmen und nicht die für Ihre Arbeitslasten erforderliche Kapazität berechnen.
  • Führen Sie die Feinabstimmung von GKE-Autoscaling mit dem horizontalen Pod-Autoscaler (HPA), vertikalen Pod-Autoscaler (VPA), Cluster Autoscaler (CA) oder der automatischen Knotenbereitstellung basierend auf den Anforderungen Ihrer Arbeitslast durch.
  • Verwenden Sie für Batcharbeitslasten, die nicht anfällig für Startlatenz sind, das Autoscaling-Profil optimization-utilization, um die Auslastung des Clusters zu verbessern.
  • Verwenden Sie die automatische Knotenbereitstellung, um das GKE-Cluster-Autoscaling zu erweitern und Knotenpools gemäß den Spezifikationen für ausstehende Pods ohne Überdimensionierung effizient zu erstellen und zu löschen.
  • Verwenden Sie separate Knotenpools: ein statischer Knotenpool für statisches Laden und dynamische Knotenpools mit Cluster-Autoscaling-Gruppen für dynamisches Laden.
  • Verwenden Sie Spot VMs für Kubernetes-Knotenpools, wenn Ihre Pods fehlertolerant sind und in weniger als 25 Sekunden ordnungsgemäß beendet werden können. In Kombination mit dem GKE-Cluster-Autoscaler können Sie mit dieser Strategie dafür sorgen, dass der Knotenpool mit kostengünstigeren VMs (in diesem Fall der Knotenpool mit Spot-VMs) zuerst skaliert wird.
  • Wählen Sie kostengünstige Maschinentypen aus, z. B. E2, N2D, T2D), die ein bis zu 40 % besseres Preis-Leistungs-Verhältnis bieten.
  • Verwenden Sie die GKE-Nutzungsmessung, um die Nutzungsprofile Ihrer Cluster nach Namespaces und Labels zu analysieren. Identifizieren Sie das Team oder die Anwendung, die am meisten ausgibt, die Umgebung oder Komponente, die Nutzungsspitzen oder Kostenspitzen verursacht hat, und das Team, das Ressourcen verschwendet.
  • Verwenden Sie Ressourcenkontingente in mehrmandantenfähigen Clustern, um zu verhindern, dass ein Mandant mehr als den ihm zugewiesenen Anteil an Clusterressourcen nutzt.
  • Planen Sie ein automatisches Herunterskalieren von Entwicklungs- und Testumgebungen nach Geschäftszeiten.
  • Befolgen Sie die Best Practices zum Ausführen kostenoptimierter Kubernetes-Anwendungen in GKE.

Cloud Run

Dieser Abschnitt enthält Anleitungen zur Kostenoptimierung Ihrer Cloud Run-Ressourcen.

Zusätzlich zu den folgenden Empfehlungen finden Sie weitere Informationen in den zuvor erläuterten Allgemeinen Empfehlungen:

  • Passen Sie die Nebenläufigkeitseinstellung (Standard: 80) an, um die Kosten zu senken. Cloud Run bestimmt die Anzahl der Anfragen, die an eine Instanz gesendet werden sollen, basierend auf der CPU- und Arbeitsspeichernutzung. Wenn Sie die Nebenläufigkeit von Anfragen erhöhen, können Sie die Anzahl der erforderlichen Instanzen reduzieren.
  • Legen Sie ein Limit für die Anzahl der Instanzen fest, die bereitgestellt werden können.
  • Schätzen Sie die Anzahl der erforderlichen Instanzen mithilfe des Messwerts der abrechenbaren Instanzzeit. Wenn der Messwert beispielsweise 100s/s anzeigt, wurden etwa 100 Instanzen geplant. Fügen Sie einen Puffer von 30 % hinzu, um die Leistung beizubehalten, also 130 Instanzen für 100 s/s an Traffic.
  • Konfigurieren Sie eine Mindestanzahl von Instanzen, um die Auswirkungen von Kaltstarts zu reduzieren. Wenn diese Instanzen inaktiv sind, werden sie zu einem Zehntel des Preises abgerechnet.
  • Verfolgen Sie die CPU-Nutzung und passen Sie die CPU-Limits entsprechend an.
  • Verwenden Sie die Trafficverwaltung, um eine kostenoptimierte Konfiguration zu bestimmen.
  • Erwägen Sie die Verwendung von Cloud CDN oder Firebase Hosting zum Bereitstellen statischer Inhalte.
  • Erwägen Sie für Cloud Run-Anwendungen, die Anfragen global verarbeiten, die Anwendung in mehreren Regionen bereitzustellen, da interkontinentaler ausgehender Traffic teuer sein kann. Dieses Design wird empfohlen, wenn Sie einen Load-Balancer und CDN verwenden.
  • Reduzieren Sie die Startzeiten für Ihre Instanzen, da die Startzeit auch kostenpflichtig ist.
  • Erwerben Sie Rabatte für zugesicherte Nutzung und sparen Sie bis zu 17 % des On-Demand-Preises für eine einjährige Nutzungszusicherung.

Cloud Functions

Dieser Abschnitt enthält Anleitungen zur Kostenoptimierung Ihrer Cloud Functions-Ressourcen.

Zusätzlich zu den folgenden Empfehlungen finden Sie weitere Informationen in den zuvor erläuterten Allgemeinen Empfehlungen:

  • Beobachten Sie die Ausführungszeit Ihrer Funktionen. Experimentieren Sie und führen Sie Benchmark-Tests durch, um die kleinste Funktion zu entwerfen, die noch den erforderlichen Leistungsgrenzwert erreicht.
  • Wenn Ihre Cloud Functions-Arbeitslasten ständig ausgeführt werden, sollten Sie eventuell GKE oder Compute Engine verwenden, um die Arbeitslasten zu verarbeiten. Container oder VMs sind möglicherweise kostengünstigere Optionen für immer ausgeführte Arbeitslasten.
  • Beschränken Sie die Anzahl der Funktionsinstanzen, die gleichzeitig vorhanden sein können.
  • Vergleichen Sie die Laufzeitleistung der Cloud Functions-Programmiersprachen mit der Arbeitslast Ihrer Funktion. Programme in kompilierten Sprachen haben längere Kaltstarts, werden jedoch schneller ausgeführt. Programme in interpretierten Sprachen sind langsamer, haben aber einen geringeren Kaltstartaufwand. Kurze, einfache Funktionen, die häufig ausgeführt werden, können in einer interpretierten Sprache weniger kosten.
  • Löschen Sie temporäre Dateien, die auf das lokale Laufwerk geschrieben wurden. Dabei handelt es sich um ein speicherinternes Dateisystem. Temporäre Dateien belegen Arbeitsspeicher, der Ihrer Funktion zugewiesen ist, und bleiben manchmal zwischen Aufrufen bestehen. Wenn Sie diese Dateien nicht löschen, kann ein Fehler aufgrund fehlenden Arbeitsspeichers auftreten und einen Kaltstart auslösen, was die Ausführungszeit und Kosten erhöht.

App Engine

Dieser Abschnitt enthält Anleitungen zur Kostenoptimierung Ihrer App Engine-Ressourcen.

Zusätzlich zu den folgenden Empfehlungen finden Sie weitere Informationen in den zuvor erläuterten Allgemeinen Empfehlungen:

  • Legen Sie die maximale Anzahl von Instanzen auf der Grundlage Ihres Traffics und der Anfragelatenz fest. App Engine skaliert die Kapazität normalerweise auf Basis des Traffics, den die Anwendungen erhalten. Sie können die Kosten kontrollieren, indem Sie die Anzahl der Instanzen begrenzen, die App Engine erstellen kann.
  • Wenn Sie den für Ihre Anwendung verfügbaren Arbeitsspeicher oder die CPU begrenzen möchten, legen Sie eine Instanzklasse fest. Weisen Sie für CPU-intensive Anwendungen mehr CPU zu. Testen Sie einige Konfigurationen, um die optimale Größe zu ermitteln.
  • Vergleichen Sie Ihre App Engine-Arbeitslast in mehreren Programmiersprachen. Beispielsweise benötigt eine in einer bestimmten Sprache implementierte Arbeitslast vielleicht weniger Instanzen und verursacht geringere Kosten, um Aufgaben rechtzeitig auszuführen, als dieselbe Arbeitslast, die in einer anderen Sprache programmiert ist.
  • Optimieren Sie für weniger Kaltstarts. Verringern Sie nach Möglichkeit die CPU-intensiven oder lang andauernden Aufgaben im globalen Bereich. Versuchen Sie, die Aufgabe in kleinere Vorgänge aufzuteilen, die im Kontext einer Anfrage "verzögert geladen" werden können.
  • Wenn Sie stoßweisen Traffic erwarten, konfigurieren Sie eine Mindestanzahl inaktiver Instanzen, die vorbereitet werden. Wenn Sie keinen Traffic erwarten, können Sie die Mindestanzahl inaktiver Instanzen auf null festlegen.
  • Wenn Sie Leistung und Kosten ausbalancieren möchten, führen Sie einen A/B-Test durch, indem Sie den Traffic auf zwei Versionen aufteilen, die jeweils eine andere Konfiguration haben. Überwachen Sie die Leistung und die Kosten der einzelnen Versionen, passen Sie sie bei Bedarf an und wählen Sie die Konfiguration aus, an die der Traffic gesendet werden soll.
  • Konfigurieren Sie die Nebenläufigkeit von Anfragen und legen Sie für die maximale Anzahl gleichzeitiger Anfragen einen höheren Wert als den Standardwert fest. Je mehr Anfragen jede Instanz gleichzeitig verarbeiten kann, desto effizienter können Sie vorhandene Instanzen zur Bereitstellung von Traffic verwenden.

Nächste Schritte