Студия Mainframe Industries опубликовала статью, в которой рассказала подробно о шардах, серверах и зонах в MMORPG с элементами песочницы Pax Dei. Также разработчики ответили на часто задаваемые вопросы, касающиеся данных тем. Портал MMO13.ru перевел для вас данную статью на русский язык.
Как вы, возможно, знаете, мир Pax Dei состоит из нескольких регионов (Галлия, Анатолия, Готия...), разделенных на разные провинции (Ансьен, Мерри, Керис и т.д.). Провинция — это очень большая географическая область с несколькими долинами и большими горными хребтами. В центральных провинциях существует несколько долин, которые мы называем домашними, и именно там вы можете построить свой дом. Разумеется, также существуют темные подземелья и пещеры, которые в основном существуют под поверхностью.
Но как эти географические особенности отображаются на реальных физических серверах, и как они влияют на вашу игру?
Миры/шарды
Первым выбором, с которым вы столкнетесь при создании нового персонажа в Pax Dei, будет выбор конкретного экземпляра Мира, который также обычно называют шардом. Несмотря на то, что пространство Pax Dei географически огромно, оно может вместить только определенное количество игроков. Именно поэтому мы создаем несколько копий мира, каждая из которых самостоятельная, но полностью независимая от других с точки зрения реального населения. Каждую такую копию мы называем шардом.
По нашим оценкам, в начале игры максимальное количество игроков на одном шарде будет составлять около 7 000 человек. Один шард работает полностью в пределах одного физического хостинг-центра в облаке. Мы будем запускать шарды в различных регионах по всему миру, например, в Северной Америке и Европе.
Факторы, которые станут в основном влиять на ваш выбор шарда, будут следующими:
- Пинг до вашего основного игрового компьютера
- Наличие свободных мест, поскольку некоторые шарды могут быть переполнены
- Шарды, на которых уже играет много ваших друзей
Зональные серверы
С вычислительной точки зрения шард состоит из большой коллекции различных серверов и облачных сервисов, каждый из которых выполняет определенную функцию. Наиболее многочисленными являются зональные серверы. Это связано с тем, что моделирование целого мира — слишком тяжелый с вычислительной точки зрения процесс, чтобы с ним мог справиться один аппаратный экземпляр, и поэтому он делится на более мелкие вычислительные единицы, которые мы называем зонами. Сервер одной зоны — это выделенный Ureal сервер, который занимается моделированием определенной части мира, например, одной домашней долины.
В любой момент времени вы, как игрок, автоматически подключены к зональному серверу. При пересечении границы зоны ваше соединение автоматически переходит к серверу соседней зоны. Это то, что мы называем переходом зоны. В большинстве случаев эти переходы должны быть плавными, за исключением нескольких важных исключений:
- Переходы между различными провинциями или в подземелья, как правило, требуют некоторого времени для загрузки, поскольку клиент загружает совершенно новую карту.
- В настоящее время нельзя увидеть других игроков или NPC через границы зон.
Экземпляры зон
Как упоминалось выше, зональный сервер — это выделенный Unreal сервер, который занимается моделированием небольшого участка мира. В конечном счете, он также может оказаться перегруженным слишком большим количеством игроков.
В настоящее время этот предел составляет около 150 игроков, но ожидается, что он изменится с улучшением аппаратного обеспечения и оптимизацией. Чтобы избежать необходимости закрывать зоны при достижении максимального числа игроков, например, в часы пик, мы вводим концепцию экземпляров зон. Механизм таков, что при превышении максимального количества людей в зоне мы распределяем всех в пределах данной границы зоны между двумя или более отдельными экземплярами зоны. Каждый экземпляр фактически запускает отдельный зональный сервер для одной и той же зоны, но игроки в пределах данного экземпляра не могут взаимодействовать с игроками в другом.
Это разделение относится только к прямому взаимодействию с игроками, но сохранение зданий, помимо всего прочего, работает во всех экземплярах, то есть здания видны всем. Как только уровень населения зоны снижается, инстансы сливаются вместе. Для регулярной работы, когда с момента создания шарда пройдет много времени, объединение инстансов должно происходить только в исключительных случаях, но вначале это может быть обычным явлением.
Бэкэнд хранения данных
Помимо зональных серверов, остальная часть бэкенда отвечает за координацию между ними, транзакционную игровую логику, коммуникацию и хранение данных. В некоторых случаях клиенты могут подключаться напрямую к бэкенду через защищенные API, например, для аутентификации. Однако в большинстве случаев именно зональные серверы общаются с бэкендом для предоставления специфических услуг, таких как инвентаризация, управление ресурсами и т.д.
Вся эта инфраструктура развертывается, координируется и масштабируется с помощью архитектуры Kubernetes, работающей поверх облачной инфраструктуры.
Ответы на вопросы
Не могли бы вы объяснить, чем именно занимается инженер бэкенда?
Инженер бэкенда — это человек, который работает над любой из служб, расположенных в бэкенде, а также над взаимодействием между серверами зоны и бэкендом. Как правило, бэкенд-инженеры определяют и реализуют API, используемые при взаимодействии между Unreal и бэкенд-службами. Они также определяют структуры данных и логику хранения данных. Наконец, они также будут работать над развертыванием и мониторингом всей базовой инфраструктуры.
Как происходит взаимодействие между бэкендом и фронтэндом?
В основном, это взаимодействие будет осуществляться через хорошо документированные API. API определяет все доступные операции для данной службы. Бэкэнд также будет контролировать, чтобы клиент API был правильно аутентифицирован и имел соответствующее разрешение на вызов данной функции. Ответ API обычно возвращает данные или валидацию, которые клиенты используют для отображения игрокам через настраиваемый пользовательский интерфейс.
В чем заключается самая большая сложность при работе над такой ММО, как Pax Dei?
Самая большая трудность заключается в том, насколько сложен технологический стек. Он состоит из различных компонентов, некоторые из которых являются компонентами сторонних производителей (например, Unreal Engine или PostgresDB), а другие полностью разработаны собственными силами. Большинство из них не предназначены специально для использования в ММО.
Функции этих компонентов различаются: они отвечают за моделирование физики, рендеринг графики, поведение искусственного интеллекта, транзакционную целостность и высокую масштабируемость серверных транзакций. Они используют множество языков программирования и должны быть созданы и развернуты в идеальной согласованности, чтобы функционировать все вместе так, как задумано.
Наконец, тестирование ММО без реальных игроков затруднено, поэтому раннее тестирование среди пользователей очень важно.
Будут ли существовать шарды для разных языков, или все игроки смогут играть вместе?
Это то, что мы хотим контролировать. Мы начнем с того, что не будем вводить специальных языковых ограничений, но, вероятно, появятся некоторые шарды с явным языковым уклоном. Мы приложим все усилия, чтобы предоставить игрокам такие метаданные, которые помогут им принять взвешенное решение о том, к какому шарду присоединиться.
Мы также не хотим заставлять вас играть в определенном регионе. То есть, если вы являетесь игроком из Европы и хотите играть с друзьями из США, то у Ввас должна быть такая возможность (при этом вам придется смириться с высоким пингом).
Будет ли у нас несколько шардов, предназначенных для PvE, без какого-либо PvP-взаимодействия?
Нет, в настоящее время планируется, что все шарды будут одинаковыми.
Сколько игроков будет на одном шарде?
Для начала мы планируем, что на каждом шарде будет около 7,000 игроков (в 3-4 провинциях). По мере того, как мы станем вводить все больше провинций, максимальное количество игроков на одном шарде будет соответственно расти.
Учитывая ожидаемый высокий спрос на старте, как вы планируете избежать очередей?
По мере необходимости мы сможем запускать дополнительные шарды, чтобы принимать все больше и больше игроков, но механизм создания экземпляров зон также поможет снизить начальную нагрузку на каждый шард.
Какие у вас планы по минимизации пинга у игроков?
Шарды будут доступны в различных географических регионах, поэтому новые игроки должны иметь возможность найти тот, который находится географически ближе. Кроме того, боевая система и типичные взаимодействия в ММО таковы, что они более терпимы к пингу по сравнению с шутерами от первого лица.
Будет ли у вас еженедельное обслуживание? Станет ли оно отличаться в зависимости от региона, чтобы соблюдались часовые пояса?
Мы спроектировали нашу систему таким образом, что она не должна требовать проведения обслуживаний, за исключением крупных обновлений клиента и сервера. Но на данный момент у нас все же бывают отключения серверов, а иногда и полное удаление миров. Выбранные временные рамки, безусловно, будут выбраны как можно более удобными для игроков.
Как вы будете управлять населенностью миров? Планируете ли разрешить перенос персонажей?
Да, безусловно. Это необходимо для улучшения качества жизни игроков и управления населенностью.
Но давайте разделим этот вопрос на разные случаи: перемещение персонажа из одного мира в другой довольно тривиально, поэтому мы, несомненно, разрешим это (в качестве дополнительной услуги или бесплатно, если целью является перенасыщение населенности данного мира).
Перемещение участка и здания (зданий) в нем — гораздо более сложная задача. Мы не можем просто перенести здания, поскольку в новом мире может не оказаться свободного места, и мы не можем легко переместить их на «аналогичное место», поскольку структура зданий зависит от рельефа местности, на которой они находятся. В идеале, у нас будет система, которая позволит вам сохранять структуру вашего дома в виде чертежа или, по крайней мере, помещать все его компоненты в магический мешок (не спрашивайте, пожалуйста, о сюжетном обосновании).
Наконец, касаемо переноса кланов, то в настоящее время мы рассматриваем такую возможность, но из-за множества причин (приоритеты, рабочая сила, незавершенные функции...) не можем утверждать, что это произойдет в ближайшее время. Более подробную информацию о трансферах и их доступности мы сообщим позже.
Если я хочу поиграть со своими друзьями, как мы можем гарантировать, что мы будем в одном мире? Могу ли я присоединиться к ним, даже если их мир переполнен?
Когда мир становится переполненным, он будет заблокирован для обеспечения качества обслуживания.
Таким образом, наша цель — найти баланс между предотвращением переполненности и обеспечением того, чтобы друзья могли легко играть вместе.
Ключевым моментом здесь является разумное использование индикаторов и того, как мы направим людей к конкретным мирам.
В критических ситуациях мы хотели бы иметь возможность предлагать бесплатный трансфер персонажа в другой мир, поскольку это один из лучших способов уменьшить переполненность. Более подробную информацию мы предоставим позднее.
Какова ваша позиция в отношении программ и аддонов от сторонних разработчиков?
Мы открыты для сторонних программ и аддонов (при условии, что они не связаны с читерством), поскольку мы признаем, что такие аддоны часто могут улучшить пользовательский опыт и предоставить ценные функциональные возможности. Однако в настоящее время мы, к сожалению, не располагаем необходимыми ресурсами для обеспечения их надлежащей поддержки.
Мы искренне надеемся, что в обозримом будущем сможем обеспечить поддержку, которую вы заслуживаете. Будьте уверены, мы будем держать вас в курсе событий и делиться новой информацией по мере ее поступления.
вот загрузки между зонами печаль хотя конечно смотря какой размер этих зон но всеравно печаль