Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Архитектура мета игры Wargaming. Глобальная карта 2.0.
О чем я буду говорить
 Глобальная карта
• Немного истории
• Что такое Глобальная Карта
• 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
Let’s Discuss
Левон Авакян
Competitive Gaming Reliability Team Lead
l_avakyan@wargaming.net

More Related Content

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

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