Вопрос или проблема
У меня есть такая настройка:
Веб-сайт с базой данных. Эта база данных содержит учетные записи и все детали. Хэши паролей/соли/даты регистрации и т.д. Что я хочу сделать, так это использовать эту же базу данных для нашей игровой базы данных. Игра будет на серверах в Соединенных Штатах, в то время как веб-сервер и база данных веб-сервера находятся в Нидерландах. Я знаю, что есть большая проблема с использованием удаленного SQL, и мы действительно не хотим этого, поскольку работа веб-сайта столь же важна, как и работа игрового сервера.
У нас было одно решение, которое заключалось в отправке учетных данных в другую базу данных, размещенную на том же сервере, на котором размещен игровой сервер, но это было невероятно ненадежно, потому что если веб-сайт был недоступен, новые пользователи не могли зарегистрироваться для игры.
Решение, которое мы хотим, – это иметь сервер авторизации, который будет использоваться для проверки учетных данных для всего. Это возможно/осуществимо, и может ли кто-нибудь указать правильное направление?
Таким образом, в итоге:
2 игровых сервера
1 веб-сервер
1 центральная база данных, используемая для авторизации. Игровые учетные записи и учетные записи на веб-сайте должны быть одинаковыми.
но это было невероятно ненадежно, потому что если веб-сайт был недоступен, новые пользователи не могли зарегистрироваться для игры
Используйте асинхронную репликацию MySQL с двумя мастерами. Оба конца могут обновлять. Оба конца реплицируют.
Нужен ли игровому серверу доступ для записи в базу данных или только выполнение запросов SELECT
для аутентификации пользователей? Если ему нужен только доступ для чтения, тогда я бы просто сделал то, что вы делали ранее – реплицировал бы все или подмножество вашей базы данных веб-сайта на игровой сервер. Наличие отдельной базы данных для аутентификации не защитит вас от сценария с отказом, который вы описали – в любом случае, если веб-сервер недоступен, никто не сможет зарегистрироваться, независимо от того, локальна ли его база данных пользователей или находится в каком-то центральном месте.
Что насчет создания реплики-раба базы данных на игровом сервере в США с данными авторизации из базы данных веб-сайта в Нидерландах?
Начните с ваших мыслей или вопроса о Eerone. Это может быть о любимом моменте, развитии персонажа.
Ответ или решение
Логин-сервер для вашего игрового проекта
Ваша система, которая предполагает одновременное использование веб-сервера и игровых серверов, действительно требует тщательного планирования. Проблема взаимодействия между разными географически удаленными серверами — это классическая задача, требующая учета множества факторов, таких как надежность, производительность и безопасность.
Задача
У вас есть веб-сервер и игровое окружение, расположенные в разных странах — Нидерландах и США соответственно. Ваша цель заключается в создании системы авторизации, которая бы не зависела от веб-сервера и позволяла бы игре функционировать даже в случае временного отключения сайта. Для этого вы планируете создать логин-сервер, который сможет обрабатывать запросы на авторизацию и регистрацию пользователей.
Оптимальное решение
-
Логин-сервер: Создание отдельного логин-сервера, который будет выступать промежуточным звеном между игровыми серверами и центральной базой данных. Этот сервер будет иметь собственный экземпляр базы данных, которая синхронизируется с основной базой.
-
Дублирование базы данных: Рассмотрите возможность использования двусторонней асинхронной репликации между центральной базой данных и логин-сервером. В этом случае, каждая запись может обновляться как на уровне веб-приложения, так и на стороне игрового сервера. Это обеспечит доступ к авторизационным данным при любом сценарии.
-
Настройка репликации: Установите систему, где логин-сервер будет служить как «слейв» (ведомая) база данных основной базы. Это позволит сократить задержку доступа к данным пользователей и минимизировать нагрузку на основную базу данных.
-
Запросы только на чтение: Если игровой сервер будет лишь читать данные для аутентификации, вы можете настроить его для доступа к реплике базы данных, что значительно ускорит процесс авторизации по сравнению с запросами к удаленному серверу.
-
Обработка отказов: Учтите сценарии отсутствия связи. Если веб-сервер будет недоступен, логин-сервер все равно сможет обслуживать запросы на авторизацию благодаря локально хранимым данным. Таким образом, даже при сбое основного сервиса, пользователи смогут входить в игру и регистрироваться.
-
Шифрование данных: Обеспечьте безопасное хранилище и передачу паролей с использованием современных стандартов шифрования. Это поможет предотвратить утечки данных и атаки с использованием перехвата.
Резюме
Создание логин-сервера с реплицированием базы данных является целесообразным и оптимальным решением для управления учетными записями пользователей в вашем игровом проекте, расположенном в разных странах. Это позволит минимизировать проблемы, связанные с доступностью сервисов и обеспечит существенное упрощение процесса аутентификации и регистрации пользователей. Инвестируйте в безопасность и масштабируемость вашего решения, чтобы ваши пользователи всегда могли наслаждаться игровым процессом без перебоев.
Если у вас есть дополнительные вопросы или требуется помощь в реализации, специалисты по IT-архитектуре готовы помочь с настройкой инфраструктуры, которая отвечает всем вашим требованиям.