1. Wprowadzenie
Ostatnia aktualizacja: 12.02.2020
Microservices Battle Arena
Czy kiedykolwiek zdarzyło Ci się w walce na śnieżki rzucać śnieżki i rzucać się śnieżkami w inne osoby? Jeśli nie, spróbuj kiedyś! Ale teraz zamiast narażać się na fizyczne obrażenia, możesz zbudować małą usługę dostępną w sieci (mikroserwis), która weźmie udział w niezapomnianej walce z innymi mikroserwisami. A ponieważ rozpoczynamy pierwszą bitwę w mikroserwisach w Atlancie w stanie Georgia, nasze mikroserwisy będą rzucać brzoskwinie zamiast śnieżek.
Być może zastanawiasz się... Ale w jaki sposób mikroserwis „rzuca” brzoskwinia w innych mikroserwisach? Mikroserwis może otrzymywać żądania sieciowe (zwykle przez HTTP) i zwracać odpowiedzi. Jest tu „menedżer areny” który wyśle do mikroserwisu bieżący stan areny, a mikroserwis odpowie poleceniem, które określa, co należy zrobić.
Oczywiście celem jest zwycięstwo, ale przy okazji dowiesz się, jak tworzyć i wdrażać mikroserwisy w Google Cloud.
Jak to działa
Zbudujesz mikroserwis z dowolną technologią (albo wybierz początek w języku Java, Kotlin lub Scala), a następnie wdrożysz go w Google Cloud. Po wdrożeniu trzeba wypełnić formularz i podać nam adres URL mikroserwisu, a następnie dodamy go do domeny.
Hala zawiera wszystkich graczy biorących udział w danej bitwie. Każdego dnia na konferencji DevNexus odbędzie się 1 hala. Każdy gracz reprezentuje mikroserwis, który porusza się wokół i rzuca brzoskwiniami w stronę pozostałych graczy.
Mniej więcej raz na sekundę nasz menedżer areny zadzwoni do Twojego mikroserwisu i prześle bieżący stan stadionu (gdzie znajdują się gracze). Mikroserwis odpowie na polecenie, co ma zrobić. Na arenie możesz iść do przodu, skręć w lewo lub w prawo albo rzucić brzoskwinią. Rzucona brzoskwinia przemieszcza się maksymalnie po 3 miejscach w kierunku, w którym jest zwrócony gracz. Jeśli brzoskwinia „trafi” inny zawodnik, rzucający otrzymuje jeden punkt, a zawodnik uderzony traci punkt. Rozmiar hali jest automatycznie dostosowywany do bieżącej liczby graczy.
Tak wygląda arena z 3 zmyślonymi graczami:
Przykład gry Battle Peach Arena
Konflikty cykliczne
Na arenie może się zdarzyć, że kilku graczy spróbuje wykonać kolidujące działania. Na przykład dwóch graczy może próbować przejść do tego samego miejsca. W przypadku konfliktu wygrywa mikroserwis z najkrótszym czasem odpowiedzi.
Oglądanie bitwy
Aby zobaczyć, jak Twój mikroserwis radzi sobie w walce, odwiedź naszą arenę.
Battle API
Aby współpracować z naszym menedżerem areny, Twój mikroserwis musi wdrożyć odpowiedni interfejs API, aby mieć dostęp do tych funkcji. Menedżer areny wyśle bieżący stan areny w żądaniu HTTP POST na podany przez Ciebie adres URL w następującej strukturze 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
}
}
}
Odpowiedź HTTP musi mieć kod stanu 200 (OK) z treścią odpowiedzi zawierającą następny ruch i zakodowaną jako pojedynczy znak wielkiej litery:
F <- move Forward
R <- turn Right
L <- turn Left
T <- Throw
To już wszystko. Zobaczmy, jak wdrożyć mikroserwis w Cloud Run, usłudze Google Cloud do uruchamiania mikroserwisów i innych aplikacji.
2. Wdrażanie mikroserwisu
Swój mikroserwis możesz zbudować z dowolną technologią i wdrażać w dowolnym miejscu, o ile jest dostępny publicznie i zgodny z interfejsem Battle API. Dla ułatwienia możesz zacząć od przykładowego projektu, który po prostu wybiera losowe polecenie.
Wybierz sampel na początek
Dostępne są 3 przykłady mikroserwisów bitewnych, od których możesz zacząć:
Java i Trzewik wiosenny | ||
Java i Quarkus | ||
Kotlin i Micronaut | ||
Kotlin i Quarkus | ||
Scala Platforma Google Play | ||
Przeczytaj |
Gdy wybierzesz przykład, od którego chcesz zacząć, kliknij „Wdróż w Cloud Run” przycisk powyżej. Spowoduje to uruchomienie Cloud Shell (internetowej konsoli maszyny wirtualnej w chmurze), w której zostanie sklonowane źródło, a następnie wbudowane w możliwy do wdrożenia pakiet (obraz kontenera Dockera), który następnie zostanie przesłany do Google Container Registry i wdrożony w Cloud Run.
Gdy pojawi się prośba, określ region us-central1
.
Zrzut ekranu poniżej przedstawia dane wyjściowe Cloud Shell dotyczące kompilacji i wdrażania mikroserwisów
Sprawdzanie działania mikroserwisu
W Cloud Shell możesz wysłać żądanie do nowo wdrożonego mikroserwisu, zastępując YOUR_SERVICE_URL
adresem URL swojej usługi (znajdujący się w Cloud Shell po wierszu „Twoja aplikacja jest teraz aktywna”):
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
Powinien wyświetlić się ciąg znaków odpowiedzi F, L, R lub T.
Poproś o uwzględnienie na arenie
Aby dołączyć do areny, musisz wypełnić krótki formularz. Najtrudniejsze będzie określenie, czego chcesz użyć jako zdjęcia profilowego. Możesz użyć swojego obrazu z GitHub lub profilu z LinkedIn albo wybierzemy dla Ciebie losowy awatar. Po sprawdzeniu zgłoszenia Twój gracz pojawi się na hali.
Produkcja Wdrażanie zmian
Zanim wprowadzisz zmiany, musisz skonfigurować w Cloud Shell pewne informacje o projekcie GCP i użytym przykładzie. Najpierw wyświetl listę projektów GCP:
gcloud projects list
Prawdopodobnie masz tylko 1 projekt. Skopiuj element PROJECT_ID
z pierwszej kolumny i wklej go do tego polecenia (zastępując YOUR_PROJECT_ID
swoim identyfikatorem projektu), aby ustawić zmienną środowiskową, której użyjemy w późniejszych poleceniach:
export PROJECT_ID=YOUR_PROJECT_ID
Teraz ustaw kolejną zmienną środowiskową dla użytego przykładu, aby w późniejszych poleceniach można było podać prawidłowy katalog i nazwę usługi:
# Copy and paste ONLY ONE of these export SAMPLE=java-springboot export SAMPLE=kotlin-micronaut export SAMPLE=scala-play
Teraz możesz edytować źródło mikroserwisu w Cloud Shell. Aby otworzyć internetowy edytor Cloud Shell, uruchom to polecenie:
cloudshell edit cloudbowl-microservice-game/samples/$SAMPLE/README.md
Wyświetlone zostaną dalsze instrukcje dotyczące wprowadzania zmian.
Cloud Shell z edytorem z otwartym przykładowym projektem
Po zapisaniu zmian skompiluj projekt w Cloud Shell za pomocą polecenia pack
. To polecenie używa pakietów Buildpacks do wykrywania typu projektu, skompilowania go i utworzenia możliwego do wdrożenia artefaktu (obrazu kontenera Dockera).
pack build gcr.io/$PROJECT_ID/$SAMPLE \ --path cloudbowl-microservice-game/samples/$SAMPLE \ --builder heroku/buildpacks
Po utworzeniu obrazu kontenera użyj polecenia Dockera (w Cloud Shell), aby przekazać go do Google Container Registry, aby umożliwić dostęp do niego Cloud Run:
docker push gcr.io/$PROJECT_ID/$SAMPLE
Teraz wdróż nową wersję w Cloud Run:
gcloud run deploy $SAMPLE\ --project=$PROJECT_ID\ --platform=managed\ --region=us-central1\ --image=gcr.io/$PROJECT_ID/$SAMPLE\ --memory=512Mi\ --allow-unauthenticated
Teraz arena będzie używać Twojej nowej wersji!
3. Gratulacje
Gratulujemy! Udało Ci się utworzyć i wdrożyć mikroserwis, który radzi sobie z innymi mikroserwisami. Powodzenia!
Co dalej?
- Dodawanie śledzenia rozproszonego do aplikacji Spring Boot
- Wyjątkowo inteligentny mikroserwis dzięki AI Platform