Тысячи игроков в одном чанке: новая ветка развития Minecraft
Как «синхронизировать» множество серверов в единый бесшовный мир и как изменится игровое сообщество с выходом нового серверного ядра — MultiPaper.
Одной из самых главных проблем большинства игровых серверов является однопоточность или сильная зависимость от главного потока, где важна частота процессора (а точнее 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. Разработка практически не ведётся.
Начало положено
В это же время над своим решением начал работать австралийский разработчик PureGero — MultiPaper (github / сайт). Основой для него является серверное ядро Pufferfish. Это позволяет получить лучшую производительность со всеми оптимизациями и сохранить совместимость с гигантской экосистемой плагинов Bukkit. Вот так выглядят отношения между популярными серверными ядрами:
Vanilla → CraftBukkit → Spigot → Paper → Airplane → Pufferfish → MultiPaper
Vanilla → CraftBukkit → Spigot → Paper → Airplane → Pufferfish → Purpur
Vanilla → FabricСтрим ютубера Ish. Все 897 игроков собрались в одном месте.В начале марта 2022 года проект вышел в полный open-source и публичную бету. Это произошло благодаря финансированию со стороны CritterzNFT. До этого использовалась модель с платным доступом к ветке с более оптимизированной и «вместительной» версией. Известность проект уже получил с выходом видео ютубера Ish с РП ивентом про тюрьму.
Потенциал невероятный и оно уже работает! Не без багов, но всё же. Вы только представьте какие весёлые и масштабные идеи можно реализовать: вместо мини-игр можно устраивать уже большие, королевская битва на несколько тысяч игроков, политические сервера с упором на экономику с городами и королевствами, сервера анархии с безумными событиями. Это действительно превратит Minecraft в ММО со своей существующей метавселенной.
Проект находится в стадии бета-тестирования и постоянно улучшается. Но требуется помощь сообщества в распространении информации о нём. Это поможет в интеграции и поддержке серверов MutliPaper уже существующими плагинами и написанию новых из-за увеличения популярности. Я верю, что проект станет трендовым. Возможно даже привлечёт новую аудиторию в игру. Всё из-за того, что здесь нет слишком амбициозных замашек вроде написания движка с нуля.
"Попробовать поиграть самому можно уже сейчас на специально созданном под эту статью сервере на MultiPaper. Он тестовый и не будет регулироваться, поэтому прошу соблюдать рамки приличия и быть благоразумными.
Хотел сразу на 1.19 сделать, но один из плагинов на приват, HuskTown, не успел обновиться.
syndicate.ss220.space - Minecraft 1.18.2 (любой клиент)"
Клиент на Fabric на Multipaper сервере
Как это работает?
Концепт MultiPaper состоит из мастера — общей базы данных, шардов (нод) — игровых серверов, и прокси. Шарды общаются друг с другом напрямую p2p и координируются с мастером.
Multipaper Master — это прокси-сервер и база данных, которая взаимодействует между подчиненными серверами и предоставляет сервис, на основе которого эти серверы синхронизируют свои данные и отправляют пакеты. Каждый сервер MultiPaper подключается к одному Master, чтобы данные между ними обновлялись в режиме реального времени. Если игрок на сервере A атакует другого игрока на сервере B, сервер A отправит эти данные прямо на сервер B, чтобы сервер B нанес повреждения игроку и применил обратную связь.
PureGero, автор проекта
Такая координация позволяет удостоверится, что каждый загруженный чанк «тикается» только одним сервером за раз и позволяет осуществлять смену текущего «владельца» чанка в зависимости от нагрузки. Каждый шард кэширует чанки, которые нужны игрокам, что обслуживаются им. Если правильно всё сделать, то вы сможете поднимать/останавливать шарды по мере необходимости и игроки практически бесшовно будут переключаться между ними (увидят лишь загрузочный экран на 1 секунду).
Вывод команды /servers с информацией о состоянии каждого шарда
Недавно PureGero поставил рекорд по заполненности сервера — 7000 ботов в одном прегенерированном мире на 7200x7200 блоков со 100+ ботами на каждом шарде. Для этого использовались виртуальные сервера Google Cloud Platform. Также потребовались тонкие оптимизации настроек методом проб и ошибок.
Стресс-тест ботами - 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
Email: azizonkg@gmail.com