MMORPG, некоторые MOBA, такие как League of Legends или даже StarCraft 2, обычно вынуждают вас выбрать сервер. Обычно это США, ЕС и ЮВА, в MMORPG много по каждому месту. Я вижу, что это было необходимо несколько лет назад, но теперь с появлением AWS и аналогичных предложений, которые позволяют беспрепятственно масштабировать свою «мощность сервера», почему по-прежнему существуют отдельные серверы?
Мой ход мыслей подобен этому (на примере «Звездных войн: Старая Республика»): - Вы всегда находитесь на одной планете, изолированном «экземпляре» от других планет. - Если на одной планете слишком много людей, SW: TOR создает новый экземпляр мира и помещает туда игроков. - Если вы покидаете мир / переключаете инстансы, у вас есть экран загрузки
Так почему же игра не может создать экземпляр для этой планеты? Этот экземпляр (и только этот) содержит ваши текущие данные в базе данных и управляет x игроками. Как только в этом экземпляре появятся игроки х-50, запустится новый сервер и в этом экземпляре появятся новые люди. 50 мест зарезервированы для перехода в вашу группу и т. Д.
Для всех трех основных регионов может быть случай, когда задержка будет низкой, но это позволит вам по-прежнему играть с другими игроками, например, с SEA, если вы можете жить с задержкой в 140 мс (что по-прежнему ничего не значит).
Всякий раз, когда вы переключаете экземпляр или отправляетесь в другой мир, ваш текущий сервер передает все ваши данные следующему серверу, гарантируя, что вам не нужна одна большая централизованная база данных. У вас все еще мог бы быть тот, который периодически получает обновления для целей анализа.
Когда вы выходите из системы или серверы теряют соединение, данные могут быть переданы в массивную базу данных, которая оптимизирована для хранения данных. Затем серверы экземпляров могут быть оптимизированы для высокой пропускной способности.
Есть ли какая-то конкретная причина, по которой это не сработает? Есть ли другие проблемы, которые мне не хватает?
источник
Ответы:
AWS не такое очевидное решение, как кажется. Это может быть дорого, в некоторых случаях даже дороже, чем использование собственных центров обработки данных (например, для издателя их стоимость может быть амортизирована по нескольким продуктам). Кроме того, может возникнуть проблема с хранением конфиденциальных двоичных файлов и журналов на оборудовании вне вашего контроля. Наконец, фактическая вычислительная мощность не всегда является причиной разделения совокупности «сервер» в MMO.
Guild Wars 2, на самом деле, делает нечто очень похожее на это. Карты моделируются отдельными серверными процессами, а экземпляры переполнения создаются по мере необходимости на основе предела населения карты и некоторой эвристики для производительности карты.
В Guild Wars 2 есть два основных центра обработки данных, один в США и один в Европе - между этими центрами обработки данных существует некоторая взаимная болтовня (в основном для систем почтовой торговли и торговли), но в целом они существуют в этой конфигурации, поэтому игроки в Германия, Франция и так далее не должны страдать от более высокой задержки на игровых серверах в США. В центре обработки данных игроки сортируются по «домашним мирам» (или «осколкам» в общепринятых терминах); но одна из причин, по которой это делается, состоит в том, чтобы минимизировать количество игроков, которых клиент может видеть и о которых ему необходимо сообщить. Клиентский аспект этой проблемы не будет решен путем масштабирования до большего количества серверного оборудования. Комбинаторный взрыв на стороне сервера дополнительных путей сообщения может быть,
Вы упускаете довольно много вещей, но это в основном детали (и я не буду объяснять, как мы с ними так или иначе будем обращаться, поскольку они считаются коммерческими тайнами), не относящиеся к такому высокоуровневому, обзорному вопросу. Я думаю, что самый большой недостаток в вашем предложении - попытка передать данные игрока на новый сервер, когда игрок переходит. Это сложная проблема, которая плохо масштабируется, на практике, вероятно, лучше иметь данные об этом игроке на централизованной системе серверов. Это вполне выполнимо, если вы не используете эти базы данных и основное хранилище записей времени выполнения для данных.
источник
В основном это о латентности.
Во-первых, географически близкий к вам сервер снижает задержки. Если сервер находится на другом конце света, то вы увидите большую задержку, чем если бы сервер находился всего в нескольких шагах.
Во-вторых, такие сервисы, как AWS, не предназначены для работы в режиме реального времени. Они рассчитаны на высокую пропускную способность за счет небольшой задержки. Если ваша веб-страница загружается на 250 мс дольше, чем обычно, то это никого не волнует, но если ваша игра обрабатывает сообщение на 250 мс дольше, чем обычно, это может серьезно повлиять на игровой процесс. Вот почему ММО почти всегда размещаются на выделенном оборудовании.
Но это также и дизайн игры. Если вам кажется, что все находятся в одном и том же мире, но им приходится разделять зону, когда она становится слишком полной, люди разочаровываются, что не могут найти своих друзей в назначенных местах встреч. Проблемы такого рода будут распространяться на гильдии, массовые PvP-сражения и т. Д. В наши дни игроки привыкли к инстансам, но есть определенные области, которые, как ожидается, будут разделены. Если у вас есть совершенно разные серверы, то, по крайней мере, здесь нет сюрпризов.
Наконец, есть и другие технологические проблемы, которые необходимо учитывать. Даже если каждый экземпляр достаточно изолирован от других, обычно существуют различные службы, которые должны взаимодействовать между собой. Межсерверное взаимодействие в программном обеспечении реального времени трудно преуспеть, что в прошлом приводило к различным уязвимостям и ошибкам в ММО. В частности, передача авторитетных данных игрока от одного к другому рискованно. Поэтому разработчики часто проявляют осторожность и четко разграничивают границы между серверами, уменьшая объем трафика, который необходимо для их пересечения.
источник
на самом деле я полагаю, что ответ не связан с сетью или архитектурой, а скорее с игрой, обычно в играх такого типа есть события, и эти события рассчитаны в соответствии с наиболее удобными временными рамками для людей, которые играют на сервере, и это обычно связанные с часовым поясом, где живут люди, отсюда ЕС и США и т. д.
Другая причина заключается в том, чтобы создать разделение между мирами, чтобы при наличии слишком сильной группы они не испортили игру всем игрокам, и вы всегда могли перейти в мир, менее «сложный».
Что касается возможностей ЦП сервера, то, хотя современные машины достаточно сильны, всегда есть предел тому, что может обрабатывать одна машина, и поэтому необходимо создать разделение между мирами, чтобы защитить игру от перегрузок и позволить людям выбирать, какой мир они хотят играть, чтобы они могли играть со своими друзьями. Горизонтальное масштабирование - это не просто наличие машин, вам нужно, чтобы ваше приложение работало в горизонтально масштабируемой архитектуре, и это не так просто, когда у вас одновременно происходят тысячи «действий» с возможным влиянием друг на друга, и нужно синхронизировать все. Я думаю, что было бы очень трудно сделать это на нескольких машинах.
источник
Что не так с автоматическим копированием? Когда локация становится слишком населенной, вы просто помещаете 1000 игроков в 10 различных инстансов.
Проблема в том, что онлайн-игры все о сообществе. Представьте, что вы договорились о встрече с людьми, с которыми встречались раньше, и когда вы все там в данное время, вы не видите друг друга, потому что вы все в разных случаях? Это раздражает, и это нарушает погружение.
Как это можно предотвратить? Это можно сделать, поместив каждого игрока в один и тот же экземпляр в любое время, чтобы, когда вы встретите другого игрока один раз, вы могли быть уверены, что встретите этого игрока снова, когда вы оба находитесь в одном месте. Вы никогда не встретите тех игроков, которым назначены другие экземпляры.
Но что, когда вы хотите встретить кого-то вне игры? Как настоящий друг, которого вы пригласили поиграть с вами в игру? Чтобы это произошло, вам понадобится возможность выбрать экземпляр при создании персонажа. Как из списка примеров с легко запоминающимися именами. К сожалению, имя «экземпляр» кажется обычному пользователю непонятным. Они не привыкли к этому слову. Не лучше ли использовать термин, к которому они привыкли? Термин как ... Сервер ?
источник