Должен ли я хранить сервер входа отдельно от игрового сервера?

15

Я думаю о создании MMO-сервера и смотрю, как другие игры структурируют свою сеть. Одна из вещей, которые я заметил, это то, что всегда есть сервер логина, а затем игровой сервер.

Я все еще решаю, должен ли я сделать это, но я хотел бы сначала услышать некоторые мнения. Каковы преимущества этого, и как сервер входа в систему взаимодействует с игровым сервером для обработки входа в систему?

JPiolho
источник
1
Вопрос "Как достигается балансировка нагрузки в ММО?" может быть интересно: gamedev.stackexchange.com/q/5956/450
Хендрик Браммерманн

Ответы:

15

Я полагаю, что это в основном обусловлено тем фактом, что логин и обработка игры логически более или менее независимы, поэтому они обычно хранятся отдельно для лучшей развязки, упрощения обслуживания и масштабируемости. Они не обязательно должны находиться на разных физических серверах, они могут работать так же, как и независимые сервисы на одной машине. Если трафик становится слишком большим, сервер входа в систему можно легко перенести на другую машину.

Кроме того, серверы входа являются вероятным вектором атаки, поэтому хорошо иметь их отдельно от точки зрения безопасности.

Внутренне различные серверные службы могут использовать обычные сокеты для связи друг с другом, будь то на одном компьютере или на другом компьютере в кластере. В качестве альтернативы, сервер базы данных может использоваться для поддержания флага «залогинен» для каждого пользователя.

Александр Гесслер
источник
В большинстве случаев я вижу такой флаг в db gameserver и внутри db loginserver, поэтому сервер входа в систему может проверять друг друга, и если logindb! = Gamerserverdb, пользователь выходит из системы.
daemonfire300
10

Одним из очень важных аспектов в разработке ММО является достижение масштабируемости и обеспечение балансировки нагрузки.

Аутентификация пользователей путем проверки учетных данных, статуса бана, подсчета недавних неудачных входов в систему и т. Д. - это задача, которую можно выполнить, не зная логики игры или игровых данных. Так что очень легко перенести это на свой собственный кластер серверов.

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

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

Хендрик Браммерманн
источник
2

Как бывший игрок WoW, мой опыт заключался в том, что сервер входа всегда был самым слабым звеном в цепочке.

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

Но серверы входа просто никогда не справлялись так хорошо, и часто бывали неработоспособны, пока мировые серверы были в порядке. (это означает, что если вы потеряете связь в рейде / подземелье, вы не сможете вернуться, но другие игроки ждут вас!)

И теперь, когда система входа в WoW объединена с Battle.Net, Starcraft 2 может стать недоступным, когда WoW находится под большой нагрузкой (как это произошло в течение пары часов при запуске Cataclysm).

Поэтому, если вы создаете игру, в которой будет очень много пользователей, очень важна масштабируемость и производительность системы входа в систему.

bluescrn
источник
1
Я полагаю, что серверы входа в систему являются основной целью для атак с использованием перебора паролей, поэтому они должны быть в состоянии справиться с небольшой нагрузкой. Особенно, если игра настолько популярна, что злоумышленники начинают использовать бот-сети (для предотвращения ограничения скорости на ip-адрес) в дополнение к обычному случайному угадыванию имен пользователей.
Хендрик Браммерманн
Отказ войти в систему и поместить игрока в мир может иметь несколько причин. Это может быть логин серверов / учетная запись базы данных. Но это может быть вызвано невозможностью загрузить информацию об игроке из базы данных. Или из-за сбоя системы, которая отправляет игроков на мировые серверы, серверы чата ... Внутренний брандмауэр все еще может обрабатывать известные соединения, но не может применять набор правил для принятия решения о новых соединениях. Играть игрока в мир намного сложнее, чем взаимодействовать, когда вы внутри.
Хендрик Браммерманн