Серверная технология Dual Universe
Jean-Christophe Baillie — идеолог MMO Dual Universe — без труда обещает поддержку не только миллионов игроков, но и миллионов планет. Это смущает слишком многих. Включая меня. В наше время, когда трудности с лагами возникают даже в небольшом фентезийном мире, миллион таких миров рисует скептикам лаги, которых просто в миллион раз больше. Но, кажется, я понял, почему эти обещания давались так легко. Даже если они в какой-то степени дискредитировали проект, потому что такие заявления могли показаться необоснованным шапкозакидательством, для авторов это слишком важная часть их работы, чтобы о ней промолчать.

Мечта сделать невероятно амбициозную виртуальную вселенную посещает многих людей. Но Jean-Christophe Baillie перешел от мечты к попытке реализации только тогда, когда увидел, просчитал и опробовал конкретную технологию, при помощи которой это стало возможно.

Как и в случае со SpatialOS, в основе серверной технологии Dual Universe лежит облачный принцип — динамическое перераспределение ресурсов. Но давайте для начала вернемся немного назад во времени.

Самой известной ММО с единым игровым миром остается EVE Online. Она проектировалась в самом начале двухтысячных при совсем других подходах, технологиях и вычислительных мощностях. Без хитрости такую амбициозную задачу невозможно было решить. Поэтому единый мир был разбит на тысячи планетных систем со “звездными вратами”, обеспечивающими связь между, фактически, изолированными локациями. В дополнение к этому сама планетная система была разбита на ячейки (“гриды”), в рамках которых происходил обсчет и отображение объектов так, что информация о большинстве из них в соседний “грид” не передавалась. Несмотря на то, что не так давно в CCP существенно увеличили размер такой ячейки, принцип обсчета, насколько мне известно, остался прежним — за каждую планетарную систему отвечает один сервер. Как вариант — серверный кластер, но, в любом случае, без динамического перераспределения мощностей. Поэтому, когда где-то неожиданно собирается аномальное для конкретной планетарной системы количество игроков, начинаются лаги.

Серверная технология Dual Universe
Примерно в момент празднования десятилетия EVE Online, Jean-Christophe Baillie понял, что технологии доросли до принципиально другого подхода. Прежде чем я расскажу вам о деталях, замечу, что, по словам разработчиков, новый подход уже был протестирован на нескольких тысячах участников и показал себя отлично. Хотя очевидно, что несколько тысяч — это очень далеко от заявленных миллионов, важно, что сам принцип работоспособен.

Чуть выше, описывая технологию EVE, мы говорили о ячейках, как элементах пространства планетарной системы. Вcя Dual Universe состоит из таких ячеек, но их особенность в том, что они динамически меняют размеры, в зависимости от нагрузки.

Если в определенной ячейке виртуального мира появляется много игроков, она разбивается на несколько более мелких. Если вы основали город на пустынной планете, и там теперь постоянно обитает много игроков, эта местность будет всегда разбита на мелкие ячейки, а вот удаленная часть планеты, куда изредка забредает только случайный исследователь, будет представлена одной большой ячейкой. Выехали большой компанией на пикник или охоту? Снова идет дробление, пока вы не покинете дикие территории.

Серверная технология Dual Universe
Авторы приводят наглядный пример. Если вы идете по улице крупного города в Dual Universe, разные ее стороны могут находиться в разных ячейках и обсчитываться разными серверами. Но вы при этом прекрасно видите, что происходит на другой стороне улицы. Заметив знакомого, вы перебегаете на другую сторону и даже не знаете, что только что перешли на другой сервер.

Если все это действительно работает, нет проблем обещать поддержку любого количества игроков и планет. Это уже не запредельные амбиции, не гигантомания, а просто будничная технология. Если все это действительно работает. Но точно об этом мы сможем узнать, когда в количестве миллиона человек соберемся в Dual Universe.

30 комментариев

avatar
Да, жаль SpatialOS не потрогать) Как разработчику интересно. Оставил заявку, пришло письмо что мол пока мы не можем расширить тех поддержку по этому как только появится возможность мы с вами свяжемся и вы получите SpatrialOS))
  • 0
avatar
Интересный подход. Но все равно, серверные мощности требуются какие-то нереальные (что параллельно приводит к необходимости серьезных инвестиций в железо). Но посмотрим, посмотрим.
  • 0
avatar
Там проблема совсем не в железе как таковом, а в логической увязке этих самых ячеек, динамическом изменении их размера на основе нагрузки, передаче информации между ними и т.п. детали. Перед тем как перебежать дорогу, надо видеть приятеля на той стороне, саму дорогу, транспорт потенциально представляющий опасность для процесса «перебегания» и не только. Подход совсем не нов, как это могло показаться, и на аналогичных принципах строится Star Citizen.
  • 0
avatar
я в делах такого уровня баран бараном, поэтому и не говорю прям точно) Если есть способы — круто, если нет — то пардон)
  • 0
avatar
что-то мне подсказывает, что это не может работать.
даже если предположить что у нас 1кк пользователей и 1кк серверов, как обеспечить их взаимодействие(серверов)? сколько то пользователей и это уже выскочило за физику, gg wp, нужно реализовывать взаимодействие, а как? только кластерами серверов, а их скорость внутреннего взаимодействия уменьшается на порядки при увеличении в разы, накладные расходы, все дела, это примерно то, что вы видите в еве.
  • 0
avatar
Интересны детали реализации. Проблема Евы в том, что все 5к человек в системе во время битвы просчитываются одним сервером, который просто не успевает всё рассчитать. Если разбить это на 50 серверов, то процессорных мощностей хватит на то, чтобы это всё просчитывать. Вопрос в том, как разделить и хватит ли пропускной способности сети. Видится очень много мест для оптимизации, ну и в целом, теоретически, битвы нескольких тысяч человек в таком формате вполне реальны.
Комментарий отредактирован 2016-06-17 10:54:57 пользователем Rigeborod
  • 0
avatar
А какая проблема в разделении? Хоть миллион серверов на миллион человек, это не даёт ничего, проблема не в этом, чисто физическая реализация простая, масштабирование тоже.
Проблема и не пропускной способности, оптические мультилинки в самом дата центре обеспечат фактически бесконечную скорость обмена между конкретными точками, проблема именно в создании системы в которой эти сервера будут взаимодействовать, а чем система больше, тем больше накладные расходы.
  • 0
avatar
А какая проблема в разделении?
Проблема в разделении как раз в минимизации накладных расходов.
обеспечат фактически бесконечную скорость обмена между конкретными точками
Проблема не во времени отклика, а в скорости передачи. И нет, она не «фактически бесконечная», а ограничена какими-нибудь 100Гбит/сек на сетевой карточке. При увеличении количества участников действа всё упрётся именно в пропускную способность сети.
  • 0
avatar
Строго жеж наоборот, чем выше разделение тем выше накладные расходы.
Скорость каналов ограничена на расстоянии, линии денег стоят, промежуточное оборудование денег стоит и т.д, в пределах же одного дата центра, скорость неограничена ничем от слова совсем.
  • 0
avatar
Посмотри например циски нексус 7000, это 192 порта по 100, это до 83 тб/с на стойку, количество стоек ограничено лишь фантазией
  • 0
avatar
При линейном увеличении количества серверов количество передаваемых данных возрастает квадратично. Фактические пределы масштабирования есть, и просчет ряда задач невозможен именно из-за огромного объема передаваемых данных, необходимых для работы системы.
ММО на 5000 человек к этим задачам не относится =)
  • +1
avatar
Ну это, к слову, можно посчитать. Предположим 4000 человек устроили большое сражение в космосе, разделившись на две равные группы, по 2000 на сервер.
Итого, в пике, если каждый взаимодействует с каждым, то нужно передать в каждую сторону 4 миллиона взаимодействий за такт. Если такт 1 секунда как в Еве, а вес взаимодействия 30 байт (трехмерный вектор направления + пару чисел на описание характеристик эффекта + тип эффекта), то это получаются действительно жалкие 900 Мбит в секунду на сервер. Если такт меньше или данных передавать по каким-то причинам приходится больше, то число это может поменяться, но не на два порядка точно. Так что да, в ограничения сети, если не гонять по ней супер избыточные данные, не упереться.
  • +1
avatar
А как же передача данных о расположении боевых единиц на соседнем ноде, их текущие состояния, передвижения, действия происходящие друг между другом, висящие на них эффекты, которых могут быть десятки и тд?
Как раз на порядки по моему передаваемые данные и вырастут.
  • 0
avatar
Данные о расположении и состоянии всех единиц можно передать одним пакетом, за один тик, тут масштабирование линейное, не проблема вообще.

Пример взаимодействия каждый-с-каждым Рыжебород привел как раз. При желании можно поставить несколько сетевух на 10Гбит и сделать десяток эффектов на 10 тиков в секунду. Это настолько круче того, что сейчас можно просчитать в Еве, что и говорить не о чем. Компы упираются по производительности быстрее, чем по трафику.
  • +1
avatar
Да. Евовцам нужно писать новое ядро (или кусок ядра), которое бои позволит распараллеливать.
  • 0
avatar
Наверное, я пока сталкивался лишь с двумя типами проблем — софт не тащит или железо не тащит и приходиться идти путём дублирования, что увеличивает бюджет под конкретную задачу в разы, но ни разу не видел что бы что-то воткнулось в пропускную способность за шлюзом.
  • 0
avatar
Такие проблемы, как теоретическая нехватка пропускной способности касаются симуляции физических процессов на суперкомпьютерах.
Речь не о ММО вообще =)
  • +1
avatar
А что толку от суммы, если в конкретный сервер ты хорошо если 4 сетевухи воткнёшь. Другое дело, как правильно заметил Damaten, в том, насколько же большие объёмы данных нужно передавать.
  • 0
avatar
Физика должна вообще в последнюю очередь нас волновать если мы обсуждаем что-то типа неограниченного бюджета.
  • 0
avatar
и да, например в суперкомпьютерах, не совсем сетевухи в твоем представлении, используется PCI-E подключение к многоуровневым сетям, на своих контроллерах, скорость между узлами спокойно перешагивает за 50Тб\с со временем в микросекунды, это реально только для расчета каких-то ооочень специфичных задач может быть недостаточно(о которых только Damaten в курсе:)).
  • 0
avatar
Я на самом деле не уверен что это все еще так. Разговоры о том чтобы обсчитывать грид (а не систему ) отдельным сервером ходили давно. Кроме того прогресс в области железа сильно сглаживает эту проблему: довольно рядовой современный сервер может состоять из десятков процессорных ядер и сотен гигабайт оперативки, и по производительности будет превосходить целую стойкой серверов 2003 года (когда EVE запускалась).

Но это EVE, которая работает над проблемами масштабирования с момента своего запуска. И много достигла, на самом деле.

Я не сомневаюсь в том что Dual Universe сможет держать огромную вселенную, но вот с тысячами игроков одновременно в одном месте… Переброска объекта с одного сервера на другой (даже если это возможно) это задержки в лубом случае
  • 0
avatar
Насколько я помню в еве нагрузка уже достаточно давно перераспределяется динамически между серверами, нет? То есть раньше надо было оставлять заявку если планировалась битва, а сейчас нода сама усиливается если там замечается повышенная активность.
  • +1
avatar
Да, но это скорее относится к перспективной балансировке нагрузки чем к реалтаймовой.
  • 0
avatar
А есть где-то об этом упоминания? Мне казалось, что ноду, в которой кто-то есть, перевести на более крутой сервер они не могут. Ну и это не отменяет того, что для боевых действий вся система всегда на одном сервере.
Комментарий отредактирован 2016-06-17 15:15:56 пользователем Rigeborod
  • 0
avatar
Не совсем так. Ну или почти так.
На одном сервере обсчитывается куча систем-нод. Когда начинается движуха в некоторых нодах и сервак начинает не справлятся, он перекидывает незагруженные ноды на другие серваки(раньше кста, не перекидывал и можно было ждать около минуты прогруза пустой системы если где-то рядом шла эпичная заруба). В итоге, остается на серваке одна, самая загруженная нода, где происходит эпичная баталия. Раньше заявка нужна была чтобы отдельно перенести эту ноду, где предстоит битва, на еще более мощный сервер.
Диклаймер: это мое понимание ситуации и оно МОЖЕТ(я ему разрешаю:)) отличаться от реальности.
  • +2
avatar
Ну да, я читал девблог кажется года полтора назад где они описывали новый алгоритм. Но суть в том что сейчас в EVE ресурсы тоже распределяются динамически. Другое дело что в EVE ячейка статична, а в дуо ее хотят разбивать. Так что если у тебя наберется толпа на 3000 человек их не обязательно будет кидать всех на одну ноду, а можно просто разбить на десяток ячеек по 300.
  • 0
avatar
Дробящиеся динамически ноды — это разумно, но тут, как мне кажется, основная фишка во взаимодействии объектов в разных нодах. Не понятно, какой толк будет от такой системы дробления, если число событий происходящих на границах двух нод станет сопоставимо с числом событий внутри каждой из этих нод.
Мне кажется, что тут просто напрашивается высокотехнологичная система динамической класторизации данных нод, для обсчета пакетов малых нод, как единого целого, а не просто дробить их на меньшие и меньшие.
  • +2
avatar
вы перебегаете на другую сторону и даже не знаете, что только что перешли на другой сервер
Какая интересная сказка. Для одного человека понимаю, а если их тысячи. При разбросе нагрузки по серверам внутри одного действия ставит большие требования к скорости взаимодействия между этими самыми серверами. И цена «бага» здесь будет куда выше.
  • 0
avatar
Подобный подход уже успешно работает в Аркейдж. Разве что расположение зон и их размер фиксированные. Реализовано это там так, что есть область, где твое положение обсчитывают оба сервера. Баги были, да, но это всё решаемо.
  • 0
avatar
вот тут вышло интервью с разработчиком: Ютуб
  • +3
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.