Архитектура мета игры wargaming. Глобальная карта 2.0
TRANSCRIPT
О чем я буду говорить Глобальная карта
• Немного истории• Что такое Глобальная Карта• Gameplay• Игровые события на Глобальной карте
Архитектура и технологии• Технологический стек• GIS. Готовим карту• Архитектура Глобальной карты• Расчет игрового хода
Оперирование Глобальной картой• Особенности• Deployment• Сбор статистики и метрик• Немного о надежности
2
Глобальная Карта 2.0
3
Немного истории
Статистика
• Немного истории• Что такое
Глобальная Карта• Gameplay• Игровые события
на Глобальной Карте
• Около 900 игровых провинций
• 10-12 тысяч танковых сражений на одной карте в игровые часы
• До 5 тысяч кланов на одной карте в день
4
Что такое Глобальная Карта Статистика
• Немного истории• Что такое
Глобальная• Gameplay• Игровые события
на Глобальной карте • Около 10000 игровых
провинций
• 18-20 тысяч танковых сражений на одной карте в игровые часы
• До 8 тысяч кланов на одной карте в день
5
Gameplay• Немного истории• Что такое
Глобальная• Gameplay• Игровые события
на Глобальной карте
• Фронты• Очки влияния• Аукционы• Квесты• Сезоны
6
Игровые события на Глобальной Карте• Что такое Глобальная Карта
• Немного истории• Gameplay• Игровые события
на Глобальной Карте
7
Архитектура и технологии
8
Технологический стек• Технологический стек
• GIS. Готовим карту• Архитектура ГК• Расчет игрового
хода
• Python 2.7• JS • CSS
• Falcon• SQLAlchemy + alembic
• Postgres 9.4• PostGis• Redis
• Kafka• RabbitMQ
• uwsgi• nginx
9
Под капотом у backend
Falcon
SQLAlchemy + alembic
• Технологический стек
• GIS. Готовим карту• Архитектура ГК• Расчет игрового
хода ”+” “-”
• Быстрый• Прост в использовании• Хорошо документирован
• Не популярен• Мало библиотек• Нет стандартов
организации кода
”+” “-”
• Популярный• Хорошо документирован
• ORM
10
Хранение данныхPostgres
Redis
”+” “-”
• Надежный• Много полезных и
интересных плюшек (jsonb, разнообразные индексы, расширения)
• Накоплена экспертиза
• Более сложное администрирование, чем, скажем, в MySQL
• Партиционирование
”+” “-”
• Быстрый• Надежный • RedisQuque• Типы данных• Богатый тулинг
• Использует одно ядро• KEYS• Отсутствие персистентности
данных
• Технологический стек
• GIS. Готовим карту• Архитектура ГК• Расчет игрового
хода
11
• Много DOM операций• Рисуем HTML• Сложно кэшировать
• Marionette JS • Leaflet JS (рисует карту)• UTFGrid
Текущий стек
Минусы подхода
• Технологический стек
• GIS. Готовим карту• Архитектура ГК• Расчет игрового
хода
12
Под капотом у Frontend
Что хотим изменить• Marionette JS -> React c Redux (уменьшим количество DOM
операций)• UTFGrid -> R-деревья -> Векторные тайлы-> WebGL • Geobuff + Topojson (передача геоданных)
• Технологический стек
• GIS. Готовим карту• Архитектура ГК• Расчет игрового
хода
13
Под капотом у Frontend
• PostGis – набор типов данных, функций для работы с геоданными• QGIS + плагины
• Open Street Map• Рельефы( высота, глубина – в виде растра)• Требования от геймдизайнеров
На вход
Инструменты
• Технологический стек
• GIS. Готовим карту• Архитектура ГК• Расчет игрового
хода
14
GIS. Готовим Карту
GIS. Готовим карту• Технологический стек
• GIS. Готовим карту• Архитектура ГК• Расчет игрового
хода
15
Архитектура Глобальной Карты• Технологический стек
• GIS. Готовим карту• Архитектура ГК• Расчет игрового
хода
16
• Send Battle – отсылает бои на сервер• Battle – обрабатывает результаты боя• Clan Sync – синхронизирует карту и клановый сервис• History – публикует в kafka данные об изменениях на ГК• Next turn – расчет игрового хода
Workers• Технологический стек
• GIS. Готовим карту• Архитектура ГК• Расчет игрового
хода
17
Расчет игрового хода• Запускается каждый час ровно в
00 минут• Пересчитывает игровую
ситуацию( запускает бои за провинции, просчитывает аукционы, раздает голду и т.д)
• Компонент• Фаза• Шаг
wot: - phase: leave-map handler: wot.core.turn.phases.LeaveMap steps: [leave_map] params: batch_size: 100
- wot: - phase: game_stats steps: - name: pre_turn_game_stats handler: wot.core.turn.steps.pre_turn_game_stats sdk: - phase: create_turn steps: - name: create_turn handler: sdk.turn.steps.create_turn
- wot: - phase: pre-turn steps: - name: start_scheduler handler: wot.core.turn.steps.start_scheduler
• Технологический стек
• GIS. Готовим карту• Архитектура ГК• Расчет игрового
хода
18
Оперирование Глобальной Картой
19
Особенности
• Неравномерная нагрузка в течение игрового дня и даже одного часа
• Большое количество внешних потребителей• Большое количество игровых настроек• Высокая степень кастомизации под разные регионы• Бои на Глобальной карте должны проходить в строго
определённое время, перенос – отмена боя является критической проблемой
• Особенности• Deployment• Сбор статистики и
метрик• Немного о
надежности
20
Deployment• Доставляется в виде 4х пакетов
• Backend-package• Frontend-package• Loc-package• Gamedata-package
• Процесс деплоя автоматизирован Fabric 2.0• Рендер конфигурации по шаблону• Доставка исходного кода/пакетов на продакшен• Выполнение миграций• Pre/post шаги
• Смотрим в сторону контейнеров и облаков• Docker• Mesos/Marathon/Chronos
• Особенности• Deployment• Сбор статистики и
метрик• Немного о
надежности
21
22
Собираем логи• Особенности• Deployment• Сбор статистики и
метрик• Немного о
надежности
23
Graphite• Особенности• Deployment• Сбор статистики и
метрик• Немного о
надежности
Graphana• Особенности• Deployment• Сбор статистики и
метрик• Немного о
надежности
24
Немного о надежности• Мониторинг
• Триггеры на системные метрики• Триггеры на логические ошибки
• Агрегация и анализ логов• Logstah + elastic search + kibana• Sentry• Graphite + Graphana• Логирование на уровне приложения в хранилище
• Нагрузочное тестирование• Анализ профиля нагрузки• Симуляция игровой активности
• Инструментарий
• Особенности• Deployment• Сбор статистики и
метрик• Немного о
надежности
25