Mountain Pier
Горный причал

Игровой сервис на базе Twitch.tv

Mountain Pier (Горный причал) — веб-сервис, разрабатываемый мной в рамках курсовой работы по «Распределённым системам обработки информации».

Описание

Данный сервис разрабатывался, как игровая платформа, подобная уже существующим на тот момент, таким как playstation network, xbox live, battle.net, steam, origin и другие. Игры разработчиков размещаются на сервисе, исполняются на виртуальных машинах и отображаются для пользователей на сайте twitch.tv, где игроки применяя чат данного сервиса передают играм команды по управлению. Пользователи регистрируются на сервисе, выбирают игру, после чего выбирают канал, на котором будут играть.

Анализ и построение концепции

Рынок непрерывно игровых приложений постоянно растет. В течении последних 5 лет особую востребованность получают приложения, рассчитанные на работу на устройствах низкой производительности. Благодаря этому продолжает расти целевая аудитория, которая предпочитает проводить свободное время в казуальных приложениях, которые не требуют особых навыков, больших временных затрат и предоставляют короткие сессии с получаемым результатом.

Согласно исследованию компании SuperData за 2017 год, более половины аудитории игроков сконцентрированы на мобильных платформах, а ведущей моделью монетизации является модель free-to-play. [2] Представленная в исследовании аудитория всегда находится в нецелевом поиске новых продуктов, но не заинтересована в смене платформы и формата своего времяпрепровождения.   Таким образом возможна конвертация аудитории из одной ниши в другую, а также привлечение других игроков из прочих жанров и платформ.

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

Сайт twitch.tv —  видеостриминговый сервис, специализирующийся на тематике компьютерных игр, в том числе трансляциях геймплея и киберспортивных турниров. Видео на платформе Twitch можно просматривать как в реальном времени, так и по запросу. [3] Twitch принадлежит Twitch Interactive — дочерней компании Amazon. Сервис был создан в 2011 году отделением от схожего сервиса justin.tv, имеющего более широкую тематику, с целью разграничить трафик и освободить основные серверы. Помимо компьютерных игр, Twitch проводит трансляции и видео другой тематики, например, музыкальных выступлений или турниров по покеру. Согласно отчёту компании за 2018 год число дневных активных пользователей платформы составляет более 15 миллионов человек. [4]

Данное техническое задание определяет требования к разработке веб-портала для предоставления разработчиками мидкор игр своих услуг клиентам низкого целевого сегмента посредством сервиса сайта Twitch.

Существующие аналоги

Прямого аналога предлагаемого сервиса на текущий момент не существует. Однако можно отметить несколько схожих проектов их близких предметных областей:

  • Twitch Plays Pokemon — «социальный эксперимент» и канал по прямой видео трансляции игры через стриминговый сервис сайта Twitch, состоящий из привлечения множества людей в попытке играть в Game Freak and Nintendo Pokémon видеоигры путём обработки команд, отправляемых пользователями через комнату чата канала. [5] Он держит мировой рекорд Гиннеса по “большинству участников в однопользовательской онлайн видеоигре” с 1 165 140 участниками.
  • После успеха Twitch Plays Pokemon, Choice Chamber представляет собой PC и Mac-игру, предназначенную для воспроизведения в прямом эфире на Twitch. [6] Описанная как «игра в режиме реального времени, процедурно созданная», она позволяет зрителям трансляции использовать функции чата Twitch, чтобы помочь или помешать прогрессу основного пользователя игры, проголосовав на опросах, изменяющих игру.
  • Позвоните Кузе — интерактивная ТВ-программа, которую показывали по выходным на канале РТР, где-то между «Сам себе режиссер» и «Сто к одному». [7] Дети звонили в студию, болтали с ведущими (два человека и нарисованный тролль по имени Кузя, которого озвучивал Дмитрий Полонский – голос кролика Квики из рекламы, доктора Кляйнера из Half-Life 2 и еще нескольких десятков персонажей) и выбирали для прохождения один из предложенных уровней. Для управления Кузей телефон переводился в тональный режим, и начиналась игра.
  • Remote Play — является функцией на PlayStation 3, PlayStation 4, PlayStation Portable и PlayStation Vita , который позволяет пользователю PSP или PS Vita соединять устройство с PlayStation 3. Пользователи могут получить доступ к музыке, видео, фото, PlayStation игры, PlayStation Store и различные приложения, хранящиеся на жестком диске PlayStation 3 или на внешнем флеш-накопителе, который соединён с PlayStation 3. [8]
  • Playkey.net — российский веб-сервис, предоставляющий возможность удалённого воспроизведения мультимедийного игрового контента на удаленных вычислительных серверах и дальнейшем использовании на локальном клиентском Windows или OSX приложении посредством получения видеопотока и передачи ввода с локальной машины. [9]
    Вышеперечисленные аналоги раскрывают лишь определённую часть требуемого к реализации функционала “Мультимедийного развлекательного сервиса”. Предложенные случаи определяют требования к использованию в проекте лишь частично, а также предполагают необходимость дальнейшего анализа и использования разработчиком в процессе реализации.

Описание системы

Проект представляет собой портал для доступа клиентов к игровому контенту разработчиков видеоигр на сервисе сайта Twitch. Каждый пользователь регистрируется на портале как потребитель предоставляемых услуг, предоставляя информацию о себе: имя, фамилия, фотография, дата рождения и прочее. После проведения на сервисе достаточного промежутка времени пользователю предоставляется возможность зарегистрировать аккаунт разработчика, с помощью которого будет предоставлена возможность публиковать медиа контент. Размещенные приложения сортируются на основании таких параметров, как популярность за последние 7 дней, максимальное число активных пользователей за день и жанрам, предоставляя клиентам различные виды продуктов на основании их потребностей.

Программирование и развёртывание

Прототип модели данных сервиса

Система состоит из 5-и отдельных микросервисов (java), каждый из которых отвечает за свою отдельную функциональность, а также из микросервиса агрегации запросов (typescript), фронтэнд микросервиса (react.js) и микросервиса чат бота (python3). Также для демонстрации функциональности работы всей системы была создана демо игра. Со всеми проектами можно ознакомиться на github.

Топология системы

Был зарегистрирован 5и долларовый дроплет на Digital Ocean и на нём была настроена контейнеризация. Из-за с блокировок telegram с 21 апреля IP адрес был внесён в реестр. Официальное обращение по электронной почте в РКН не дало результатов. По этой причине через месяц после блокировки все микросервисы были перенесены на российский VPS. С этого виртуального сервиса есть доступ к IP адресу DO, на котором продолжают размещаться БД.

Continuos Integration с помощью Jenkins

В качестве CI используется Jenkins, подключённый к github с помощью webhook. Все сервисы запущены на одной машине в одном окружении на различных портах. Nginx настроен только в качестве перенаправления запросов с доменных имен на локальные порты.

Настройка DNS в Digital Ocean

Для запуска приложений на NodeJS и Python используется pm2.

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

Демо приложение «hoax» на Unity3d

Для работы сторонних разработчиков с сервисом был реализован внешний API, доступный через авторизацию OAuth2. Любой разработчик может зарегистрировать своё приложение (игру) и получить из неё доступ ко всем предоставляемым сервисам.

Заключение

Проект находится в подвешенном состоянии. Чувствуется наличие ниши под подобные проект, но многие вопросы относительно запуска клиентских приложений и их управления пока остаются нерешенными.
Также на питоне для лабораторных работ по теории принятия решений в дополнение к курсовой начинал реализовавать matchmaking сервис в виде модифицированной системы рейтинга Эло, но без реальных данных пользователей и активности моделировать его работу крайне сложно. Сейчас никакого матчмейкинга не реализовано, пользователь сам решает, где и с кем играть.

Ссылки на исходный код проекта

Название микросервиса

Ссылка

Авторизация https://github.com/matthewpoletin/mountainpier-auth
Социальный https://github.com/matthewpoletin/mountainpier-social
Торговля https://github.com/matthewpoletin/mountainpier-market
Платформа https://github.com/matthewpoletin/mountainpier-platform
Статистика https://github.com/matthewpoletin/mountainpier-chart
Аггрегация https://github.com/matthewpoletin/mountainpier-api
Фронтэнд https://github.com/matthewpoletin/mountainpier-web
Чат бот https://github.com/matthewpoletin/mountainpier-bot

Материалы по теме