Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

150 views

Published on

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

Published in: Education
  • Be the first to comment

  • Be the first to like this

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

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

×