In diesem Dokument wird die Implementierung der Referenzarchitektur beschrieben, die unter Mikrodienste in Pub/Sub und GKE einbinden beschrieben wird. Die Architektur ist darauf ausgelegt, lang andauernde Prozesse mithilfe von Containern und asynchronem Messaging zu verarbeiten.
Dieses Dokument verwendet eine Beispielanwendung zum Teilen von Fotos, in der Miniaturansichten von Fotos generiert werden. Sie stellen die Anwendung mit Google Kubernetes Engine (GKE) bereit und verwenden Pub/Sub, um lang andauernde Prozesse asynchron aufzurufen. Außerdem verwenden Sie Pub/Sub-Benachrichtigungen für Cloud Storage, um Nebenjobs hinzuzufügen, ohne den Code der Anwendung zu ändern.
Die Anwendung wird von Cloud Build containerisiert und in Artifact Registry gespeichert. Mithilfe von Cloud Vision werden unangemessene Bilder erkannt.
Architektur für die Anwendung zum Generieren von Miniaturansichten
Das folgende Diagramm veranschaulicht das Design der Beispiel-Fotoalbumanwendung, die die Referenzarchitektur implementiert.
Abbildung 1. Architektur für Image-Verarbeitung, die auf der Verwendung von Containern und asynchronem Messaging basiert.
Das obige Diagramm veranschaulicht, wie die Miniaturansicht generiert wird:
- Ein Kunde lädt ein Bild in die Anwendung hoch.
- Die Anwendung speichert das Bild in Cloud Storage.
- Für die Miniaturansicht wird eine Anfrage generiert.
- Der Miniaturansichtsgenerator erstellt die Miniaturansicht.
- Die erfolgreiche Antwort wird an die Fotoalbumanwendung gesendet.
- Die erfolgreiche Antwort wird an den Client gesendet und die Miniaturansicht ist in Cloud Storage verfügbar.
Das folgende Diagramm zeigt, wie die Anwendung die Generierung von Miniaturansichten als separaten Dienst asynchron implementiert.
Abbildung 2. Architektur der Extraktion von Miniaturansichten
Sie verwenden Pub/Sub, um Dienstanfragen an den Dienst zum Generieren von Miniaturansichten zu senden. Diese neue Architektur macht den Dienstaufruf asynchron, sodass im Hintergrund eine Miniaturansicht erstellt wird, nachdem die Anwendung die Antwort an einen Client gesendet hat. Mit diesem Design lässt sich der Dienst zum Generieren von Miniaturansichten außerdem skalieren, sodass mehrere Jobs parallel ausgeführt werden können.
Lernziele
- Exemplarische Fotoalbumanwendung in GKE bereitstellen
- Asynchrone Dienstaufrufe über die Anwendung ausführen
- Pub/Sub-Benachrichtigungen für Cloud Storage zum Auslösen der Anwendung verwenden, wenn eine neue Datei in den Cloud Storage-Bucket hochgeladen wird
- Mithilfe von Pub/Sub weitere Aufgaben ausführen, ohne die Anwendung zu ändern
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
- Cloud Storage
- Cloud SQL
- Pub/Sub
- Von GKE verwendete Compute Engine-Instanzen
- Clusterverwaltungsgebühr für GKE
- Cloud Load Balancing
- Cloud Build
- Artifact Registry
- Vision
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Wenn Sie die Beispielanwendung fertig erstellt haben, können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Hinweise
- Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
GKE, Cloud SQL, Cloud Build, Artifact Registry, and Cloud Vision APIs aktivieren.
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
GKE, Cloud SQL, Cloud Build, Artifact Registry, and Cloud Vision APIs aktivieren.
-
Aktivieren Sie Cloud Shell in der Google Cloud Console.
Unten in der Google Cloud Console wird eine Cloud Shell-Sitzung gestartet und eine Eingabeaufforderung angezeigt. Cloud Shell ist eine Shell-Umgebung, in der das Google Cloud CLI bereits installiert ist und Werte für Ihr aktuelles Projekt bereits festgelegt sind. Das Initialisieren der Sitzung kann einige Sekunden dauern.
Umgebung einrichten
In diesem Abschnitt weisen Sie Standardeinstellungen für Werte zu, die im gesamten Dokument verwendet werden. Wenn Sie Ihre Cloud Shell-Sitzung schließen, gehen diese Umgebungseinstellungen verloren.
Legen Sie in Cloud Shell Ihr Google Cloud-Standardprojekt fest:
gcloud config set project PROJECT_ID
Ersetzen Sie
PROJECT_ID
durch Ihre Google Cloud-Projekt-ID.Legen Sie die Compute Engine-Standardregion fest:
gcloud config set compute/region REGION export REGION=REGION
Ersetzen Sie
REGION
durch eine Region in Ihrer Nähe. Weitere Informationen finden Sie unter Regionen und Zonen.Legen Sie Ihre standardmäßige Compute Engine-Zone fest.
gcloud config set compute/zone ZONE export ZONE=ZONE
Ersetzen Sie
ZONE
durch eine Zone in Ihrer Nähe.Laden Sie die Beispielanwendungsdateien herunter und legen Sie das aktuelle Verzeichnis fest:
git clone https://github.com/GoogleCloudPlatform/gke-photoalbum-example cd gke-photoalbum-example
Cloud Storage-Bucket erstellen und Standardbild für Miniaturansicht hochladen
Erstellen Sie in Cloud Shell einen Cloud Storage-Bucket zum Speichern der Originalbilder und Miniaturansichten:
export PROJECT_ID=$(gcloud config get-value project) gsutil mb -c regional -l ${REGION} gs://${PROJECT_ID}-photostore
Laden Sie die Standarddatei für die Miniaturansicht hoch:
gsutil cp ./application/photoalbum/images/default.png \ gs://${PROJECT_ID}-photostore/thumbnails/default.png
- Die hochgeladenen Bilder werden im folgenden Format gespeichert:
gs://PROJECT_ID-photostore/FILENAME
, wobeiFILENAME
für den Namen der hochgeladenen Bilddatei steht. - Die generierten Miniaturansichten werden im folgenden Format gespeichert:
gs://PROJECT_ID-photostore/thumbnails/FILENAME
. - Das Originalbild und die zugehörige Miniaturansicht haben denselben
FILENAME
-Wert, die Miniaturansicht wird jedoch im Bucketthumbnails
gespeichert. Während die Miniaturansicht erstellt wird, ist das folgende Platzhalterbild für die Miniaturansicht
default.png
in der Fotoalbumanwendung zu sehen.
- Die hochgeladenen Bilder werden im folgenden Format gespeichert:
Veröffentlichen Sie die Datei mit der Miniaturansicht:
gsutil acl ch -u AllUsers:R \ gs://${PROJECT_ID}-photostore/thumbnails/default.png
Cloud SQL-Instanz und MySQL-Datenbank erstellen
Erstellen Sie die Cloud SQL-Instanz in Cloud Shell:
gcloud sql instances create photoalbum-db --region=${REGION} \ --database-version=MYSQL_8_0
Rufen Sie den Verbindungsnamen ab:
gcloud sql instances describe photoalbum-db \ --format="value(connectionName)"
Notieren Sie sich den Namen. Sie benötigen ihn später.
Legen Sie das Passwort für den MySQL-Nutzer
root@%
fest:gcloud sql users set-password root --host=% --instance=photoalbum-db \ --password=PASSWORD
Ersetzen Sie
PASSWORD
durch ein sicheres Passwort für den Nutzerroot@%
.Stellen Sie eine Verbindung zur Cloud SQL-Instanz her:
gcloud sql connect photoalbum-db --user=root --quiet
Wenn Sie dazu aufgefordert werden, geben Sie das Passwort ein, das Sie im vorherigen Schritt eingerichtet haben.
Erstellen Sie eine Datenbank mit dem Namen
photo_db
, wobei der Nutzerappuser
und das Passwortpas4appuser
ist:create database photo_db; create user 'appuser'@'%' identified by 'pas4appuser'; grant all on photo_db.* to 'appuser'@'%' with grant option; flush privileges;
Bestätigen Sie das Ergebnis und beenden Sie MySQL:
show databases; select user from mysql.user; exit
Bestätigen Sie in der Ausgabe, dass die Datenbank
photo_db
und der Nutzerappuser
erstellt wurden:mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | photo_db | | sys | +--------------------+ 5 rows in set (0.16 sec) mysql> \t Outfile disabled. mysql> select user from mysql.user; +-------------------+ | user | +-------------------+ | appuser | | cloudsqlreplica | | cloudsqlsuperuser | | root | | cloudsqlexport | | cloudsqlimport | | cloudsqloneshot | | root | | cloudsqlexport | | cloudsqlimport | | cloudsqloneshot | | root | | cloudsqlapplier | | cloudsqlimport | | mysql.infoschema | | mysql.session | | mysql.sys | | root | +-------------------+ 18 rows in set (0.16 sec) mysql> exit Bye
Pub/Sub-Thema und -Abo erstellen
Erstellen Sie in Cloud Shell ein Pub/Sub-Thema mit dem Namen
thumbnail-service
:gcloud pubsub topics create thumbnail-service
Die Fotoalbumanwendung veröffentlicht eine Nachricht im Thema
thumbnail-service
, um Anfragen an den Dienst zum Generieren von Miniaturansichten zu senden.Erstellen Sie ein Pub/Sub-Abo mit dem Namen
thumbnail-workers
:gcloud pubsub subscriptions create --topic thumbnail-service thumbnail-workers
Der Dienst zum Generieren von Miniaturansichten erhält Anfragen vom Abo
thumbnail-workers
.
GKE-Cluster erstellen
Erstellen Sie in Cloud Shell einen GKE-Cluster mit der Berechtigung zum Aufrufen von APIs:
gcloud container clusters create "photoalbum-cluster" \ --scopes "https://www.googleapis.com/auth/cloud-platform" \ --num-nodes "5"
Rufen Sie Anmeldedaten für den Zugriff ab, die so konfiguriert sind, dass Sie den Cluster in späteren Schritten mit dem
kubectl
-Befehl verwalten können:gcloud container clusters get-credentials photoalbum-cluster
Listen Sie die Knoten auf:
kubectl get nodes
Bestätigen Sie in der Ausgabe, dass es fünf Knoten gibt, deren
STATUS
-WertReady
ist:NAME STATUS ROLES AGE VERSION gke-photoalbum-cluster-default-pool-d637570a-2pfh Ready <none> 2m55s v1.24.10-gke.2300 gke-photoalbum-cluster-default-pool-d637570a-3rm4 Ready <none> 2m55s v1.24.10-gke.2300 gke-photoalbum-cluster-default-pool-d637570a-f7l4 Ready <none> 2m55s v1.24.10-gke.2300 gke-photoalbum-cluster-default-pool-d637570a-qb2z Ready <none> 2m53s v1.24.10-gke.2300 gke-photoalbum-cluster-default-pool-d637570a-rvnp Ready <none> 2m54s v1.24.10-gke.2300
Artifact Registry-Repository erstellen
Erstellen Sie in Cloud Shell ein neues Repository zum Speichern von Container-Images:
gcloud artifacts repositories create photoalbum-repo \ --repository-format=docker \ --location=us-central1 \ --description="Docker repository"
Images für die Anwendung erstellen
Öffnen Sie die Datei
application/photoalbum/src/auth_decorator.py
in einem Texteditor und aktualisieren Sie den Nutzernamen und das Passwort:USERNAME = 'username' PASSWORD = 'passw0rd'
Erstellen Sie in Cloud Shell mit dem Cloud Build-Dienst ein Image für die Fotoalbumanwendung:
gcloud builds submit ./application/photoalbum -t \ us-central1-docker.pkg.dev/${PROJECT_ID}/photoalbum-repo/photoalbum-app
Erstellen Sie mit dem Cloud Build-Dienst ein Image für den Dienst zum Generieren von Miniaturansichten
thumbnail-worker
:gcloud builds submit ./application/thumbnail -t \ us-central1-docker.pkg.dev/${PROJECT_ID}/photoalbum-repo/thumbnail-worker
Fotoalbumanwendung bereitstellen
Aktualisieren Sie in Cloud Shell die Kubernetes-Deployment-Manifeste für das Fotoalbum und den Miniaturansichtsgenerator mit Werten aus Ihrer Umgebung:
connection_name=$(gcloud sql instances describe photoalbum-db \ --format "value(connectionName)") digest_photoalbum=$(gcloud container images describe \ us-central1-docker.pkg.dev/${PROJECT_ID}/photoalbum-repo/photoalbum-app:latest --format \ "value(image_summary.digest)") sed -i.bak -e "s/\[PROJECT_ID\]/${PROJECT_ID}/" \ -e "s/\[CONNECTION_NAME\]/${connection_name}/" \ -e "s/\[DIGEST\]/${digest_photoalbum}/" \ config/photoalbum-deployment.yaml digest_thumbnail=$(gcloud container images describe \ us-central1-docker.pkg.dev/${PROJECT_ID}/photoalbum-repo/thumbnail-worker:latest --format \ "value(image_summary.digest)") sed -i.bak -e "s/\[PROJECT_ID\]/${PROJECT_ID}/" \ -e "s/\[CONNECTION_NAME\]/${connection_name}/" \ -e "s/\[DIGEST\]/${digest_thumbnail}/" \ config/thumbnail-deployment.yaml
Erstellen Sie Deployment-Ressourcen, um die Fotoalbumanwendung und den Dienst zum Generieren von Miniaturansichten zu starten:
kubectl create -f config/photoalbum-deployment.yaml kubectl create -f config/thumbnail-deployment.yaml
Erstellen Sie eine Dienstressource, um der Anwendung eine externe IP-Adresse zuzuweisen:
kubectl create -f config/photoalbum-service.yaml
Prüfen Sie die Ergebnisse für die Pods:
kubectl get pods
Bestätigen Sie in der Ausgabe, dass es drei Pods für jeden
photoalbum-app
- undthumbail-worker
-Pod gibt und dass ihrSTATUS
-WertRunning
ist:NAME READY STATUS RESTARTS AGE photoalbum-app-555f7cbdb7-cp8nw 2/2 Running 0 2m photoalbum-app-555f7cbdb7-ftlc6 2/2 Running 0 2m photoalbum-app-555f7cbdb7-xsr4b 2/2 Running 0 2m thumbnail-worker-86bd95cd68-728k5 2/2 Running 0 2m thumbnail-worker-86bd95cd68-hqxqr 2/2 Running 0 2m thumbnail-worker-86bd95cd68-xnxhc 2/2 Running 0 2m
Die
thumbnail-worker
-Pods abonnieren Anfragen zum Generieren von Miniaturansichten vom Abothumbnail-workers
. Weitere Informationen finden Sie im Abschnitt zur Verwendung der Funktioncallback
im Quellcode.Prüfen Sie die Ergebnisse für die Dienste:
kubectl get services
Bestätigen Sie in der Ausgabe, dass in der Spalte
EXTERNAL-IP
eine externe IP-Adresse für den Dienstphotoalbum-service
vorhanden ist. Es kann einige Minuten dauern, bis alle Dienste ausgeführt werden.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.23.240.1 <none> 443/TCP 20m photoalbum-service LoadBalancer 10.23.253.241 146.148.111.115 80:32657/TCP 2m
Notieren Sie sich die externe IP-Adresse, da sie später verwendet wird. In diesem Beispiel hat es den Wert
146.148.111.115
.
Fotoalbumanwendung testen
Wenn Sie in einem Webbrowser auf die bereitgestellte Anwendung zugreifen möchten, rufen Sie die folgende URL auf und geben den zuvor eingerichteten Nutzernamen und das zugehörige Passwort ein:
http://EXTERNAL_IP
Ersetzen Sie
EXTERNAL_IP
durch die IP-Adresse, die Sie im vorherigen Schritt notiert haben.Klicken Sie zum Hochladen einer Bilddatei auf Hochladen.
Der Platzhalter für die Miniaturansicht wird auf dem Bildschirm angezeigt.
Im Hintergrund erstellt der Dienst zum Generieren von Miniaturansichten eine Miniaturansicht des hochgeladenen Bildes. Damit Sie die generierte Miniaturansicht sehen, klicken Sie auf Aktualisieren. Die Cloud Vision API fügt die von ihr erkannten Bildlabels hinzu.
Damit Sie das Originalbild sehen, klicken Sie auf die Miniaturansicht.
Feature zum Erkennen unangemessener Bilder hinzufügen
Die folgende Abbildung zeigt, wie Sie mithilfe von Pub/Sub-Benachrichtigungen für Cloud Storage einen Dienst auslösen können, der unangemessene Inhalte erkennt. Mit diesem Feature wird das Bild unkenntlich gemacht, wenn eine neue Datei mit unangemessenem Inhalt im Cloud Storage-Bucket gespeichert wird.
In der vorherigen Abbildung verwendet der Dienst das Feature SafeSearch-Erkennung der Vision API, um unangemessene Inhalte in einem Bild zu erkennen.
Die Fotoanwendung löst den Miniaturansichtsgenerator und die Bildprüfung asynchron aus. Daher gibt es keine Garantie dafür, dass sie in einer bestimmten Reihenfolge ausgeführt werden. Wenn die Miniaturansicht vor dem Unkenntlichmachen des Bildes erstellt wird, sehen Sie möglicherweise für kurze Zeit eine unangemessene Miniaturansicht. Die Bildprüfung macht allerdings sowohl das unangemessene Bild als auch die unangemessene Miniaturansicht unkenntlich.
Pub/Sub-Thema, -Abo und -Benachrichtigung erstellen
Erstellen Sie in Cloud Shell ein Pub/Sub-Thema mit dem Namen
safeimage-service
:gcloud pubsub topics create safeimage-service
Erstellen Sie ein Pub/Sub-Abo mit dem Namen
safeimage-workers
:gcloud pubsub subscriptions create --topic safeimage-service \ safeimage-workers
Konfigurieren Sie eine Pub/Sub-Benachrichtigung, sodass eine Nachricht an das Thema
safeimage-service
gesendet wird, wenn eine neue Datei in den Cloud Storage-Bucket hochgeladen wird:gsutil notification create -t safeimage-service -f json \ gs://${PROJECT_ID}-photostore
Worker-Image erstellen und bereitstellen
Erstellen Sie in Cloud Shell mit Cloud Build ein Container-Image für das Abo
safeimage-workers
:gcloud builds submit ./application/safeimage \ -t us-central1-docker.pkg.dev/${PROJECT_ID}/photoalbum-repo/safeimage-worker
Aktualisieren Sie die Kubernetes-Deployment-Manifeste für den Dienst "safe-image" mit Ihrer Google Cloud-Projekt-ID, dem Cloud SQL-Verbindungsnamen und den Container-Image-Digests:
digest_safeimage=$(gcloud container images describe \ us-central1-docker.pkg.dev/${PROJECT_ID}/photoalbum-repo/safeimage-worker:latest --format \ "value(image_summary.digest)") sed -i.bak -e "s/\[PROJECT_ID\]/${PROJECT_ID}/" \ -e "s/\[CONNECTION_NAME\]/${connection_name}/" \ -e "s/\[DIGEST\]/${digest_safeimage}/" \ config/safeimage-deployment.yaml
Deployment-Ressource erstellen
Erstellen Sie eine Deployment-Ressource mit dem Namen
safeimage-deployment
, um das Themasafeimage-service
bereitzustellen:kubectl create -f config/safeimage-deployment.yaml
Prüfen Sie die Ergebnisse:
kubectl get pods
Bestätigen Sie in der Ausgabe, dass es drei
safeimage-worker
-Pods gibt, derenSTATUS
-WertRunning
ist.NAME READY STATUS RESTARTS AGE photoalbum-app-555f7cbdb7-cp8nw 2/2 Running 0 30m photoalbum-app-555f7cbdb7-ftlc6 2/2 Running 0 30m photoalbum-app-555f7cbdb7-xsr4b 2/2 Running 8 30m safeimage-worker-7dc8c84f54-6sqzs 1/1 Running 0 2m safeimage-worker-7dc8c84f54-9bskw 1/1 Running 0 2m safeimage-worker-7dc8c84f54-b7gtp 1/1 Running 0 2m thumbnail-worker-86bd95cd68-9wrpv 2/2 Running 0 30m thumbnail-worker-86bd95cd68-kbhsn 2/2 Running 2 30m thumbnail-worker-86bd95cd68-n4rj7 2/2 Running 0 30m
Die
safeimage-worker
-Pods abonnieren Erkennungsanforderungen für unangemessene Bilder vom Abosafeimage-workers
. Weitere Informationen finden Sie im Abschnitt zur Verwendung der Funktioncallback
im Quellcode.
Feature zum Erkennen unangemessener Bilder testen
In diesem Abschnitt laden Sie ein Testbild hoch, um zu prüfen, ob das Feature SafeSearch-Erkennung ein unangemessenes Bild unkenntlich macht. Das Testbild ist ein Bild von einem Mädchen, das als Zombie verkleidet ist (lizenziert unter einer CC0-Lizenz von Pixaby).
- Laden Sie das Testbild herunter.
- Zum Hochladen des Bildes rufen Sie
http://EXTERNAL_IP
auf und klicken dann auf Hochladen. Klicken Sie auf Aktualisieren. Die Anwendung zeigt eine unkenntlich gemachte Miniaturansicht an.
Klicken Sie auf die Miniaturansicht, um festzustellen, ob das hochgeladene Bild ebenfalls unkenntlich gemacht wurde.
Bereinigen
Wenn Sie die Google Cloud-Ressourcen, die Sie für die Beispielanwendung erstellt haben, nicht behalten möchten, können Sie sie entfernen, damit Ihnen diese nicht weiter in Rechnung gestellt werden. Sie können entweder das Projekt komplett löschen oder die Clusterressourcen löschen und anschließend den Cluster entfernen.
Projekt löschen
- Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.
Einzelne Ressourcen löschen
Anstatt das Projekt zu löschen, können Sie die einzelnen von Ihnen erstellten Ressourcen löschen.
Löschen Sie Ressourcen aus GKE:
kubectl delete -f config/safeimage-deployment.yaml kubectl delete -f config/photoalbum-service.yaml kubectl delete -f config/thumbnail-deployment.yaml kubectl delete -f config/photoalbum-deployment.yaml
Löschen Sie den Cluster aus GKE:
gcloud container clusters delete photoalbum-cluster --quiet
Löschen Sie das Repository aus Artifact Registry:
gcloud artifacts repositories delete photoalbum-repo --location us-central1 --quiet
Löschen Sie Abos und Themen aus Pub/Sub:
gcloud pubsub subscriptions delete safeimage-workers gcloud pubsub topics delete safeimage-service gcloud pubsub subscriptions delete thumbnail-workers gcloud pubsub topics delete thumbnail-service
Löschen Sie die Cloud SQL-Instanz:
gcloud sql instances delete photoalbum-db --quiet
Löschen Sie den Cloud Storage-Bucket:
gsutil rm -r gs://${PROJECT_ID}-photostore gsutil rm -r gs://${PROJECT_ID}_cloudbuild
Löschen Sie die Dateien:
cd .. rm -rf gke-photoalbum-example
Nächste Schritte
- Mehr zu DevOps und zur Architekturfunktion, die in Verbindung mit dieser Referenzarchitektur steht
- Über den DevOps Quick Check erfahren, wo Sie im Vergleich zum Rest der Branche stehen
- Weitere Referenzarchitekturen, Diagramme und Best Practices finden Sie im Cloud-Architekturcenter.