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

1. Введение

Последнее обновление: 12 февраля 2020 г.

Боевая арена микросервисов

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

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

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

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

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

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

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

Вот как выглядит арена с тремя загримированными игроками:

9e4775d13ff18d4d.png

Пример арены Battle Peach

Вращающиеся конфликты

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

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

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

Боевой 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. Развертывание вашего микросервиса

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

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

Существует три образца боевых микросервисов, с которых вы можете начать:

Java и Spring Boot

Источник

Развертывание в облаке

Ява и Кваркус

Источник

Развертывание в облаке

Котлин и Микронавт

Источник

Развертывание в облаке

Котлин и Кваркус

Источник

Развертывание в облаке

Скала и игровая платформа

Источник

Развертывание в облаке

Идти

Источник

Развертывание в облаке

После того, как вы решите, с какого образца начать, нажмите кнопку «Развертывание в облаке» выше. При этом запустится Cloud Shell (веб-консоль для виртуальной машины в облаке), где исходный код будет клонирован, а затем встроен в развертываемый пакет (образ докер-контейнера), который затем будет загружен в реестр контейнеров 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 . Эта команда использует пакеты сборки для определения типа проекта, его компиляции и создания развертываемого артефакта (образа 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. Поздравления

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

Что дальше?

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