Informationen zu Ausführungsumgebungen

Cloud Run-Dienste arbeiten standardmäßig in der Ausführungsumgebung der ersten Generation, die schnelle Kaltstartzeiten und die meisten Emulationen der meisten Betriebssystem-Aufrufe aufweist, aber nicht alle Betriebssystemaufrufe. Ursprünglich war dies die einzige Ausführungsumgebung, die für Dienste in Cloud Run verfügbar ist.

Die Ausführungsumgebung der zweiten Generation bietet vollständige Linux-Kompatibilität anstelle einer Systememulation. Diese Ausführungsumgebung bietet folgende Vorteile:

  • Höhere CPU-Leistung
  • Höhere Netzwerkleistung, insbesondere bei Paketverlust
  • Vollständige Linux-Kompatibilität, einschließlich Unterstützung für alle Systemaufrufe, Namespaces und cgroups
  • Unterstützung von Netzwerkdateisystemen

Obwohl die Ausführungsumgebung der zweiten Generation in der Regel unter dauerhafter Last schneller ausgeführt wird, hat sie für die meisten Dienste auch längere Kaltstartzeiten als die erste Generation.

Sie können die Ausführungsumgebung für Ihren Cloud Run-Dienst angeben, wenn Sie einen neuen Dienst oder eine neue Überarbeitung bereitstellen. Wenn Sie keine Ausführungsumgebung angeben, wird standardmäßig die erste Generation verwendet.

Ausführungsumgebung auswählen

Sie sollten die erste Generation verwenden, wenn eine der folgenden Bedingungen zutrifft:

  • Ihr Cloud Run-Dienst hat stoßweisen Traffic und muss schnell auf viele Instanzen heraufskaliert werden oder Ihr Dienst ist empfindlich gegenüber Kaltstartzeiten.
  • Ihr Cloud Run-Dienst hat seltenen Traffic, der häufig zu einer horizontalen Skalierung von null führt.
  • Sie möchten weniger als 512 MiB Arbeitsspeicher verwenden. Die Ausführungsumgebung der zweiten Generation erfordert mindestens 512 MiB Arbeitsspeicher.

Sie sollten die zweite Generation verwenden, wenn einer der folgenden Bedingungen auf Ihren Cloud Run-Dienst zutrifft:

  • Ihr Dienst muss ein Netzwerkdateisystem verwenden, das nur von der zweiten Generation unterstützt wird.
  • Ihr Dienst hat relativ gleichmäßigen Traffic und ist eher tolerant gegenüber den etwas langsameren Kaltstarts.
  • Ihr Dienst hat CPU-intensive Arbeitslasten.
  • Ihr Dienst könnte von einer höheren Netzwerkleistung profitieren.
  • Ihr Dienst muss Software verwenden, bei der aufgrund von nicht implementierten Systemaufrufen Probleme bei der Ausführung in der ersten Generation auftreten.
  • Ihr Dienst benötigt Linux cgroup-Funktionalität.

Best Practices für die Verwendung der Ausführungsumgebung der zweiten Generation

Wir empfehlen, dass Ihr Container einen SIGTERM-Handler installiert, insbesondere wenn Sie das CPU On-Demand-Abrechnungsmodell verwenden.

Die Verarbeitung von SIGTERM bietet dem Container die Möglichkeit, sämtliche notwendige Bereinigungsaufgaben wie das Leeren von Logs vor dem Beenden durchzuführen. Falls der Container SIGTERM nicht abfängt, erhält er trotzdem 10 Sekunden zum Ausführen dieser Aufgaben. Diese 10 Sekunden sind kostenpflichtig.

So prüfen Sie, ob Ihr Container SIGTERM verarbeitet

So ermitteln Sie, ob auf Ihrem Container ein SIGTERM-Handler installiert ist:

  1. Starten Sie Cloud Shell. Den Schaltfläche Schaltfläche "Cloud Run aktivieren" Cloud Shell aktivieren finden Sie in der Kopfzeile der Dokumentationsseite, auf der Sie sich befinden. Möglicherweise müssen Sie es autorisieren und auf die Bereitstellung warten. Alternativ können Sie eine eigenständige Sitzung starten.

  2. Führen Sie den Container lokal in Cloud Shell aus:

    docker run IMAGE_URL

    Ersetzen Sie IMAGE_URL durch einen Verweis auf das Container-Image, z. B. us-docker.pkg.dev/cloudrun/container/hello:latest.

  3. Öffnen Sie einen weiteren Tab in Cloud Shell und rufen Sie eine Liste der Container ab, die in der aktuellen Cloud Shell-Sitzung ausgeführt werden:

    docker container ls

    Sie müssen die vom Befehl zurückgegebene Container-ID ermitteln.

  4. Mit der Container-ID ein SIGTERM-Signal an den Container senden

    docker kill -s SIGTERM CONTAINER_ID
  5. Kehren Sie zu dem Tab zurück, auf dem Sie docker run aufgerufen haben, um zu sehen, ob der Container beendet wurde (angehalten). Wenn das SIGTERM-Signal dazu geführt hat, dass der Container beendet wurde, verarbeitet der Container SIGTERM.

Verarbeiten von SIGTERM

Wenn Ihr Container SIGTERM nicht verarbeitet, können Sie einen SIGTERM-Handler am einfachsten hinzufügen, indem Sie Ihren Dienst mit tini umschließen. Auf diese Weise wird der Dienst als Unterprozess von tini ausgeführt, was die Rolle des Container-init-Prozesses übernimmt. Eine Anleitung dazu finden Sie in der Docker-Anleitung.

Alternativ können Sie Ihre Anwendung so ändern, dass SIGTERM direkt verarbeitet wird.

Nächste Schritte