Платформа Wargaming: Распространение



Всем привет! Года два назад мой коллега Максим( max_poseon ) опубликовал статью Платформа Wargaming: Привет, мир , в которой он «пытался» (как он сам выразился) объяснить, что такое Wargaming Platform. Мы с коллегами хотим продолжить обмен информацией и на этот раз копнем немного глубже — как следует из названия статьи, в дистрибуцию.

С цифровой дистрибуцией все знакомы, мы ею пользуемся регулярно, видели все за 20 лет ее существования, поэтому я обойду теорию и примеры рынка, а расскажу больше о конкретной реализации и опыте.



Обобщенная схема распространения Wargaming

Начнем сразу с картинки: на ней можно увидеть как основные компоненты Wargaming Distribution System (WDS), так и контент Data Flow.

Платформа Wargaming: Распространение

Изображение 1 Кратко процесс можно описать так: игровая студия (Game Studio) загружает на WDS-сервер очередную сборку игры, которая после необходимой обработки (подробнее об этом в разделе «Под капотом») через каналы распределения (компоненты выделены синим цветом) распределяет их по клиентским приложениям WGC. WGC (Wargaming Game Center) — клиентское десктопное приложение, средство взаимодействия пользователя с Платформой Wargaming, в частности с системой дистрибуции.

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

WDS имеет три основных канал распределения :

  • CDN - Сеть доставки контента .

    Вы можете подключить любое количество провайдеров CDN для распространения конкретной игры.

  • Статические семена - BitTorrent-клиенты , работающий на выделенных машинах и распространяющий текущий набор данных.

  • p2p-обмен — каждый клиент WGC может передавать существующие обновления другим клиентам во время их загрузки (необязательно).

Да-да, доставка обновлений осуществляется по технологии BitTorrent. Скажу сразу, p2p-обмен данными между клиентами — это в абсолютном выражении минимальный канал по объему трафика.

Его основная функция — ускорить загрузку в локальных сетях с большим количеством клиентов WGC (например, интернет-кафе) и снизить нагрузку на внешний сетевой интерфейс.

Также использование BitTorrent позволяет легко организовать точку присутствия в любом желаемом месте.

Канал распространения Static Seeds интересен с исторической точки зрения.

Взгляните на гистограмму ниже: она показывает тенденцию минимальной стоимости трафика CDN для крупнейших потребителей (т. е.

оптовой, самой низкой цены).



Платформа Wargaming: Распространение

фигура 2 В 2010 году, на заре World of Tanks, гигабайт трафика стоил примерно $0,2 за заказ 10 ПБ.

При регулярных обновлениях ААА-игр с миллионной аудиторией стоимость трафика весьма впечатляет. Возможность легко добавить свою ноду в любую локацию (с точки зрения географии/провайдеров) позволяет привлечь к ней значительные объемы трафика.

В зависимости от наличия CDN в данной точке, нагрузки на систему во время релизов и объёма релизов конкретной игры такой инструмент даже сегодня имеет хороший экономический эффект. Чтобы базовая схема распространения была до конца понятна, стоит сказать несколько слов о компоненте, который на рисунке 1 обозначен как Wargaming Distribution System backend. Основные задачи компонента:

  • готовить обновления, обеспечивая минимальное количество загружаемого и устанавливаемого клиентом контента;
  • распространять обновления через каналы распространения;
  • предоставить клиенту информацию для обновлений.

Теперь давайте кратко рассмотрим варианты распространения.



Функциональность

Технология BitTorrent, а в частности реализация libtorrent (спасибо Арвиду Норбергу), «из коробки» позволяет с минимальными затратами реализовать:
  • местный ретрекер и семена — актуально как для групп пользователей, так и для игровых студий;
  • подключение нескольких CDN — горизонтальная масштабируемость;
  • весовые коэффициенты для разных CDN — балансировка, «запасные» CDN;
  • проверка и восстановление целостности — файлы игры могут быть повреждены по неосторожности, чистке приложений, антивирусов, проблемах с драйверами или физическим носителем.

Независимо от libtorrent, но и о загрузках:
  • Предварительная загрузка обновлений.

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

  • Балансировка преднагрузки.

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

Установка/обновление игр:
  • Патчи.

    Пользователь скачивает только недостающие части игры, хорошо сжатые.

  • DLC Некоторый контент может быть загружен опционально по усмотрению пользователя или в зависимости от игровой логики.

  • Типы клиентов.

    Игра может предоставить пользователю выбор, какой «тип клиента» скачать (на примере World of Tanks: есть выбор между стандартными текстурами (SD) и текстурами высокой четкости (HD), что позволяет пользователям, чья система не поддерживает не поддерживать максимальные настройки графики, чтобы не загружать слишком много).

  • Мини клиент. Возможность играть до завершения установки, игровая студия имеет возможность определить минимально необходимый набор файлов для запуска игры.

Другой:
  • Установка распространяемых компонентов.

  • Запускайте произвольные установщики во время процессов установки/удаления.



Под капотом



Части и патчи

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

Это позволяет игровой студии:

  • доставлять пользователю контент только для выбранного языка игры;
  • реализовать минимально необходимую часть геймплея, чтобы запустить игру и поставить ее первой;
  • обозначить некоторые части как DLC и разрешить игре/пользователю запрашивать их отдельно.

Чтобы установить деталь, необходимо доставить и применить одно или несколько исправлений.

По своей сути патч представляет собой 7z архив с кодеком LZMA2. Уровень сжатия можно изменить в зависимости от типа игрового контента.

Чтобы установить игру с нуля, патч должен содержать весь контент определенной части игры.

Если это обновление, то патч содержит только необходимое отличие.

Эта разница рассчитывается файл за файлом с использованием следующих алгоритмов:

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

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

WDS подбирает оптимальный алгоритм двоичной разности для конкретного случая.



Торрент

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

Сидами являются, как уже косвенно упоминалось, CDN (вебсиды), Static Seeds (специально подготовленные машины с клиентами на базе libtorrent), сами WGC-клиенты и любые торрент-клиенты с необходимыми торрентами.

Торрент-сессия получает эти семена из следующих источников:

Некоторые провайдеры блокируют либо сам протокол BitTorrent, либо загрузку *.

torrent-файла.

Поскольку загрузка с вебсидов происходит по HTTP, а сам *.

torrent-файл скачивается по HTTPS, то для нас такая блокировка не критична, игра все равно будет доставлена.

В худшем случае трафик от Static Seeds и p2p будет потерян.

В США были случаи, когда провайдер требовал установки своих сертификатов и фильтровал HTTPS-трафик (не очень приятно), находил там торрент-файл и блокировал его.

Но вдруг смена расширения торрент-файла позволила его скачать, т.е.

фильтры были только на уровне имени контента.

В настоящее время ОГК устанавливает до 50 связей с каналами сбыта.

На одной CDN может быть установлено несколько соединений, что позволяет более эффективно использовать канал между ее узлом и клиентом.

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

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

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

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

Именно поэтому во время работы игры WGC не выполняет никаких сетевых операций, если это явно не необходимо игровому клиенту (например, операция авторизации).



Установка обновлений

У нас процессы скачивания и распаковки патчей организованы параллельно и выглядят это так:
  • Начать скачивание патча, изменив приоритет загрузки на часть с заголовком архива.

  • После получения полного заголовка архива запускается процесс распаковки и сразу же распаковываются полученные из сети данные.

  • Распакованные данные сохраняются на диск.

  • Скачанный патч также сохраняется на диск, так как не все фрагменты нужно распаковывать в момент получения, да плюс для распространения другим.

  • После обработки файл патча можно либо оставить на диске, либо сразу удалить, в зависимости от конфигурации, заданной игровой студией.

Процессы распаковки и применения бинарных разностей происходят в отдельном процессе, что позволяет управлять его системностью и приоритетом ввода-вывода средствами ОС.

Помимо этой функциональности есть настраиваемая настройка «турбо-режима», которая ускорит процесс установки, но также будет активно конкурировать с другими приложениями за ресурсы.

По умолчанию WGC работает в режиме низкого потребления ресурсов, ориентируясь на комфорт, но при первой установке WGC объясняет пользователю, что у него есть выбор.



Производительность



Объем обновлений

Минимизация количества загружаемых данных – одна из основных задач нашей системы.

В отличие от подхода Steam, при котором дискретность обрабатываемых данных игрового клиента составляет 1 МБ, при построении бинарных разностей мы часто оперируем байтами.

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

В результате размер запланированных обновлений версий World of Tanks и World of Warships обычно составляет 1–2 ГБ, тогда как при загрузке тех же версий игр в Steam размер загрузки составляет около 5 ГБ.

World of Warships распространяется через Steam, поэтому эти данные получаются регулярно, а для World of Tanks данные берутся из специальных тестовых загрузок.



Требуемый объем пользовательского дискового пространства

За минимальные объемы загружаемых данных и p2p вам придется платить дисковым пространством, необходимым для операций установки и обновления клиента.

На данный момент пользователю нужно больше места, чем занимает игровой клиент: такой буфер может быть до половины размера клиента.

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

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

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

Общая скорость установки обновлений

Мы провели серию замеров, чтобы сравнить скорость установки клиента World of Warships в WGC и Steam при равных скоростях сетевых каналов.

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

).

При использовании «турбо-режима» средний прирост ОГК в палате находится в пределах 5–7 процентов от полного времени установки.

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

С учетом того, что WGC сильнее задействует сетевой канал (см.

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



Последнее слово, или чего здесь не было

Платформа Wargaming и, в частности, система дистрибуции Wargaming — это крупные программные комплексы с десятилетней историей и десятками различных технологий и языков программирования.

В статье мы лишь ознакомились со схемой распределения высокого уровня и ее основными характеристиками.

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

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

Хорошего кодирования, всем удачи! Теги: #Разработка игр #Сетевые технологии #ИТ-компании #ИТ-компании #gamedev #Распределенные системы #проектирование систем #wargaming #распределенные системы #цифровая дистрибуция #проектирование систем #цифровая дистрибуция

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.