Очемябудуговорить§ Глобальнаякарта
• Немногоистории• ЧтотакоеГлобальнаяКарта• 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
Технологическийстек• Python2.7• JS• CSS
• Falcon• SQLAlchemy +alembic
• Postgres9.5• PostGis• Redis
• Kafka• RabbitMQ
• uwsgi• nginx
• Технологическийстек
• GIS.Готовимкарту
• АрхитектураГК• Расчетигрового
хода• Векторныетайлы
9
Подкапотомуbackend• Технологическийстек
• GIS.Готовимкарту• АрхитектураГК• Расчетигрового
хода• Векторныетайлы
”+” “-”
• Быстрый• Прост в использовании• Хорошо документирован
• Не популярен• Мало библиотек• Нет стандартов организации
кода
Falcon
SQLAlchemy +alembic”+” “-”
• Популярный• Хорошо документирован
• ORM
10
Хранениеданных
”+” “-”
• Надежный• Много полезныхиинтересных
плюшек(jsonb,разнообразныеиндексы,расширения)
• Накопленаэкспертиза
• Болеесложноеадминистрирование,чем,скажем,вMySQL
• Партиционирование
Postgres
Redis”+” “-”
• Быстрый• Надежный • RedisQuque• Типы данных• Богатый тулинг
• Используетодноядро• KEYS• Отсутствие персистентности
данных
• Технологическийстек
• GIS.Готовимкарту• АрхитектураГК• Расчетигрового
хода• Векторныетайлы
11
• MarionetteJS
• Leaflet JS(рисуеткарту)
• UTFGrid
Текущийстек
Минусыподхода
• МногоDOMопераций
• РисуемHTML
• Сложнокэшировать
Подкапотомуfrontend• Технологическийстек
• GIS.Готовимкарту• АрхитектураГК• Расчетигрового
хода• Векторныетайлы
12
Чтохотимизменить
• MarionetteJS->ReactcRedux (уменьшимколичествоDOMопераций)
• UTFGrid ->R-деревья->Векторныетайлы-> WebGL
• Geobuff +Topojson (передачагеоданных)
Подкапотомуfrontend• Технологическийстек
• GIS.Готовимкарту• АрхитектураГК• Расчетигрового
хода• Векторныетайлы
13
GIS.Готовимкарту
• OpenStreetMap
• Рельефы(высота,глубина– ввидерастра)
• Требованияотгеймдизайнеров
Навход
Инструменты• PostGis – набортиповданных,функцийдля
работысгеоданными
• QGIS+плагины
• Технологическийстек
• GIS.Готовимкарту• АрхитектураГК• Расчетигрового
хода• Векторныетайлы
14
GIS.Готовимкарту• Технологическийстек
• GIS.Готовимкарту• АрхитектураГК• Расчетигрового
хода• Векторныетайлы
15
АрхитектураГлобальнойКарты• Технологическийстек
• GIS.Готовимкарту• АрхитектураГК• Расчетигрового
хода• Векторныетайлы
16
Workers
• SendBattle– отсылаетбоинасервер
• Battle – обрабатываетрезультатыбоя
• ClanSync – синхронизируеткартуиклановыйсервис
• History – публикуетвkafka данныеобизмененияхнаГК
• Nextturn– расчетигровогохода
• Технологическийстек
• GIS.Готовимкарту• АрхитектураГК• Расчетигрового
хода• Векторныетайлы
17
Расчетигровогохода
• Запускаетсякаждыйчасровнов00минут
• Пересчитываетигровуюситуацию(запускаетбоизапровинции,просчитываетаукционы,раздаетголду ит.д)
• Компонент• Фаза• Шаг
wot:- phase:leave-maphandler:wot.core.turn.phases.LeaveMapsteps:[leave_map]params:batch_size:100
-wot:- phase:game_statssteps:- name:pre_turn_game_statshandler:wot.core.turn.steps.pre_turn_game_stats
sdk:- phase:create_turnsteps:- name:create_turnhandler:sdk.turn.steps.create_turn
-wot:- phase:pre-turnsteps:- name:start_schedulerhandler:wot.core.turn.steps.start_scheduler
• Технологическийстек
• GIS.Готовимкарту• АрхитектураГК• Расчетигрового
хода• Векторныетайлы
18
Векторныетайлы
• Сохраняемрезультатырасчетходавбазу(геометриювPostgis)• Выделили4слояданных:
• Publicstatic• Publicdynamic• Privatestatic• Privatedynamic
• Redis каккэшдляnginx
• Технологическийстек
• GIS.Готовимкарту• АрхитектураГК• Расчетигрового
хода• Векторныетайлы
19
ОперированиеГлобальнойКартой
20
Особенности
• Неравномернаянагрузкавтечениеигровогодняидажеодногочаса• Большоеколичествовнешнихпотребителей
• Большоеколичествоигровыхнастроек• Высокаястепенькастомизации подразныерегионы• БоинаГлобальнойкартедолжныпроходитьвстрогоопределённое
время,перенос– отменабояявляетсякритическойпроблемой
• Особенности• Deployment• Сбор
статистикииметрик
• Немногоонадежности
21
Deployment
• Доставляетсяввиде4хпакетов• Backend-package• Frontend-package• Loc-package• Gamedata-package
• Процессдеплоя автоматизированFabric2.0• Рендерконфигурациипошаблону• Доставкаисходногокода/пакетовнапродакшен• Выполнениемиграций• Pre/postшаги
• Смотримвсторонуконтейнеровиоблаков• Docker• Mesos/Marathon/Chronos
• Особенности• Deployment• Сбор
статистикииметрик
• Немногоонадежности
22
Собираемлоги• Особенности• Deployment• Сбор
статистикииметрик
• Немногоонадежности
23
Graphite• Особенности• Deployment• Сбор
статистикииметрик
• Немногоонадежности
24
Graphana• Особенности• Deployment• Сбор
статистикииметрик
• Немногоонадежности
25
Немногоонадежности
• Мониторинг• Триггерынасистемныеметрики• Триггерыналогическиеошибки
• Агрегацияианализлогов• Logstah +elasticsearch+kibana• Sentry• Graphite+Graphana• Логирование науровнеприложениявхранилище
• Нагрузочноетестирование• Анализпрофилянагрузки• Симуляцияигровойактивности
• Инструментарий
• Особенности• Deployment• Сбор
статистикииметрик
• Немногоонадежности
26
Let’sDiscussЛевонАвакян[email protected]