MMO терминология для «оставаться в одном игровом мире» - это один осколок . EVE online - единственная крупная MMO, которая пытается втиснуть каждого игрока в один осколок.
К счастью для вас, они опубликовали очень информативную статью о том, как они это делают.
(источник: gamasutra.com )
Плохие новости. Вы не можете применять методы онлайн EVE в целом. Их решения абсолютно адаптированы к их конкретному жанру и реализации.
ПРИМЕЧАНИЕ . Для всей супер-необычной сети с одним шардом EVE они используют одну базу данных. Они не смогли разработать масштабируемое согласованное решение для распределенных баз данных в режиме реального времени.
В любом случае чтение того, как они это сделали, должно помочь вам разработать собственное решение. Однако будьте осторожны, вы пытаетесь решить очень сложную проблему.
Вместо того, чтобы распространять ваш игровой сервер, я бы предложил сначала изучить другие ваши возможности.
- Профилируйте свой игровой сервер.
- Оптимизируйте код своего сервера, чтобы снизить нагрузку на процессор, если это является проблемой.
- Оптимизируйте протокол связи между клиентами и сервером, чтобы сократить количество разговоров в сети.
- Оптимизируйте сервер игры для связи с базой данных.
- Запустите оптимизатор запросов и внесите необходимые изменения.
- сократить взаимодействие с БД до минимума
- Переместите БД на отдельную машину.
Это часто помогает тонну. Храните БД в той же локальной сети, если это возможно, но это должно помочь вашему игровому серверу быть намного бодрее, когда он работает только на оборудовании сервера.
Первым делом вы должны отделить прямой доступ к базе данных от игрового сервера и использовать специальное промежуточное ПО для подготовки данных для вашего сервера (например, XML, JSON). Они будут способны обрабатывать любое количество баз данных и, что более важно, предоставлять вам опции кэширования для конкретных приложений. Кэшируйте все, что можете, и придирайтесь к БД только тогда, когда это необходимо. Делайте большие выборки и редко вместо множества маленьких запросов, чтобы добиться максимальной производительности в вашем сценарии.
База данных по вашему выбору может также позволить вам работать с кластерами, которые позволяют легко расширять доступные ресурсы базы данных и быстрее предоставлять ваши результаты, но это тема, которая требует большого опыта и специального администратора базы данных для настройки и обслуживания - и не совсем для инди-бюджета.
источник
Что касается игрового сервера: общая стратегия состоит в том, чтобы использовать несколько серверов, каждый из которых управляет частью игрового мира. Каждый пользователь обычно должен знать только о том, что происходит вокруг него, поэтому имеет смысл разделить мир по местностям. К сожалению, это становится намного сложнее, когда у вас есть открытый мир без каких-либо границ вместо мира, который состоит из закрытых зон и игроков, телепортирующихся между ними. Когда у вас открытый мир, вам нужен способ плавного перемещения игроков между зонами и способ синхронизации областей вблизи границ между серверами. Это сложная проблема.
Что касается базы данных: базы данных SQL обычно плохо масштабируются. Они не предназначены для распространения. Но в настоящее время существует довольно новая тенденция баз данных NoSQL, таких как MongoDB или Cassandra, которые были разработаны для распределения по нескольким серверам. Они значительно упрощают наращивание емкости, просто добавляя больше серверов. Так почему же не все крупные игры переключаются на них? Потому что:
Поэтому, когда ваш проект уже очень продвинулся, переключение на другое решение для базы данных может быть большим риском и очень большими затратами времени и энергии.
источник
Нет. Это невероятно сложная область, которая еще не решена.
источник
Я знаю, что это старый, но ....
На самом деле есть две области, на которых нужно сосредоточиться.
Вам нужно распределить ваше приложение по нескольким серверам. Вам необходимо распределить базу данных по нескольким серверам.
И вам нужно иметь избыточность для обоих.
Для этого есть несколько решений с открытым исходным кодом. Farmville - хороший пример использования MemSQL / Couchbase.
источник