2. Основная
идея
Главной
задумкой
сервиса
является
поиск
игроков,
наиболее
подходящих
друг
другу
по
стилю
игры.
Работа
сервиса
строится
на
анализе
статистистических
данных,
накопленных
по
каждому
игроку
за
все
время
игры
в
World
of
Tanks.
Целью
сервиса
является
улучшение
качества
игры
пользователей.
Немаловажным
моментом
является
социализация
игроков,
что
выливается
в
увеличение
вовлеченности
в
игру.
Squadder
team,
2014
3. Кластер
базы
данных
Схема
работы
Squadder
team,
2014
Хранилище
данных
Wargaming
Получение
данных
обо
всех
игроках
Расчет
рейтинга,
шардинг
Кластеризация
данных
Обсчет
кластера
рекомендательными
алгоритмами
Пост-‐фильтрация
Выдача
данных
клиенту
4. Хранилище
данных
Wargaming
В
данный
момент
источником
данных
считается
Wargaming
Public
API.
WG-‐PAPI
дает
достаточно
информации
для
реализации
точного
поиска.
Однако
некоторые
данные,
которые
были
бы
крайне
полезны
для
уточнения
работы
сервиса,
через
WG-‐PAPI
не
предоставляются:
-‐
Время
активности
игрока
за
последние
несколько
недель.
Крайне
полезная
характеристика
игрока,
позволяющая
вычислить
его
прайм-‐тайм.
Дает
возможность
подобрать
игроков,
совпадающих
с
субъектом
по
времени
активности
в
игре.
-‐
Данные
о
точном
составе
ангара
игрока.
Позволяет
исключить
из
фокуса
ненужные
машины
и
дает
возможность
подобрать
наиболее
подходящих
совзводных.
-‐
Данные
о
премиум-‐аккаунте,
предпочтительном
сервере
для
игры,
возрасте
(если
такая
информация
имеется)
и
прочие
данные,
чувствительные
к
разглашению.
Позволяют
незначительно
увеличить
точность
работы
сервиса.
Squadder
team,
2014
5. Расчет
рейтинга
и
шардинг
Шардинг
–
это
процесс
разделения
игроков
на
равные
по
количеству
группы
по
определенной
характеристике.
Сервис
осуществляет
шардинг
по
рейтингу
игрока.
Так
как
в
случае
с
рейтингом
распределение
является
нормальным,
сервисом
осуществляется
регулярный
решардинг
базы
со
сдвигами
границ
шардов
для
поддержания
примерно
одинакового
количества
игроков
в
шардах.
Количество
шардов
–
100.
Существует
довольно
много
различных
формул
рейтингов
игрока.
В
данный
момент
предполагается
использование
формул
семейства
WN
как
относительно
простых
в
расчетах.
Формула
рейтинга
Wargaming
довольно
сложна
с
математической
точки
зрения,
однако
если
источник
данных
будет
позволять
получить
итоговое
значение
рейтинга
с
большей
точностью
(без
округления),
использование
рейтинга
Wargaming
ничем
не
будет
отличаться
от
любой
другой
формулы.
Squadder
team,
2014
6. Кластер
базы
данных
В
качестве
основного
хранилища
данных
предполагается
использовать
Riak1.
Для
работы
сервиса
не
требуются
в
точечные
выборки
по
индексам
или
транзакционность
хранилища,
что
располагало
бы
к
использованию
реляционных
баз.
Между
тем,
riak
располагает
определенными
преимуществами:
-‐
Доступность.
Riak
работает
в
masterless-‐кластере,
что
позволяет
использовать
любой
из
серверов
кластера
в
качестве
мастера
запроса.
-‐
Отказоустойчивость.
При
выходе
из
строя
одного
из
серверов
кластера
происходит
автоматическая
перебалансировка
данных
внутри
кластера.
-‐
Масштабируемость.
Так
же,
как
и
при
удалении
сервера,
при
его
добавлении
в
кластер
происходит
автоматическая
перебалансировка
данных
без
остановки
обслуживания.
1
h|p://basho.com/riak/
Squadder
team,
2014
7. Кластеризация
данных
Кластеризация
данных
внутри
шарда
–
важнейший
процесс
в
схеме
работы
сервиса,
а
выбор
критериев
кластеризации
–
самый
простой
и
эффективный
способ
изменить
характеристики
распределения
игроков
по
кластерам.
Для
кластеризации
данных
каждый
игрок
представляется
вектором
целевых
характеристик.
Характеристики
нормализуются
для
упрощения
расчетов,
сглаживания
артефактных
значений
и
учета
весовых
коэффициентов.
Затем
с
использованием
одного
из
быстрых
алгоритмов
кластеризации
(предполагается
k-‐
means
по
евклидовому
расстоянию)
данные
разбиваются
на
сотню
групп
с
равномерным
распределением
количества
игроков.
В
дальнейшем
поиск
осуществляется
только
в
рамках
кластера
игрока.
Squadder
team,
2014
8. Поиск
Процесс
поиска
игроков
осуществляется
с
использованием
рекомендательных
алгоритмов.
Подобные
алгоритмы
используются
для
предугадывания
предпочтений
пользователя
в
интернет-‐магазинах
или
определения
наиболее
подходящего
партнера
на
сайтах
знакомств.
Выбор
критериев
для
работы
алгоритма
также
является
одним
из
самых
эффективных
способов
изменения
и
уточнения
результатов
поиска.
Процесс
поиска
инициируется
конкретным
игроком.
Сервис
загружает
в
память
данные
кластера
пользователя
и
производит
анализ
данных
кластера,
выделяя
высокими
весовыми
коэффициентами
характеристики,
имеющие
высокую
энтропийную
характеристику,
и
наоборот.
Это
позволяет
учесть
особенности
конкретного
кластера
и
увеличить
точность
поиска.
Результатом
работы
поиска
является
ранжированный
список
игроков
кластера.
Squadder
team,
2014
9. Пост-‐фильтрация
На
этапе
пост-‐фильтрации
обрабатываются
такие
вещи,
как:
-‐
Статус
игрока
(онлайн/оффлайн/ищу
взвод/etc.);
-‐
Запрет
на
участие
в
поиске
в
качестве
объекта;
-‐
Определенные
предпочтения
по
используемым
средствам
связи
(ингейм-‐VoIP,
teamspeak,
skype,
etc.);
-‐
Матчинг
по
прайм-‐тайму
игрока;
-‐
Матчинг
по
предпочтительной
технике;
-‐
Лимитирование
выдачи.
В
общем
случае
на
этапе
пост-‐фильтрации
обрабатываются
некоторые
флаги,
реакция
на
которые
должна
быть
незамедлительной.
Результатом
работы
этого
процесса
является
готовая
поисковая
выдача.
Squadder
team,
2014
10. Реализация
Весь
сервис
делится
на
несколько
более
мелких
сервисов,
каждый
из
которых
отвечает
за
свою
часть
работы.
Следует
выделить
следующие
приложения:
-‐
Hydra:
шлюз
к
источнику
данных.
Сглаживает
нагрузку
на
сервисы
Wargaming,
а
также
работает
с
приоритетами
запросов
и
их
очередностью.
-‐
Charon:
обработчик
сырых
данных.
Готовит
данные
к
записи
в
базу,
рассчитывает
рейтинг
игроков,
работает
с
шардингом.
-‐
Styx-‐N:
серверы
базы
данных.
Хранит
данные
и
частично
их
обрабатывает
(map/
reduce).
-‐
Sisyphus:
обработчик
подготовленных
Charon
данных.
Занимается
кластеризацией
данных.
-‐
Hades-‐N:
фронтенд.
Обрабатывает
запросы
пользователей,
работает
с
рекомендационными
алгоритмами.
Все
микросервисы
пишутся
на
erlang
как
на
платформе,
наиболее
подходящей
для
решения
задачи.
Erlang/OTP
также
хорошо
знаком
команде
разработчиков.
Squadder
team,
2014
11. Команда
Squadder
Денис
Фахртдинов,
ведущий
разработчик.
Анализ
задач,
проектирование
и
программирование
сервисов,
руководство
разработкой.
d_fakhrtdinov@wargaming.net
Алексей
Соколов,
младший
разработчик.
Программирование
сервисов.
sokolov@1.21gigawa|s.net
Владимир
Коваль,
инженер
бэкенда.
Подготовка
релизов,
разработка
схем
деплоймента
и
поддержки
работы
сервисов.
vladimir.v.koval@gmail.com