1. Introduzione
Ultimo aggiornamento: 2020-02-12
Microservices Battle Arena
Hai mai partecipato a una battaglia a palle di neve in cui ti sposti e lanci scherzosamente palle di neve agli altri? Altrimenti, prova un giorno o l'altro! Ma ora, invece di rischiare di essere schiacciati fisicamente, puoi creare un piccolo servizio accessibile in rete (un microservizio) che prenderà parte a un'epica battaglia contro altri microservizi. E siccome ospiteremo questa prima battaglia di microservizi ad Atlanta, in Georgia, i nostri microservizi lanciano pesche invece di palle di neve.
Forse ti starai chiedendo... Ma come fa un microservizio "lancia" altri microservizi? Un microservizio può ricevere richieste di rete (di solito tramite HTTP) e restituire risposte. C'è un "gestore dell'arena" che invierà al microservizio lo stato attuale dell'arena, dopodiché risponderà con un comando che specifica cosa fare.
Ovviamente l'obiettivo è vincere, ma lungo il percorso imparerai a creare ed eseguire il deployment di microservizi su Google Cloud.
Come funziona
Dovrai creare un microservizio con qualsiasi tecnologia tu voglia (o scegliere tra i comandi iniziali Java, Kotlin o Scala), quindi eseguirne il deployment su Google Cloud. Una volta eseguito il deployment, dovrai compilare un modulo per comunicarci l'URL del microservizio e noi lo aggiungeremo all'arena.
L'arena contiene tutti i giocatori di una data battaglia. Per la conferenza DevNexus ci sarà un'arena per ogni giorno. Ogni giocatore rappresenta un microservizio che si muove e lancia pesche agli altri giocatori.
Circa una volta al secondo, il nostro gestore dell'arena chiamerà il microservizio, inviando l'attuale stato dell'arena (dove si trovano i giocatori) e il microservizio risponderà con un comando indicando cosa fare. Nell'arena puoi avanzare, girare a sinistra o destra oppure lanciare una pesca. Una pesca lanciata si sposterà fino a tre caselle nella direzione in cui è rivolto il giocatore. Se una pesca "colpisce" un altro giocatore, il lanciatore ottiene un punto e il giocatore vittima perde un punto. Le dimensioni dello stadio vengono adattate automaticamente in base al numero corrente di giocatori.
Ecco come si presenta l'arena con tre giocatori fittizi:
Esempio di stadio Battle Peach
Conflitti rotanti
Nell'arena è possibile che più giocatori provino a eseguire azioni in conflitto. Ad esempio, due giocatori potrebbero provare a spostarsi nello stesso spazio. In caso di conflitto, vince il microservizio con il tempo di risposta più rapido.
Guardare la battaglia
Per vedere come sta andando il tuo microservizio durante la battaglia, visita l'arena.
API Battle
Per collaborare con il nostro gestore dell'arena, il microservizio dovrà implementare un'API specifica per partecipare all'arena. Il gestore dell'arena invierà lo stato corrente dell'arena in un POST HTTP all'URL che ci hai fornito, con la seguente struttura JSON:
{
"_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
}
}
}
La risposta HTTP deve essere il codice di stato 200 (OK) con un corpo della risposta contenente la mossa successiva, codificato come un solo carattere maiuscolo di:
F <- move Forward
R <- turn Right
L <- turn Left
T <- Throw
E con questo è tutto! Esaminiamo in dettaglio il deployment di un microservizio su Cloud Run, un servizio Google Cloud per l'esecuzione di microservizi e altre applicazioni.
2. Deployment del microservizio
Puoi creare il tuo microservizio con qualsiasi tecnologia e implementarlo ovunque, purché sia raggiungibile pubblicamente e sia conforme all'API Battle. Per semplificare le cose, puoi iniziare con un progetto di esempio che sceglie semplicemente un comando casuale.
Scegli il tuo Sample con cui iniziare
Puoi iniziare da tre campioni di microservizi di battaglia:
Java e Stivale a molla | ||
Java e Quarkus | ||
Kotlin e Micronaut | ||
Kotlin e Quarkus | ||
Scala e Framework di Google Play | ||
Vai |
Dopo aver deciso con quale esempio iniziare, fai clic sul pulsante "Deploy on Cloud Run" pulsante qui sopra. Verrà avviato Cloud Shell (una console basata sul web in una macchina virtuale nel cloud) in cui l'origine verrà clonata e creata in un pacchetto di cui è possibile eseguire il deployment (un'immagine container Docker), che verrà poi caricato in Google Container Registry e sottoposto a deployment in Cloud Run.
Quando richiesto, specifica la regione us-central1
.
Lo screenshot seguente mostra l'output di Cloud Shell per la build e il deployment dei microservizi
Verifica che il microservizio funzioni
In Cloud Shell puoi inviare una richiesta al microservizio di cui hai appena eseguito il deployment, sostituendo YOUR_SERVICE_URL
con l'URL del tuo servizio (in Cloud Shell dopo la riga "Your application is now live here"):
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
Dovresti vedere la stringa di risposta F, L, R o T.
Richiedi l'inclusione nell'arena
Devi compilare un breve modulo per essere incluso nell'arena. La parte più difficile sarà determinare cosa vuoi utilizzare per l'immagine del profilo. Puoi usare la tua immagine GitHub o LinkedIn oppure sceglieremo un avatar a caso per te. Una volta esaminata la richiesta, il tuo giocatore verrà visualizzato nell'arena.
Crea e Esegui il deployment delle modifiche
Prima di poter apportare modifiche, devi configurare alcune informazioni in Cloud Shell sul progetto Google Cloud e sull'esempio che hai utilizzato. Per prima cosa, elenca i tuoi progetti Google Cloud:
gcloud projects list
Probabilmente hai un solo progetto. Copia il valore PROJECT_ID
dalla prima colonna e incollalo nel comando seguente (sostituendo YOUR_PROJECT_ID
con il tuo ID progetto effettivo) per impostare una variabile di ambiente che utilizzeremo nei comandi successivi:
export PROJECT_ID=YOUR_PROJECT_ID
Ora imposta un'altra variabile di ambiente per l'esempio che hai utilizzato, in modo che nei comandi successivi potremo specificare la directory e il nome del servizio corretti:
# Copy and paste ONLY ONE of these export SAMPLE=java-springboot export SAMPLE=kotlin-micronaut export SAMPLE=scala-play
Ora puoi modificare l'origine del microservizio da Cloud Shell. Per aprire l'editor basato sul web di Cloud Shell, esegui questo comando:
cloudshell edit cloudbowl-microservice-game/samples/$SAMPLE/README.md
Verranno visualizzate ulteriori istruzioni per apportare le modifiche.
Cloud Shell con l'editor con il progetto di esempio aperto
Dopo aver salvato le modifiche, crea il tuo progetto in Cloud Shell utilizzando il comando pack
. Questo comando utilizza Buildpacks per rilevare il tipo di progetto, compilarlo e creare l'artefatto di cui è possibile eseguire il deployment (un'immagine container Docker).
pack build gcr.io/$PROJECT_ID/$SAMPLE \ --path cloudbowl-microservice-game/samples/$SAMPLE \ --builder heroku/buildpacks
Ora che l'immagine container è stata creata, utilizza il comando docker (in Cloud Shell) per eseguire il push dell'immagine container al Container Registry di Google in modo che sia accessibile da Cloud Run:
docker push gcr.io/$PROJECT_ID/$SAMPLE
Ora esegui il deployment della nuova versione su Cloud Run:
gcloud run deploy $SAMPLE\ --project=$PROJECT_ID\ --platform=managed\ --region=us-central1\ --image=gcr.io/$PROJECT_ID/$SAMPLE\ --memory=512Mi\ --allow-unauthenticated
Ora l'arena utilizzerà la tua nuova versione!
3. Complimenti
Complimenti, hai creato ed eseguito correttamente il deployment di un microservizio in grado di funzionare con altri microservizi. In bocca al lupo!
Passaggi successivi
- Aggiungere il tracciamento distribuito all'app Spring Boot
- Utilizza AI Platform per rendere il tuo microservizio super intelligente