Mioji
Пользователь
- Сообщения
- 286
- Решения
- 14

Недавно я задумался об создании продуманных систем на порядок более качественных для серверов Minecraft. Моей задачей было по итогу все максимально упростить и автоматизировать, чтобы лежать на пляже где-то на бали, делать минимум действий для обеспечения стабильности и пить свой кофеёк, наблюдая как деньги текут рекой. Но как дальше я погружался в эту тему, так чаще я начал натыкаться на проблемы и недостаток информации. По этому мне интересно выслушать ваш опыт, идеи и мысли.
Нынче администраторов/начинающих предпринимателей не особо волнует качество техничкой части, стабильность и самое главное - оптимизация. Многие до сих пор запускают сервер из-под root папки, обновляются делая миллон лишних действий, качая сливы, а потом удивляются почему их взломали или почему у них все через одно место. Конечно, многие учатся и совершенствуются, а другие остаются на том же месте.
Я решил попробовать все, что только можно применить для Minecraft. В первую очередь для проекта важно иметь Git под управлением всего (В моем случае GitLab), это банально удобно. Но не все понимают силу Git системы, по этому я разъясню. У меня на проектах или у моих клиентов могут быть сотни, а то и тысячи конфигов/файлов/плагинов/сурсов. Каждый раз заходить и что-то менять в одних и тех же местах очень затратно, по этому лучший способ - это хранение всех файлов в репозитории, а затем оттуда его подсасывать. Это не везде можно использовать, но в некоторых ситуациях ОЧЕНЬ полезно. Для таких целей можно использовать стандартные скрипты, ci/cd или например Ansible (даже чайник разберётся, chatgpt в помощь). По итогу я всегда знаю какая версия конфигов или плагинов у меня, я всегда могу обновить до новой версии или откатить все в пару действий.
Docker безусловно лучший инструмент, если вы хотите не только изолировать систему, но и ограничить ресурсы и окружение, давая только самое необходимое. Но можно ещё дальше, а именно - использование системы оркестрации контейнеров (kubernetes). Для многих это может показаться излишним, но по правде говоря только так вы можете добиться высокой отказоустойчивости и автоматизации ваших серверов. Но, увы, Minecraft буквально не предназначен для работы с Kubernetes, в чистом виде там всего несколько прикольных функций, которые удобно впишутся. Система показывает себя хорошо на больших проектах где используется большое количество микросервисов, серверов и своих технологий, например как на Cristalix. Может быть я в чем-то не прав?)
Но какой толк использовать такие системы, если ваш проект на этапе фундамента очень плох. Оптимизация и безопасность. Я очень много изучал оптимизацию серверов, попробовал буквально все, начиная от самых разных вариантов paper, заканчивая микросервисами, Minestom и folia. Но по итогу самой выгодной и удобной системой оказалось Cross-server или обычный Paper последней версией. Продуманная межсерверная система может обеспечить любому серверу самую грамотную балансировку нагрузки, стабильность и высокую производительность. Вот пример. У меня сейчас есть рабочий проект, где спавн на отдельном сервере, мир на отдельном, а например нагруженный Эндемир/ад совсем на другом. И все это визуально выглядит как один цельный сервер, но фактически это разные сервера. Такая система может выдержать тысячу игроков если постараться, не используя мощный процессор для folia, большое количество памяти и других ресурсов. Это не только экономия ресурсов и денег, но обеспечение стабильности.
Для стабильной работы всего этого супа очень важен выбор стека. Плагины, качество кода, базы данных - все важно. Я использую несколько бесплатных open source плагинов и ряд самописных, продуманных лично мною и реализованные отличными разрабами. В качестве базы данных для основных целей я использую MariaDB, но есть ситуации где используется MongoDB. Для брокера сообщений, кэширования и многих функций кросс-сервера использую Redis. В некоторых случаях я использую другие базы данных, если потребуется, например Prometheus, InfluxDB или Elasticsearch, но они используются для других целей, о которых дальше пойдет речь.
Очень важной частью в моей системе является аналитика и сбор статистики/логов. Сейчас сбор метрик идёт с прокси, серверов, а также некоторых важных сервисов. Куда поступает вся эта информация? Конечно же в Grafana. Все данные хранятся в Prometheus и InfluxDB. Сообщество уже давно создало open source сборщиков метрик, так что вы тоже можете подобное использовать в своих проектах, развернув и настроив все за пару часиков. Без аналитики очень сложно точно понять где проблемы у сервера или как его можно улучшить.
Теперь мне интересно выслушать вас, что и как используете вы? Какие советы дадите? Может быть у вас есть какие-нибудь мысли на этот счёт?