WebCamp 2016: Python. Левон Авакян: Архитектура мета игры Wargaming....

Post on 22-Mar-2017

93 views 1 download

Transcript of WebCamp 2016: Python. Левон Авакян: Архитектура мета игры Wargaming....

Очемябудуговорить

§ Глобальнаякарта• Немногоистории• ЧтотакоеГлобальнаяКарта• 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.Готовимкарту

• АрхитектураГК• Расчетигрового

хода

• Python2.7• JS• CSS

• Falcon• SQLAlchemy +alembic

• Postgres9.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

• Сложнокэшировать

• MarionetteJS• Leaflet JS(рисуеткарту)

• UTFGrid

Текущийстек

Минусыподхода

• Технологическийстек

• GIS.Готовимкарту• АрхитектураГК• Расчетигрового

хода

12

ПодкапотомуFrontend

Чтохотимизменить• MarionetteJS->ReactcRedux (уменьшимколичествоDOM

операций)

• UTFGrid ->R-деревья->Векторныетайлы-> WebGL

• Geobuff +Topojson (передачагеоданных)

• Технологическийстек

• GIS.Готовимкарту• АрхитектураГК• Расчетигрового

хода

13

ПодкапотомуFrontend

• PostGis – набортиповданных,функцийдляработысгеоданными

• QGIS+плагины

• OpenStreetMap

• Рельефы(высота,глубина– ввидерастра)

• Требованияотгеймдизайнеров

Навход

Инструменты

• Технологическийстек

• GIS.Готовимкарту• АрхитектураГК• Расчетигрового

хода

14

GIS. ГотовимКарту

GIS.Готовимкарту• Технологическийстек

• GIS.Готовимкарту• АрхитектураГК• Расчетигрового

хода

15

АрхитектураГлобальнойКарты• Технологическийстек

• GIS.Готовимкарту• АрхитектураГК• Расчетигрового

хода

16

• SendBattle– отсылаетбоинасервер• Battle – обрабатываетрезультатыбоя

• ClanSync – синхронизируеткартуиклановыйсервис• History – публикуетвkafka данныеобизмененияхнаГК• Nextturn– расчетигровогохода

Workers• Технологическийстек

• 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_statssdk:- 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

ОперированиеГлобальнойКартой

19

Особенности

• Неравномернаянагрузкавтечениеигровогодняидажеодногочаса

• Большоеколичествовнешнихпотребителей• Большоеколичествоигровыхнастроек• Высокаястепенькастомизации подразныерегионы• БоинаГлобальнойкартедолжныпроходитьвстрого

определённоевремя,перенос– отменабояявляетсякритическойпроблемой

• Особенности• Deployment• Сборстатистикии

метрик• Немногоо

надежности

20

Deployment• Доставляетсяввиде4хпакетов

• Backend-package• Frontend-package• Loc-package• Gamedata-package

• Процессдеплоя автоматизированFabric2.0• Рендерконфигурациипошаблону• Доставкаисходногокода/пакетовнапродакшен• Выполнениемиграций• Pre/postшаги

• Смотримвсторонуконтейнеровиоблаков• Docker• Mesos/Marathon/Chronos

• Особенности• Deployment• Сборстатистикии

метрик• Немногоо

надежности

21

22

Собираемлоги• Особенности• Deployment• Сборстатистикии

метрик• Немногоо

надежности

23

Graphite• Особенности• Deployment• Сборстатистикии

метрик• Немногоо

надежности

Graphana• Особенности• Deployment• Сборстатистикии

метрик• Немногоо

надежности

24

Немногоонадежности• Мониторинг

• Триггерынасистемныеметрики• Триггерыналогическиеошибки

• Агрегацияианализлогов• Logstah +elasticsearch+kibana• Sentry• Graphite+Graphana• Логирование науровнеприложениявхранилище

• Нагрузочноетестирование• Анализпрофилянагрузки• Симуляцияигровойактивности

• Инструментарий

• Особенности• Deployment• Сборстатистикии

метрик• Немногоо

надежности

25

Let’sDiscuss

ЛевонАвакян

CompetitiveGamingReliabilityTeamLead

l_avakyan@wargaming.net