Как «облака» помогают при разработке игр

Рассказываем о сценариях применения и подводных камнях.

Как «облака» помогают при разработке игр

Материал подготовлен при поддержке Selectel

Во время разработки игра проходит через огромное количество итераций и изменений: геймдизайнеры проверяют гипотезы и создают прототипы, QA-специалисты тестируют обновления и нововведения, плейтестеры запускают промежуточные версии игры. Чтобы оптимизировать эти процессы и упростить обмен контентом для распределённой команды, игровые компании используют облачные платформы, которые выступают в качестве многофункционального инструмента для решения рабочих задач.

Рассказываем об облачных технологиях, которые сейчас распространены в индустрии: в каких ситуациях их можно использовать, какие есть основные сервисы облачных провайдеров и с какими неочевидными проблемами сталкиваются разработчики в «облаках».

Что такое облачная платформа

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

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

Как «облака» помогают при разработке игр

Облачная платформа состоит из двух ключевых компонентов: облачных серверов и PaaS-сервисов (Platform-as-a-Service, или «платформа как услуга»).

Облачные серверы — это часть физического сервера, разделённого на несколько изолированных виртуальных машин. Эта технология позволяет быстро масштабироваться — создавать новые серверы или менять конфигурацию уже существующих, выделяя большие вычислительные ресурсы. В игровой индустрии это особенно важно: количество активных игроков меняется в течение дня, поэтому нагрузка постоянно скачет. А в моменты пика — например, во время внутриигрового события — нагрузка на серверы значительно возрастает.

PaaS-сервисы — готовые решения, которые реализованы на базе инфраструктуры провайдера. Каждый сервис применяется для решения какой-то определённой задачи.

Как «облака» помогают при разработке игр

Облачные базы данных используются для хранения информации. Например, в многопользовательских играх пользователи постоянно взаимодействуют друг с другом, поэтому они постоянно должны обмениваться информацией, чтобы игровая ситуация для них всегда была идентичной. Вся эта информация хранится и обрабатывается в базе данных, из которой «раздаётся» игрокам. Можно поднять и обслуживать базу данных самостоятельно, а можно использовать готовый сервис.

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

Управляемые кластеры Kubernetes позволяют разворачивать приложения в контейнерах. Контейнер — изолированная среда, более мелкая единица, чем сервер, в которой хранится всё, что нужно для работы приложения. Развернуть контейнер можно за считаные секунды.

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

Например, сервис Managed Kubernetes от Selectel обеспечивает стабильную работу приложения и отказоустойчивость серверов. Всё, что вам нужно, — задать настройки в панели управления. Сервис сам создаст кластер и проследит за его работоспособностью. Реплики хранятся в разных дата-центрах, поэтому сервис будет работать стабильно даже в случае сбоев на одном из серверов.

CDN (Content Delivery Network) — это сеть кеширующих серверов, которая выступает в качестве посредника между конечными пользователями и сервером-источником контента. Допустим, для игры вышло обновление. Сперва его загружают на сервер-источник, затем если пользователь пытается его загрузить, то ближайший CDN-сервер скачивает обновление в свой кеш, а потом отдаёт клиенту загруженный контент. В результате с помощью CDN можно, во-первых, ускорить доставку контента за счёт более близкого расположения данных к конечному пользователю, во-вторых, снизить нагрузку на сервер — источник контента, распределив нагрузку по всей сети CDN.

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

Как «облака» помогают при разработке игр

Важно учитывать, что CDN-серверы ранжируют данные в зависимости от их востребованности. Информация, к которой никто не обращался в течение суток, удаляется, а при новом обращении CDN-серверу опять придётся скачивать её из источника.

То есть CDN-сеть эффективна лишь для игр, которые запускаются регулярно. Если игроков пока мало, закачка через CDN и через оригинальный сервер будет занимать примерно одно и то же время.

Сценарии применения облачной платформы в геймдеве

Облачная платформа используется не только на этапе оперирования, когда игра уже вышла, но и во время активной разработки. Серверы могут понадобиться тестерам, геймдизайнерам, художникам и другим сотрудникам.

При этом размер компании не имеет особого значения — технология актуальна как для крупных игровых студий, так и для инди-разработчиков, которые создают небольшой, но амбициозный многопользовательский проект.

Так, к Selectel обращаются даже создатели модов, которые используют серверы, чтобы пользователи могли без проблем и задержек скачивать игру.

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

Когда геймдизайнеры тестируют прототипы механик, то для плейтестов привлекают людей со стороны — они получают доступ к закрытому серверу и просто играют. А геймдизайнеры анализируют их поведение и ищут проблемы в геймплее.

Также геймдизайнеры могут использовать тестовые билды для внутренних проверок гипотез. Они придумывают механику, реализуют её, собирают прототип на билд-ферме (автоматически собирают версию игры, основываясь на входных параметрах), а затем тестируют механики в закрытой среде. Для геймдизайнеров создание новых тестовых билдов — это привычный процесс, который оптимизирован за счёт сервисов.

Как «облака» помогают при разработке игр

По похожему принципу работает и QA-команда. Когда разработчики меняют код игры и подтверждают изменения, билд-ферма автоматически создаёт новый билд, он отправляется на тестирование. Например, в Playrix за один день собирают более 7 тысяч билдов игры для разных платформ. Если билд работает как надо, после тестирования изменения собираются и выпускаются в виде обновления для игры.

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

Для небольших игровых компаний билд игры для iOS — проблема: собрать его можно только на macOS. Арендовать любое количество серверов с macOS на M1 можно у Selectel — чтобы удалённо собрать игру и выложить в магазин.

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

При наличии UGC-контента в игре должно существовать хранилище, где будут собраны все творения пользователей — кастомные скины, внутриигровые фотографии и так далее.

В Design Masters у нас хранятся скриншоты всех комнат, и мы знаем, что точно сможем покрыть всех игроков.

Максим Андрианов, Technical Director в Playgendary

Профили игроков, история их сохранений и результаты хранятся на сервере. Важно, чтобы при переходе игрока на новое устройство результаты не обнулялись. Обычно серверы разделяют по разным задачам, чтобы упростить управление игровыми данными. Можно отделить гейм-сервер, который обеспечивает основной геймплей игры, от мета-сервера, отвечающего за весь метагейм — кастомизацию персонажей, прокачку и так далее.

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

Ещё один тип задач, которые решают облачные серверы, — внешние докачки, при помощи которых доставляется дополнительный контент. Это могут быть наборы ассетов, синематики, текстуры более высокого разрешения, дополнительные языки озвучки и так далее.

Как «облака» помогают при разработке игр

Технология внешней докачки особенно актуальна для мобильных игр. Разработчики стремятся снизить вес оригинального билда: игроки не любят ждать загрузку. Магазины приложений устанавливают ограничения по объёму игрового билда: на iOS общий размер приложения до сжатия не должен превышать 4 Гб.

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

Подводные камни и советы при использовании облачной платформы

По словам Максима Андрианова из студии Playgendary, особое внимание стоит уделять стоимости потребляемых ресурсов, будь то трафик, запросы к базам данных или CPU.

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

Максим Андрианов, Technical Director в Playgendary
Как «облака» помогают при разработке игр

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

Юрий Труфанов из Playrix считает, что облачные платформы — это хороший инструмент для построения масштабируемых и отказоустойчивых систем, но есть несколько моментов, на которые нужно обратить внимание. Крупные провайдеры предоставляют достаточно надёжный сервис, но и у них случаются сбои. Если вы используете уникальные сервисы определённого облака — вы начинаете полностью зависеть от него.

Также важно документировать все изменения, особенно если используете много сервисов. Так, например, новому работнику будет намного проще разобраться и влиться в процесс.

Рекомендую сразу использовать подход infrastructure-as-code (процесс управления, в котором вся инфраструктура описана кодом, — DTF). Это позволяет лучше документировать и контролировать изменения в инфраструктуре. Для нас хорошим инструментом стал Terraform, так как он поддерживает множество облачных провайдеров и сервисов, позволяет самостоятельно расширять его набор функций.

Юрий Труфанов, Technical Director команды IT Platform в Playrix

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

Александр Тугов из Selectel советует подумать о защите от DDoS ещё при конфигурировании сети, запуске серверов, развёртывании ПО и заранее выбрать сетевой протокол. Может оказаться, что игровой трафик отфильтрован недостаточно качественно и это приведёт к проблемам. В любом случае важно заранее посмотреть требования и настройки серверов в документации движка.

Ещё важно завести себе собственный домен и сделать так, чтобы у изначального билда игры указывался только он. Если же вы укажете служебные домены (например, вашего облачного провайдера), клиент игры будет «стучаться» именно туда. В случае сбоя или поломки вы не сможете быстро «перенестись» на другие серверы — потеряете время и игроков.

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

Выстроить разработку в облаке можно вместе с Selectel — компания предлагает собственную инфраструктуру для геймдев-проектов. Так, разработчики могут воспользоваться выделенными и облачными серверами с GPU, подключить облачное хранилище или даже сеть доставки контента (CDN). Подробнее об этих сервисах мы уже рассказывали в эфире нашего Twitch-канала.

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

Этот блок временно не поддерживается
2929
37 комментариев

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

Обмажутся своими лямбдами/k8s, не установив лимитов, а потом плачутся)

В Selectel нет тарифов с постоплатой, поэтому такие ситуации возникнуть не могут. Средства списываются с баланса аккаунта за использование услуги на предстоящий месяц.Если превысили лимиты, то отрубят серваки или будет оплата постфактум?

9
Ответить

У меня там есть кластер, если премиум клиент то овердрафт можно согласовать с менеджером по цене и времени на погашение, а по дефолту понятное дело блочат

2
Ответить

Зависит от сервиса. Где-то отключится, где-то заблокируется управление, но сервис будет работать некоторое время (grace период).

1
Ответить

Комментарий недоступен

Ответить

Комментарий недоступен

3
Ответить

Очередная реклама

1
Ответить

Хм, кто бы мог подумать, ведь там написано «промо»

5
Ответить