1. Einführung
Zuletzt aktualisiert: 12.02.2020
Microservices Battle Arena
Hast du schon mal eine Schneeballschlacht erlebt, bei der du dich bewegt und spielerisch Schneebälle auf andere geworfen hast? Wenn nicht, probieren Sie es doch einmal aus. Anstatt jedoch Gefahr zu laufen, körperlich angegriffen zu werden, können Sie einen kleinen, über das Netzwerk zugänglichen Dienst (einen Mikrodienst) erstellen, der an einem epischen Kampf gegen andere Mikrodienste teilnimmt. Da wir diesen ersten Mikrodienst-Wettbewerb in Atlanta, Georgia, veranstalten, werfen unsere Mikrodienste Pfirsiche statt Schneebälle.
Sie fragen sich vielleicht: Wie „wirft“ ein Mikrodienst aber einen Pfirsich auf andere Mikrodienste? Ein Mikrodienst kann Netzwerkanfragen (in der Regel über HTTP) empfangen und Antworten zurückgeben. Es gibt einen „Arena-Manager“, der Ihrem Mikrodienst den aktuellen Zustand der Arena sendet. Ihr Mikrodienst antwortet dann mit einem Befehl, der angibt, was zu tun ist.
Natürlich ist das Ziel, zu gewinnen, aber auf dem Weg dorthin lernen Sie, wie Sie Mikrodienste in Google Cloud erstellen und bereitstellen.
Funktionsweise
Sie erstellen einen Mikrodienst mit einer beliebigen Technologie (oder wählen einen Starter für Java, Kotlin oder Scala) und stellen den Mikrodienst dann in Google Cloud bereit. Nach der Bereitstellung füllen Sie ein Formular aus, um uns die URL für Ihren Microservice mitzuteilen. Wir fügen ihn dann der Arena hinzu.
Die Arena enthält alle Spieler für einen bestimmten Kampf. Für die DevNexus-Konferenz gibt es für jeden Tag eine Arena. Jeder Spieler stellt einen Mikrodienst dar, der sich bewegt und Pfirsiche auf die anderen Spieler wirft.
Etwa einmal pro Sekunde ruft unser Arenamanager Ihren Mikrodienst auf und sendet den aktuellen Arenazustand (wo sich die Spieler befinden). Ihr Mikrodienst antwortet mit einem Befehl, was zu tun ist. In der Arena können Sie sich vorwärts bewegen, nach links oder rechts drehen oder einen Pfirsich werfen. Ein geworfener Pfirsich fliegt bis zu drei Felder in die Richtung, in die der Spieler blickt. Wenn eine Pfirsich einen anderen Spieler „trifft“, erhält der Werfer einen Punkt und der getroffene Spieler verliert einen Punkt. Die Größe der Arena wird automatisch an die aktuelle Anzahl der Spieler angepasst.
So sieht die Arena mit drei fiktiven Spielern aus:

Beispiel für eine Battle Peach-Arena
Wiederkehrende Konflikte
In der Arena kann es vorkommen, dass mehrere Spieler versuchen, widersprüchliche Aktionen auszuführen. Beispielsweise könnten zwei Spieler versuchen, sich auf dasselbe Feld zu bewegen. Im Falle eines Konflikts gewinnt der Microservice mit der schnellsten Reaktionszeit.
Battle ansehen
Hier geht es zur Live-Arena, in der Sie sehen können, wie sich Ihr Mikrodienst im Wettbewerb schlägt.
Battle API
Damit Ihr Mikrodienst mit unserem Arenamanager zusammenarbeiten kann, muss er eine bestimmte API implementieren, um an der Arena teilzunehmen. Der Arenamanager sendet den aktuellen Arenazustand in einem HTTP-POST an die von Ihnen angegebene URL mit der folgenden JSON-Struktur:
{
"_links": {
"self": {
"href": "https://YOUR_SERVICE_URL"
}
},
"arena": {
"dims": [4,3], // width, height
"state": {
"https://A_PLAYERS_URL": {
"x": 0, // zero-based x position, where 0 = left
"y": 0, // zero-based y position, where 0 = top
"direction": "N", // N = North, W = West, S = South, E = East
"wasHit": false,
"score": 0
}
... // also you and the other players
}
}
}
Ihre HTTP-Antwort muss den Statuscode 200 (OK) haben und einen Antworttext enthalten, der Ihren nächsten Zug als einzelnen Großbuchstaben codiert:
F <- move Forward
R <- turn Right
L <- turn Left
T <- Throw
Das ist keine Kunst! Wir sehen uns jetzt an, wie Sie einen Mikrodienst in Cloud Run bereitstellen, einem Google Cloud-Dienst zum Ausführen von Mikrodiensten und anderen Anwendungen.
2. Mikrodienst bereitstellen
Sie können Ihren Mikrodienst mit jeder beliebigen Technologie erstellen und überall bereitstellen, solange er öffentlich erreichbar ist und der Battle API entspricht. Für den Anfang können Sie ein Beispielprojekt verwenden, das einfach einen zufälligen Befehl auswählt.
Wählen Sie eine Probe aus, mit der Sie beginnen möchten
Es gibt drei Beispiele für den Mikrodienst „battle“, die Sie als Ausgangspunkt verwenden können:
Java und Spring Boot | ||
Java & Quarkus | ||
Kotlin und Micronaut | ||
Kotlin und Quarkus | ||
Scala und Play Framework | ||
Ok |
Nachdem Sie sich für ein Beispiel entschieden haben, klicken Sie oben auf die Schaltfläche „In Cloud Run bereitstellen“. Dadurch wird Cloud Shell gestartet, eine webbasierte Konsole für eine virtuelle Maschine in der Cloud. Dort wird die Quelle geklont und dann in ein bereitstellbares Paket (ein Docker-Container-Image) umgewandelt, das in Google Container Registry hochgeladen und dann in Cloud Run bereitgestellt wird.
Geben Sie auf Aufforderung die Region us-central1 an.
Der Screenshot unten zeigt die Cloud Shell-Ausgabe für das Erstellen und Bereitstellen von Mikrodiensten.

Funktionsweise des Mikrodienstes prüfen
In Cloud Shell können Sie eine Anfrage an Ihren neu bereitgestellten Microservice senden. Ersetzen Sie dazu YOUR_SERVICE_URL durch die URL für Ihren Dienst (die in Cloud Shell nach der Zeile „Your application is now live here“ angezeigt wird):
curl -d '{
"_links": {
"self": {
"href": "https://foo.com"
}
},
"arena": {
"dims": [4,3],
"state": {
"https://foo.com": {
"x": 0,
"y": 0,
"direction": "N",
"wasHit": false,
"score": 0
}
}
}
}' -H "Content-Type: application/json" -X POST -w "\n" \
https://YOUR_SERVICE_URL
Sie sollten den Antwortstring F, L, R oder T sehen.
Aufnahme in die Arena beantragen
Sie müssen ein kurzes Formular ausfüllen, um in die Arena aufgenommen zu werden. Die größte Herausforderung wird sein, zu entscheiden, was Sie als Profilbild verwenden möchten. Sie können entweder Ihr GitHub- oder LinkedIn-Bild verwenden oder wir wählen einen zufälligen Avatar für Sie aus. Nachdem wir den Beitrag geprüft haben, wird dein Player in der Arena angezeigt.
Änderungen vornehmen und bereitstellen
Bevor Sie Änderungen vornehmen können, müssen Sie in Cloud Shell einige Informationen zum GCP-Projekt und zum verwendeten Beispiel einrichten. Listen Sie zuerst Ihre GCP-Projekte auf:
gcloud projects list
Sie haben wahrscheinlich nur ein Projekt. Kopieren Sie die PROJECT_ID aus der ersten Spalte und fügen Sie sie in den folgenden Befehl ein. Ersetzen Sie dabei YOUR_PROJECT_ID durch Ihre tatsächliche Projekt-ID, um eine Umgebungsvariable festzulegen, die wir in späteren Befehlen verwenden werden:
export PROJECT_ID=YOUR_PROJECT_ID
Legen Sie nun eine weitere Umgebungsvariable für das verwendete Beispiel fest, damit wir in späteren Befehlen das richtige Verzeichnis und den richtigen Dienstnamen angeben können:
# Copy and paste ONLY ONE of these export SAMPLE=java-springboot export SAMPLE=kotlin-micronaut export SAMPLE=scala-play
Jetzt können Sie den Quellcode für Ihren Mikrodienst in Cloud Shell bearbeiten. Führen Sie den folgenden Befehl aus, um den webbasierten Cloud Shell-Editor zu öffnen:
cloudshell edit cloudbowl-microservice-game/samples/$SAMPLE/README.md
Sie sehen dann weitere Anleitungen zum Vornehmen von Änderungen.

Cloud Shell mit dem Editor und dem geöffneten Beispielprojekt
Nachdem Sie die Änderungen gespeichert haben, erstellen Sie das Projekt in Cloud Shell mit dem Befehl pack. Mit diesem Befehl werden Buildpacks verwendet, um den Projekttyp zu erkennen, das Projekt zu kompilieren und das bereitstellbare Artefakt (ein Docker-Container-Image) zu erstellen.
pack build gcr.io/$PROJECT_ID/$SAMPLE \ --path cloudbowl-microservice-game/samples/$SAMPLE \ --builder heroku/buildpacks
Nachdem Ihr Container-Image erstellt wurde, können Sie es mit dem Docker-Befehl (in Cloud Shell) in die Google Container Registry übertragen, damit Cloud Run darauf zugreifen kann:
docker push gcr.io/$PROJECT_ID/$SAMPLE
Stellen Sie die neue Version jetzt in Cloud Run bereit:
gcloud run deploy $SAMPLE\
--project=$PROJECT_ID\
--platform=managed\
--region=us-central1\
--image=gcr.io/$PROJECT_ID/$SAMPLE\
--memory=512Mi\
--allow-unauthenticated
Jetzt wird in der Arena Ihre neue Version verwendet.
3. Glückwunsch
Herzlichen Glückwunsch! Sie haben erfolgreich einen Mikrodienst erstellt und bereitgestellt, der sich mit anderen Mikrodiensten messen kann. Viel Erfolg!
Nächste Schritte
- Verteiltes Tracing für Ihre Spring Boot-App hinzufügen
- AI Platform verwenden, um Ihren Mikrodienst noch intelligenter zu machen