Тысячи игроков в одном чанке: новая ветка развития Minecraft

Как «синхронизировать» множество серверов в единый бесшовный мир и как изменится игровое сообщество с выходом нового серверного ядра — MultiPaper.

Как тебе такое, Маркус Перссон? Отрывок со стрима Ish.

Одной из самых главных проблем большинства игровых серверов является однопоточность или сильная зависимость от главного потока, где важна частота процессора (а точнее IOPS), что сильно ограничивает масштабность игры в мультиплеере. Разработчики Minecraft пытаются решить данную проблему ещё с версии 1.14, но всё упирается в сложности разработки и «неповоротливость» компании. С каждой новой версией производительность серверов наоборот ухудшалась. Многие всё ещё остаются на 1.12 ради возможности вместить больше 200 игроков.

В 2020 году студия Mojang экспериментировала с Aether Engine компании Hadean, чьи технологии используются в EVE Online Aether Wars. Они смогли поднять сервер на 1024 игрока.

Внедрение Aether Engine в Minecraft открывает для наших игроков множество новых захватывающих впечатлений, событий и режимов игры. Aether Engine отлично справляется с увеличением количества соединений и вычислительной сложности, что позволит нам создавать более масштабные и захватывающие события, чем когда-либо прежде. Увеличение возможностей игроков и производственных возможностей также открывает новые возможности для получения прибыли, не перестраивая радикально существующую инфраструктуру Minecraft.

Майкл Вайлбахер, CTO Mojang Studios

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

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

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


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

Также можно отметить попытки реализовать полностью самописные движки для сервера. С 2019 года в медленном темпе разрабатывается Feather, написанный на Rust. Выглядит перспективно, но не понятно что с проектом.

Ещё есть Minestom, что также пытаются написать свой мультипоточный сервер, но уже на Java. Имеют довольно активное сообщество. Подходит скорее для мини-игр, чем на полноценный опыт.

Для ядер Fabric и Forge также были попытки написать моды на многопоточность — MCTM и MCTMFabric. Разработка практически не ведётся.

Начало положено

В это же время над своим решением начал работать австралийский разработчик PureGeroMultiPaper (github / сайт). Основой для него является серверное ядро Pufferfish. Это позволяет получить лучшую производительность со всеми оптимизациями и сохранить совместимость с гигантской экосистемой плагинов Bukkit. Вот так выглядят отношения между популярными серверными ядрами:

  • Vanilla → CraftBukkit → Spigot → Paper → Airplane → Pufferfish → MultiPaper

  • Vanilla → CraftBukkit → Spigot → Paper → Airplane → Pufferfish → Purpur

  • Vanilla → Fabric
Тысячи игроков в одном чанке: новая ветка развития Minecraft

В начале марта 2022 года проект вышел в полный open-source и публичную бету. Это произошло благодаря финансированию со стороны CritterzNFT. До этого использовалась модель с платным доступом к ветке с более оптимизированной и «вместительной» версией. Известность проект уже получил с выходом видео ютубера Ish с РП ивентом про тюрьму.

1000 игроков симулируют тюрьму в Minecraft

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

Тысячи игроков в одном чанке: новая ветка развития Minecraft

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

Клиент на Fabric с множеством модов на Multipaper сервере с плагинами
Клиент на Fabric с множеством модов на Multipaper сервере с плагинами

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

Концепт MultiPaper состоит из мастера — общей базы данных, шардов (нод) — игровых серверов, и прокси. Шарды общаются друг с другом напрямую p2p и координируются с мастером.

Схема инфраструктуры
Схема инфраструктуры

Multipaper Master — это прокси-сервер и база данных, которая взаимодействует между подчиненными серверами и предоставляет сервис, на основе которого эти серверы синхронизируют свои данные и отправляют пакеты. Каждый сервер MultiPaper подключается к одному Master, чтобы данные между ними обновлялись в режиме реального времени. Если игрок на сервере A атакует другого игрока на сервере B, сервер A отправит эти данные прямо на сервер B, чтобы сервер B нанес повреждения игроку и применил обратную связь.

PureGero, автор проекта

Такая координация позволяет удостоверится, что каждый загруженный чанк «тикается» только одним сервером за раз и позволяет осуществлять смену текущего «владельца» чанка в зависимости от нагрузки. Каждый шард кэширует чанки, которые нужны игрокам, что обслуживаются им. Если правильно всё сделать, то вы сможете поднимать/останавливать шарды по мере необходимости и игроки практически бесшовно будут переключаться между ними (увидят лишь загрузочный экран на 1 секунду).

Вывод команды <b>/servers</b> с информацией о состоянии каждого шарда
Вывод команды /servers с информацией о состоянии каждого шарда

Недавно PureGero поставил рекорд по заполненности сервера — 7000 ботов в одном прегенерированном мире на 7200x7200 блоков со 100+ ботами на каждом шарде. Для этого использовались виртуальные сервера Google Cloud Platform. Также потребовались тонкие оптимизации настроек методом проб и ошибок.

Стресс-тест ботами - <a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fgithub.com%2FPureGero%2Fminecraft-stress-test&postId=1271959" rel="nofollow noreferrer noopener" target="_blank">https://github.com/PureGero/minecraft-stress-test</a>
Стресс-тест ботами - https://github.com/PureGero/minecraft-stress-test

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

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

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

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

Немного расскажу про свой опыт. Я являюсь одним хостом довольно крупного игрового проекта и discord-сообщества на 17000+ участников. Оно сформировано по совершенно другой нишевой игре, не Minecraft. Дневной онлайн на наших игровых серверах составляет обычно 400-600 игроков.

Недавно попробовали вместе с некоторыми стримерами Банды (суммарно вышло 1к+ зрителей) организовать ивент на MultiPaper сервере с двумя этапами: строительство игровой зоны (город/пригороды) и последующая масштабная королевская битва. Как оказалось, привлечь больше чем 100 игроков довольно трудно, даже если есть такое немалое сообщество и среднего размера стримеры.

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

Telegram: @azizonkg

417417
142 комментария