Battle Peach — поле битвы микросервисов

1. Введение

Последнее обновление: 12.02.2020

Арена битвы микросервисов

Вы когда-нибудь участвовали в снежной битве, где вы двигаетесь и в шутку бросаете снежки в других? Если нет, попробуйте когда-нибудь! Но теперь, вместо того чтобы рисковать получить физический удар, вы можете создать небольшой сетевой сервис (микросервис), который примет участие в эпической битве против других микросервисов. И поскольку мы проводим эту первую битву микросервисов в Атланте, штат Джорджия, наши микросервисы будут бросать персики вместо снежков.

Возможно, вы задаетесь вопросом... Но как микросервис «бросает» персик другим микросервисам? Микросервис может получать сетевые запросы (обычно по HTTP) и возвращать ответы. Существует «менеджер арены», который отправляет вашему микросервису текущее состояние арены, а затем ваш микросервис отвечает командой, указывающей, что нужно сделать.

Конечно, цель — победа, но попутно вы узнаете о создании и развертывании микросервисов в Google Cloud.

Как это работает

Вы создадите микросервис, используя любую технологию на ваш выбор (или выберете один из стартовых языков — Java, Kotlin или Scala), а затем развернете микросервис в Google Cloud. После развертывания вам нужно будет заполнить форму, указав URL-адрес вашего микросервиса, после чего мы добавим его в Arena.

Арена содержит всех игроков, участвующих в данном сражении. На конференции DevNexus будет отдельная арена на каждый день. Каждый игрок представляет собой микросервис, который перемещается и бросает персики в других игроков.

Примерно раз в секунду наш менеджер арены будет вызывать ваш микросервис, отправляя текущее состояние арены (где находятся игроки), и ваш микросервис ответит командой, что нужно сделать. На арене вы можете двигаться вперед, поворачивать налево или направо, или бросить персик. Брошенный персик пролетит до трех клеток в направлении, в котором смотрит игрок. Если персик «попадет» в другого игрока, бросающий получает одно очко, а попавший теряет одно очко. Размер арены автоматически регулируется в зависимости от текущего количества игроков.

Here is how the arena looks with three made-up players:

9e4775d13ff18d4d.png

Пример арены «Боевой персик»

Затяжные конфликты

На арене возможно, что несколько игроков попытаются выполнить противоречащие друг другу действия. Например, два игрока могут попытаться переместиться в одно и то же пространство. В случае конфликта побеждает микросервис с самым быстрым временем отклика.

Наблюдение за битвой

Чтобы увидеть, как ваш микросервис показывает себя в этой борьбе, загляните на интерактивную арену !

Battle 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 (OK), а тело ответа должно содержать ваш следующий ход, закодированный в виде одного заглавного символа одного из следующих вариантов:

F <- move Forward
R <- turn Right
L <- turn Left
T <- Throw

Вот и все! Давайте рассмотрим развертывание микросервиса в Cloud Run , сервисе Google Cloud для запуска микросервисов и других приложений.

2. Развертывание микросервиса

Вы можете создать свой микросервис, используя любую технологию, и развернуть его где угодно, если он доступен публично и соответствует API Battle. Для упрощения можно начать с тестового проекта, который просто выбирает случайную команду.

Выберите образец для начала.

Есть три примера микросервисов для боевой системы, с которых вы можете начать:

Java и Spring Boot

Источник

Развертывание в Cloud Run

Java & Quarkus

Источник

Развертывание в Cloud Run

Kotlin и Micronaut

Источник

Развертывание в Cloud Run

Kotlin & Quarkus

Источник

Развертывание в Cloud Run

Scala и Play Framework

Источник

Развертывание в Cloud Run

Идти

Источник

Развертывание в Cloud Run

После того, как вы определитесь с примером для начала, нажмите кнопку «Развернуть в Cloud Run» выше. Это запустит Cloud Shell (веб-консоль для виртуальной машины в облаке), где исходный код будет клонирован, затем собран в развертываемый пакет (образ контейнера Docker), который затем будет загружен в реестр контейнеров Google и развернут в Cloud Run .

При запросе укажите регион us-central1 .

На скриншоте ниже показан вывод Cloud Shell при сборке и развертывании микросервиса.

d88e40430706a32b.png

Проверьте работоспособность микросервиса.

В 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.

Запрос на включение в Арену

Для участия в турнире необходимо заполнить короткую форму . Самая сложная часть — выбор изображения для профиля. Вы можете использовать изображение с GitHub, LinkedIn или же мы выберем для вас случайный аватар. После рассмотрения вашей заявки ваш игрок появится на турнире .

Внесение и развертывание изменений

Прежде чем вносить изменения, необходимо настроить в 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-micronaut
export SAMPLE=scala-play

Теперь вы можете редактировать исходный код своего микросервиса прямо из Cloud Shell. Чтобы открыть веб-редактор Cloud Shell, выполните следующую команду:

cloudshell edit cloudbowl-microservice-game/samples/$SAMPLE/README.md

Затем вы увидите дальнейшие инструкции по внесению изменений.

f910c9ef7b51c406.png

Cloud Shell с редактором и открытым примером проекта.

После сохранения изменений выполните сборку проекта в Cloud Shell с помощью команды pack . Эта команда использует Buildpacks для определения типа проекта, его компиляции и создания развертываемого артефакта (образа контейнера Docker).

pack build gcr.io/$PROJECT_ID/$SAMPLE \
  --path cloudbowl-microservice-game/samples/$SAMPLE \
  --builder heroku/buildpacks

Теперь, когда образ контейнера создан, используйте команду 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

Теперь арена будет использовать вашу новую версию!

3. Поздравляем!

Поздравляем, вы успешно создали и развернули микросервис, способный конкурировать с другими микросервисами! Удачи!

Что дальше?

Справочная документация