Здравствуйте! Хочу попробовать построить проект на мульти-серверной системе. Обычно у нас принято так: анархия-1, анархия-2 или бедварс-1, бедварс-2 и т.д. По сути ты зашел на монолитный сервер котором и арены и лобби. С точки зрения поддержки это удобно, просто пишешь 1 плагин и добавляешь копию сервера, может используешь mysql для хранения постоянных данных.
На западных серверах или крупных серверах мини-игр принято делать вообще, отдельно лобби и игру и использовать балансировщики нагрузки, чтобы отправлять на разгруженный сервер, хаба, если лобби, то ни игровой, а игровой обратно лобби.
Такое начало... Будем использовать proxy velocity, paper сервера и самописы под них, mysql, redis. Сразу скажу что я разобрался как все это работает. Вопрос больше к архитектуре, а именно использование redis в проекте.
Берем просто для примера, стикфайт (пвп 1на1 на палках), бедварс. Сразу хочется дать метку, что каждый мини режим это кластер (грубо говоря мини сеть серверов). Один режим не должен знать про сервера другого.
1. Так вот, есть лобби сервера например их 2 шт каждый по 100 онлайна, игровые 4 шт, каждый по 100 онлайна. Каждый лобби сервер должен знать сколько онлайна на игровых, чтобы выбрать разгруженный сервера и по его названию отправить команду на velocity сервер "перекинь p1 на stickFight-game-2". Игровые серверы должны знать о лобби серверах, цифре онлайна, чтобы механизм сработал в обратку. Так вот на redis как такое реализовать? Используя ключи в его памяти? Для выбора сервера метод балансировки постоянно шлет пакет чтобы получить онлайн каждого сервера (асинхронно) или делать локальные hashmap кэши? И там держать под рукой каждый сервера и обновлять системой уведомлений redis? Первый способ дает центр данных, второй копии, но локальность.
2. хранение статистики игрока и настроек, эти данные я принимаю за профиль игрока, так и назовем, а java на сервере у меня это объект с полями, в котором настройки игрока и стата. так вот получить из бд не проблема. а хранить? при входе можно делать локальные копии данных ка каждом сервере кластера, но это тупик полный, жрет память. хранить в ключах? а например сделать проверку глобальную "находится ли игрок в дуэли?" придется слать асинхронный метод чтобы проверил. понятно что локал хост будет все но тем не менее не могу определиться.
3. хранение пати. в redis? с ttl? просто опять же нужно что то проверить с другого сервера идешь в redis.
Вот так. По большей части вопрос "где хранить"? Архитектурный. Типо закодить смогу, но определиться все никак, чтобы чисто и без костылей, если такое вообще возможно. Тот же хайпиксель или еще какие нибудь сервера на таких же принципах сделали, но я просто боюсь сразу проект пустить по говну. Делаю чисто для себя, для понимания...
На западных серверах или крупных серверах мини-игр принято делать вообще, отдельно лобби и игру и использовать балансировщики нагрузки, чтобы отправлять на разгруженный сервер, хаба, если лобби, то ни игровой, а игровой обратно лобби.
Такое начало... Будем использовать proxy velocity, paper сервера и самописы под них, mysql, redis. Сразу скажу что я разобрался как все это работает. Вопрос больше к архитектуре, а именно использование redis в проекте.
Берем просто для примера, стикфайт (пвп 1на1 на палках), бедварс. Сразу хочется дать метку, что каждый мини режим это кластер (грубо говоря мини сеть серверов). Один режим не должен знать про сервера другого.
1. Так вот, есть лобби сервера например их 2 шт каждый по 100 онлайна, игровые 4 шт, каждый по 100 онлайна. Каждый лобби сервер должен знать сколько онлайна на игровых, чтобы выбрать разгруженный сервера и по его названию отправить команду на velocity сервер "перекинь p1 на stickFight-game-2". Игровые серверы должны знать о лобби серверах, цифре онлайна, чтобы механизм сработал в обратку. Так вот на redis как такое реализовать? Используя ключи в его памяти? Для выбора сервера метод балансировки постоянно шлет пакет чтобы получить онлайн каждого сервера (асинхронно) или делать локальные hashmap кэши? И там держать под рукой каждый сервера и обновлять системой уведомлений redis? Первый способ дает центр данных, второй копии, но локальность.
2. хранение статистики игрока и настроек, эти данные я принимаю за профиль игрока, так и назовем, а java на сервере у меня это объект с полями, в котором настройки игрока и стата. так вот получить из бд не проблема. а хранить? при входе можно делать локальные копии данных ка каждом сервере кластера, но это тупик полный, жрет память. хранить в ключах? а например сделать проверку глобальную "находится ли игрок в дуэли?" придется слать асинхронный метод чтобы проверил. понятно что локал хост будет все но тем не менее не могу определиться.
3. хранение пати. в redis? с ttl? просто опять же нужно что то проверить с другого сервера идешь в redis.
Вот так. По большей части вопрос "где хранить"? Архитектурный. Типо закодить смогу, но определиться все никак, чтобы чисто и без костылей, если такое вообще возможно. Тот же хайпиксель или еще какие нибудь сервера на таких же принципах сделали, но я просто боюсь сразу проект пустить по говну. Делаю чисто для себя, для понимания...