Играю в игры, пишу в блог

Технические аспекты игровых миров Pax Dei

Разработчики Pax Dei рассказали об устройстве серверной части игрового мира и ответили на вопросы сообщества.

Если кратко:

  • Будет существовать несколько серверов-шардов для разных регионов (США, Европа) вместимостью 7000 игроков.
  • Каждый шард будет состоять из серверов, обслуживающих отдельную зону, а каждая зона будет иметь несколько инстансов, вмещающих до 150 игроков.
  • Отдельных серверов для ПВЕ и ПВП не будет.
  • Подземелья не будут разделяться на инстансы, чтобы чаще происходили стычки с другими игроками.
  • Плановых еженедельных технических обслуживаний не будет.
  • Переносить персонажей между серверами можно будет, а вот перенос зданий и целых кланов пока еще в разработке.
  • К модам разработчики относятся хорошо, вот только поддержку пока еще не сделали.

Как вы уже знаете, мир Pax Dei состоит из нескольких регионов (Галлия, Анатолия, Готия), разделенных на несколько провинций (Ансьен, Мерри, Керис). Провинция — это очень большая географическая область с несколькими долинами, перемежающимися большими горными хребтами. В отдельных провинциях, называемых хартлендами, есть несколько долин, которые называются домашними, и именно там вы можете построить свой дом. И, конечно же, у вас будут темные подземелья и пещеры, которые в основном находятся под поверхностью этих провинций.

Но как эти географические особенности отображаются на реальных физических серверах и как они влияют на игру?

Миры и шарды

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

По нашим оценкам, в начале игры максимальное количество игроков на одном шарде будет составлять около 7000 человек. Один шард работает полностью в рамках одного физического облачного хостинг-центра. Будут запускаться шарды в различных регионах доступности по всему миру, например, в Северной Америке и Европе.

Таким образом, на выбор шарда будут влиять следующие факторы:

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

Зонные серверы

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

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

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

Экземпляры зон

Как уже говорилось выше, сервер зоны — это выделенный Unreal Server, который занимается моделированием небольшого участка мира. В конечном итоге зонный сервер также может быть перегружен большим количеством игроков. В настоящее время этот предел составляет около 150 игроков, но ожидается, что он изменится с улучшением аппаратного обеспечения и оптимизацией. Чтобы избежать необходимости закрывать зоны при достижении максимального количества игроков, например, в часы пик, вводится понятие экземпляра зоны или попросту инстанса. Механизм такой, что при превышении максимального количества игроков в зоне весь набор игроков распределяется в пределах данной границы зоны между двумя или более отдельными инстансами. Каждый экземпляр зоны фактически является отдельным сервером зоны для одной и той же зоны, но игроки в пределах данного инстанса не могут взаимодействовать с игроками в другом.

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

Бэкэнд

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

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

Вопросы

Объясните, пожалуйста, чем конкретно занимается бэкенд-инженер?

Бэкенд-инженер — это человек, который работает над любыми сервисами, находящимися на сервере, а также над взаимодействием между серверами зон и серверной стороной.

Как правило, бэкенд-инженеры определяют и реализуют API, используемые при взаимодействии между Unreal и бэкенд-сервисами. Они также определяют структуры данных и логику хранения для всех сохраняемых данных в главной базе данных.

Наконец, они также занимаются развертыванием и мониторингом всей базовой инфраструктуры.

Как происходит взаимодействие между backend и frontend?

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

Что является самой большой проблемой при работе над такой MMO, как Pax Dei?

Самая большая сложность заключается в том, насколько сложен технологический стек. Весь технологический стек состоит из различных компонентов, некоторые из которых являются компонентами сторонних производителей (например, Unreal Engine или PostgresDB), а другие полностью разработаны собственными силами.

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

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

Будут ли существовать шарды для разных языков или все игроки смогут играть вместе?

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

Мы также не хотим заставлять вас играть в определенном регионе. Мы имеем в виду, что если вы — европейский игрок и хотите играть с друзьями из США, то вам должно быть позволено это делать (правда, при этом придется смириться с большей задержкой).

Будет ли у нас несколько шардов, предназначенных для PvE, без какого-либо взаимодействия с PvP?

Нет, в настоящее время планируется, что все шарды будут идентичны.

Сколько игроков будет на одном шарде?

Для начала мы планируем, что на одном шарде будет около 7000 игроков (в 3-4 провинциях хартлендов). По мере того как мы будем вводить в строй новые провинции, максимальное количество игроков на одном шарде будет расти соответственно.

Как вы планируете избежать очередей в связи с ожидаемым высоким спросом на старте?

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

Каковы ваши планы по минимизации задержек для игроков?

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

Будет ли проводиться еженедельное техническое обслуживание? Будет ли оно отличаться в зависимости от региона с учетом часовых поясов?

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

Как вы будете управлять населением миров? Планируете ли вы разрешить перенос персонажей?

Да, безусловно. Это необходимо и для качества жизни игроков, и для управления населением.

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

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

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

Если я хочу поиграть с друзьями, как мы можем гарантировать, что мы будем в одном мире? Могу ли я присоединиться к ним, даже если их мир переполнен?

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

Главное здесь — грамотно подойти к выбору показателей, которые мы будем использовать, и к тому, как мы будем направлять людей к определенным мирам.

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

Какова ваша позиция в отношении сторонних программ и модов?

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

Будут ли в какой-то момент сняты ограничения на шарды и серверы зон?

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

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

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

Если я играю в группе, какова вероятность того, что нас разделят на серверы разных зон?

Мы сделаем все возможное, чтобы убедиться, что если вы играете в группе, вы будете находиться в одном инстансе.

Мы уже говорили о том, что провинции хартлендов делятся на домашние долины и дикие земли. Домашняя долина — это место, где вы можете получить участок и построить свой дом. Дикие земли — это территории между домашними долинами. Каждая домашняя долина — это зона.

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

Будут ли подземелья инстансовыми и ограниченными?

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

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

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

А как насчет зданий, находящихся в стадии активного строительства?

Они мгновенно появляются во всех инстансах. На практике увидеть, как дом строится сам, можно будет сравнительно редко, но это может случиться.

А как насчет PvP-зон? Если есть ограничения, то что может помешать крупным кланам легко использовать их для контроля над зоной?

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

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

Сможем ли мы со временем видеть и взаимодействовать с людьми, находящимися за границами зон?

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

Дизайн карты мира учитывает наличие зон, поэтому пересекать их границы вы будете крайне редко. Следует отметить, что 90 % границ зон проходят по таким элементам, как непроходимые горные вершины. Кроме того, зоны в целом достаточно велики: каждая провинция имеет площадь около 75-80 кв. км, и на нее приходится 7 зон. Таким образом, в зависимости от того, чем вы занимаетесь, вы можете играть часами и пересечь границу зоны максимум два раза в процессе исследования.

Дальше