О	чем	я	буду	говорить
§ Глобальная	карта
• Немного	истории
• Что	такое	Глобальная	Карта
• Gameplay
• Игровые события	на	Глобальной	карте
§ Архитектура	и	технологии
• Технологический	стек
• GIS.	Готовим	карту
• Архитектура	Глобальной	карты
• Расчет	игрового	хода
• Векторные	тайлы
§ Оперирование	Глобальной	картой
• Особенности
• Deployment
• Сбор	статистики	и	метрик
• Немного	о	надежности
2
Глобальная	Карта	2.0
3
Немного	истории• Немного	истории
• Что	такое	
Глобальная	
Карта
• Gameplay
• Игровые	события	
на	Глобальной	
Карте
§ Статистика
• Около	900	игровых	провинций	
• 10-12	тысяч	танковых	
сражений	на	одной	карте	в	
игровые	часы
• До	5	тысяч	кланов	на	одной	
карте	в	день
4
Что	такое	Глобальная	Карта• Немного	истории
• Что	такое	
Глобальная
• Gameplay
• Игровые	события	
на	Глобальной	
карте
§ Статистика
• Около	10000	игровых	
провинций	
• 18-20 тысяч	танковых	
сражений	на	одной	карте	в	
игровые	часы
• До	10 тысяч	кланов	на	одной	
карте	в	день
5
Gameplay• Немного	истории
• Что	такое	
Глобальная
• Gameplay
• Игровые	события	
на	Глобальной	
карте
• Фронты
• Сезоны
• Аукционы
• Высадочные	провинции
• Квесты
6
Игровые	события	на	Глобальной	Карте• Что	такое	
Глобальная	Карта
• Немного	истории
• Gameplay
• Игровые	события	
на	Глобальной	
Карте
7
Архитектура	и	технологии
8
Технологический	стек
• Python	2.7
• JS	
• CSS
• Falcon
• SQLAlchemy +	alembic
• Postgres	9.5
• PostGis
• Redis
• Kafka
• RabbitMQ
• uwsgi
• nginx
• Технологический	
стек
• GIS.	Готовим	
карту
• Архитектура	ГК
• Расчет	игрового	
хода
• Векторные	тайлы
9
Под	капотом	у	backend• Технологический	
стек
• GIS.	Готовим	карту
• Архитектура	ГК
• Расчет	игрового	
хода
• Векторные	тайлы
”+” “-”
• Быстрый
• Прост в использовании
• Хорошо документирован
• Не популярен
• Мало библиотек
• Нет стандартов организации
кода
Falcon
SQLAlchemy +	alembic
”+” “-”
• Популярный
• Хорошо документирован
• ORM
10
Хранение	данных
”+” “-”
• Надежный
• Много полезных	и	интересных	
плюшек	(jsonb,	разнообразные	
индексы,	расширения)
• Накоплена	экспертиза
• Более	сложное	
администрирование,	чем,	скажем,	
в	MySQL
• Партиционирование
Postgres
Redis
”+” “-”
• Быстрый
• Надежный
• RedisQuque
• Типы данных
• Богатый тулинг
• Использует	одно	ядро
• KEYS
• Отсутствие персистентности
данных
• Технологический	
стек
• GIS.	Готовим	карту
• Архитектура	ГК
• Расчет	игрового	
хода
• Векторные	тайлы
11
• Marionette	JS	
• Leaflet JS	(рисует	карту)
• UTFGrid
Текущий	стек
Минусы	подхода
• Много	DOM	операций
• Рисуем	HTML
• Сложно	кэшировать
Под	капотом	у	frontend• Технологический	
стек
• GIS.	Готовим	карту
• Архитектура	ГК
• Расчет	игрового	
хода
• Векторные	тайлы
12
Что	хотим	изменить
• Marionette	JS	->	React	c	Redux (уменьшим	количество	DOM	операций)
• UTFGrid ->	R-деревья	->	Векторные	тайлы-> WebGL
• Geobuff +	Topojson (передача	геоданных)
Под	капотом	у	frontend• Технологический	
стек
• GIS.	Готовим	карту
• Архитектура	ГК
• Расчет	игрового	
хода
• Векторные	тайлы
13
GIS.	Готовим	карту
• Open	Street	Map
• Рельефы(	высота,	глубина	– в	виде	растра)
• Требования	от	геймдизайнеров
На	вход
Инструменты
• PostGis – набор	типов	данных,	функций	для	
работы	с	геоданными
• QGIS	+	плагины
• Технологический	
стек
• GIS.	Готовим	карту
• Архитектура	ГК
• Расчет	игрового	
хода
• Векторные	тайлы
14
GIS.	Готовим	карту• Технологический	
стек
• GIS.	Готовим	карту
• Архитектура	ГК
• Расчет	игрового	
хода
• Векторные	тайлы
15
Архитектура	Глобальной	Карты• Технологический	
стек
• GIS.	Готовим	карту
• Архитектура	ГК
• Расчет	игрового	
хода
• Векторные	тайлы
16
Workers
• Send	Battle	– отсылает	бои	на	сервер
• Battle – обрабатывает	результаты	боя
• Clan	Sync – синхронизирует	карту	и	клановый	сервис
• History – публикует	в	kafka данные	об	изменениях	на	ГК
• Next	turn	– расчет	игрового	хода
• Технологический	
стек
• 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
Векторные	тайлы
• Сохраняем	результаты	расчет	хода	в	базу	(геометрию	в	Postgis)
• Выделили	4	слоя	данных:
• Public	static
• Public	dynamic
• Private	static
• Private	dynamic
• Redis как	кэш	для	nginx
• Технологический	
стек
• GIS.	Готовим	карту
• Архитектура	ГК
• Расчет	игрового	
хода
• Векторные	тайлы
19
Оперирование	
Глобальной	Картой
20
Особенности
• Неравномерная	нагрузка	в	течение	игрового	дня	и	даже	одного	часа
• Большое	количество	внешних	потребителей
• Большое	количество	игровых	настроек
• Высокая	степень	кастомизации под	разные	регионы
• Бои	на	Глобальной	карте	должны	проходить	в	строго	определённое	
время,	перенос	– отмена	боя	является	критической	проблемой
• Особенности
• Deployment
• Сбор	
статистики	и	
метрик
• Немного	о	
надежности
21
Deployment
• Доставляется	в	виде	4х	пакетов
• Backend-package
• Frontend-package
• Loc-package
• Gamedata-package
• Процесс	деплоя автоматизирован	Fabric	2.0
• Рендер	конфигурации	по	шаблону
• Доставка	исходного	кода/пакетов	на	продакшен
• Выполнение	миграций
• Pre/post	шаги
• Смотрим	в	сторону	контейнеров	и	облаков
• Docker
• Mesos/Marathon/Chronos
• Особенности
• Deployment
• Сбор	
статистики	и	
метрик
• Немного	о	
надежности
22
Собираем	логи• Особенности
• Deployment
• Сбор	
статистики	и	
метрик
• Немного	о	
надежности
23
Graphite• Особенности
• Deployment
• Сбор	
статистики	и	
метрик
• Немного	о	
надежности
24
Graphana• Особенности
• Deployment
• Сбор	
статистики	и	
метрик
• Немного	о	
надежности
25
Немного	о	надежности
• Мониторинг
• Триггеры	на	системные	метрики
• Триггеры	на	логические	ошибки
• Агрегация	и	анализ	логов
• Logstah +	elastic	search	+	kibana
• Sentry
• Graphite	+	Graphana
• Логирование на	уровне	приложения	в	хранилище
• Нагрузочное	тестирование
• Анализ	профиля	нагрузки
• Симуляция	игровой	активности
• Инструментарий
• Особенности
• Deployment
• Сбор	
статистики	и	
метрик
• Немного	о	
надежности
26
Let’s	Discuss
Левон	Авакян
Competitive	Gaming	Reliability	Team	Lead
l_avakyan@wargaming.net

Левон Авакян "Архитектура мета игры Wargaming. Глобальная карта 2.0"