1. Введение
Последнее обновление: 05.05.2020 г.
Боевая арена микросервисов
Вы когда-нибудь играли в снежки, передвигаясь и игриво бросая снежки в других? Если нет, попробуйте когда-нибудь! Но теперь вместо того, чтобы рисковать получить физический удар, вы можете создать небольшой, доступный по сети сервис (микросервис), который примет участие в эпической битве с другими микросервисами. А поскольку мы проводим эту битву микросервисов на Spring I/O, наши микросервисы будут бросаться хамоном вместо снежков.
Вам может быть интересно... Но как микросервис «кидает» хамон в другие микросервисы? Микросервис может получать сетевые запросы (обычно через HTTP) и возвращать ответы. Существует «менеджер арены», который отправит вашему микросервису текущее состояние арены, а затем ваш микросервис ответит командой, указывающей, что делать.
Конечно, цель — победить, но по ходу дела вы узнаете, как создавать и развертывать микросервисы в Google Cloud.
Как это работает
Вы создадите микросервис с использованием любой технологии, которую захотите (или выберете стартовую версию Java, Kotlin или Scala), а затем развернете микросервис в Google Cloud. После развертывания вы заполните форму, чтобы сообщить нам URL-адрес вашего микросервиса, а затем мы добавим его на арену.
На арене находятся все игроки данного боя. У конференции Spring I/O Bridge будет своя арена. Каждый игрок представляет собой микросервис, который перемещается и бросает хамон в других игроков.
Примерно раз в секунду наш менеджер арены будет вызывать ваш микросервис, отправляя текущее состояние арены (где находятся игроки), а ваш микросервис будет отвечать командой, что делать. На арене вы можете двигаться вперед, поворачивать налево или направо или бросать хамон. Брошенный хамон переместится на три клетки в направлении взгляда игрока. Если хамон «попадает» в другого игрока, бросающий получает одно очко, а попадающий игрок теряет очко. Размер арены автоматически подстраивается под текущее количество игроков.
Вот как выглядит арена с тремя загримированными игроками:
Пример арены Battle Jamón
Вращающиеся конфликты
На арене возможно, что несколько игроков попытаются выполнить конфликтующие действия. Например, два игрока могут попытаться переместиться в одно и то же пространство. В случае конфликта побеждает микросервис с самым быстрым временем ответа.
Наблюдая за битвой
Чтобы увидеть, как поживает ваш микросервис в бою, загляните на живую арену !
Боевой API
Чтобы работать с нашим менеджером арены, вашему микросервису потребуется реализовать определенный API для участия на арене. Менеджер арены отправит текущее состояние арены в HTTP POST на предоставленный вами URL-адрес со следующей структурой 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
}
}
}
Ваш HTTP-ответ должен иметь код состояния 200 (ОК) и тело ответа, содержащее ваш следующий шаг, закодированное одним символом верхнего регистра:
F <- move Forward
R <- turn Right
L <- turn Left
T <- Throw
Вот и все! Давайте рассмотрим развертывание микросервиса в Cloud Run — облачном сервисе Google для запуска микросервисов и других приложений.
2. Войдите в Google Cloud.
Чтобы иметь возможность развернуть свой микросервис в Cloud Run, вам необходимо войти в Google Cloud. Мы зачислим кредит на ваш счет, и вам не нужно будет вводить данные кредитной карты. Обычно менее проблематично использовать личную учетную запись (например, gmail.com) вместо учетной записи GSuite, поскольку иногда администраторы GSuite запрещают своим пользователям использовать определенные функции Google Cloud. Кроме того, веб-консоль, которую мы будем использовать, должна отлично работать с Chrome или Firefox, но могут иметь проблемы в Safari.
3. Развертывание вашего микросервиса
Вы можете создать свой микросервис с использованием любой технологии и развернуть его где угодно, если он общедоступен и соответствует Battle API. Но чтобы упростить задачу, мы поможем вам начать с примера сервиса и развернуть его в Cloud Run.
Выберите образец для начала
Есть два примера боевых микросервисов, с которых вы можете начать:
Java и Spring Boot | ||
Котлин и Spring Boot |
После того, как вы решите, с какого образца начать, нажмите кнопку «Развертывание в облаке» выше. При этом запустится Cloud Shell (веб-консоль для виртуальной машины в облаке), где исходный код будет клонирован, а затем встроен в развертываемый пакет (образ докер-контейнера), который затем будет загружен в реестр контейнеров Google , и затем развернуто в Cloud Run .
При появлении запроса укажите регион us-central1
.
На снимке экрана ниже показаны выходные данные Cloud Shell для сборки и развертывания микросервиса.
Убедитесь, что микросервис работает
В Cloud Shell вы можете отправить запрос к недавно развернутому микросервису, заменив YOUR_SERVICE_URL
URL-адресом вашего сервиса (который в Cloud Shell находится после строки «Ваше приложение теперь доступно здесь»):
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
Вы должны увидеть строку ответа F, L, R или T.
4. Запросить участие на арене.
Чтобы попасть на арену, вам необходимо отправить сообщение на канал #battle-jamon с указанием вашего имени, URL-адреса сервиса Cloud Run и, при необходимости, вашего имени пользователя GitHub для его аватара/фото профиля. Как только мы проверим информацию, ваш игрок появится на арене .
5. Внесение и развертывание изменений
Прежде чем вы сможете вносить изменения, вам необходимо настроить в Cloud Shell некоторую информацию о проекте GCP и используемом образце. Сначала перечислите свои проекты GCP:
gcloud projects list
Скорее всего, у вас есть только один проект. Скопируйте PROJECT_ID
из первого столбца и вставьте его в следующую команду (заменив YOUR_PROJECT_ID
фактическим идентификатором проекта), чтобы установить переменную среды, которую мы будем использовать в последующих командах:
export PROJECT_ID=YOUR_PROJECT_ID
Теперь установите еще одну переменную среды для примера, который вы использовали, чтобы в последующих командах мы могли указать правильный каталог и имя службы:
# Copy and paste ONLY ONE of these export SAMPLE=java-springboot export SAMPLE=kotlin-springboot
Теперь вы можете редактировать исходный код своего микросервиса из Cloud Shell. Чтобы открыть веб-редактор Cloud Shell, выполните следующую команду:
cloudshell edit cloudbowl-microservice-game/samples/$SAMPLE/README.md
После этого вы увидите дальнейшие инструкции по внесению изменений.
Cloud Shell с редактором и открытым примером проекта
После сохранения изменений запустите приложение в Cloud Shell:
cd cloudbowl-microservice-game/samples/$SAMPLE ./mvnw spring-boot:run
После запуска приложения откройте новую вкладку Cloud Shell и протестируйте службу с помощью Curl:
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" \ http://localhost:8080
Когда вы будете готовы развернуть изменения, создайте проект в Cloud Shell с помощью команды pack
. Эта команда использует пакеты сборки для определения типа проекта, его компиляции и создания развертываемого артефакта (образа Docker-контейнера).
pack build gcr.io/$PROJECT_ID/$SAMPLE \ --path ~/cloudbowl-microservice-game/samples/$SAMPLE \ --builder gcr.io/buildpacks/builder
Теперь, когда ваш образ контейнера создан, используйте команду docker (в Cloud Shell), чтобы отправить образ контейнера в реестр контейнеров Google, чтобы затем Cloud Run мог получить к нему доступ:
docker push gcr.io/$PROJECT_ID/$SAMPLE
Теперь разверните новую версию в Cloud Run:
gcloud run deploy $SAMPLE\ --project=$PROJECT_ID\ --platform=managed\ --region=us-central1\ --image=gcr.io/$PROJECT_ID/$SAMPLE\ --memory=512Mi\ --allow-unauthenticated
Теперь арена будет использовать вашу новую версию!
6. Поздравления
Поздравляем, вы успешно создали и развернули микросервис, способный конкурировать с другими микросервисами! Удачи!
Продолжить обучение
Справочная документация
7. Часто задаваемые вопросы
Почему мой микросервис не отображается на арене?
Как проходит финальная битва?
Как работает арена перед финальной битвой?
Как мне выиграть?
Могу ли я разрабатывать локально?