HighLoad++ 2017
Зал «Конгресс-Холл», 7 ноября, 12:00
Тезисы:
http://www.highload.ru/2017/abstracts/2864.html
Большое количество современных веб-проектов переходит на микросервисную архитектуру. Она решает огромное количество проблем, присущих монолитным системам, однако накладывает качественно новые требования, в том числе и на аналитику данных.
В докладе будет рассказано о том, какие вызовы и возможности преподнесла нам микросервисная архитектура, а также показано, как clickstream может быть полезен не только аналитикам, но и разработчикам.
2. Сайт объявлений №1 в России*
Moscow
St. Petersburg
Novosibirsk
N. Novgorod
Kazan
Samara
Rostov
Volgograd
Voronezh
Ufa
Chelyabinsk
Omsk
Krasnoyarsk
Vladivostok
Yakutsk
Irkutsk
Khabarovsk
ТОП-10 самых
посещаемых
сайтов Рунета
34 миллиона
активных
объявлений
35 миллионов
уникальных
посетителей в
месяц
50%
просмотров с
мобильных
устройств
* По данным ООО «ЛПСР» (LiveInternet.ru) в категории «Товары и услуги» на 30 августа 2016 года
4. Подробнее о хранилище данных Avito
• Как мы считали трафик на Вертике — Голов
Николай — http://www.highload.ru/2014/abstra
cts/1570.html
• От больших к очень большим данным — зачем
нужна нормализация в Big Data? — Голов
Николай -
http://www.highload.ru/2015/abstracts/1878.html
11. Backend – разработчик
«Привет! Мне поставили задачу, чтобы завести событие
clickstream. У меня тут вопросы есть:
• Что это такое — clickstream?
• А какие атрибуты надо писать для десктопа? А для
мобилки?
• А есть примеры, как писать для гошечки?
• А куда писать?»
12. Ищем причины проблем
Нет общего формата событий и примеров для новых
языков – каждый пишет свой маленький велосипед
Каждое событие пишется вручную. Много ошибок –
забыли обязательный атрибут, сделали лишний,
сломали что-то старое…
13. Аналитик
«Привет! Мы делаем новый крутой микросервис и хотим
аналитику.
• Как нам можно по-быстрому завести 15 новых событий?
• Да, правда, такое событие уже существует?! Извините, мы
сделали новое, не заметили.
• Хм, как бы это попроще все объяснить разработчику.
• А кто делал это событие, оно странное, хотим разобраться – к
кому идти? А таск почитать есть?
• Здравствуйте, а мы из домофонда. И тоже хотим события. Как
нам их сделать?»
14. Ищем причины проблем
Общий язык между аналитиками, backend’ом, DWH –
WTF и к кому идти
Сложность навигации в текущий событиях и их
истории. Дублирование уже существующих
15. DWH – разработчик
Ааааа! Сколько вопросов!
• А кто опять забыл обязательное поле?
• Хм, а почему в этом событии льется древний атрибут? Его
же везде убрали.
Пора что-то предпринять!
16. Ищем причины проблем
Почти все вопросы в итоге приходят к DWH
разработчику
Отсутствие версионирования событий. И, как следствие,
отсутствие четкой схемы событий
17. Осознание
В условиях быстрого роста событий и их
децентрализации, для дальнейшего
масштабирования необходима единая точка знаний о
всех событиях
19. package bo
type HelpdeskTicketCreateV0 struct {
*event
}
func NewHelpdeskTicketCreateV0Event()
*HelpdeskTicketCreateV0 {
e := &HelpdeskTicketCreateV0{
event: new(
4,
802,
0,
`dwh.helpdesk`,
),
}
e.required["ctid"] = struct{}{}
return e
}
Пример события – Go и Python
class HelpdeskTicketCreateV0(BaseEvent):
_fields = dict(
tag=Field('tag', str, True, False),
esp_tag=Field('esp_tag', str, True, False),
field_eid=Field('eid', int, True, False),
field_ctid=Field('ctid', int, True, False),
field_version=Field('version', int, True, False),
field_src_id=Field('src_id', int, True, False),
field_dt=Field('dt', int, True, False),
)
def __init__(self, field_ctid: int,
field_url: Optional[str] = None,
field_ip: Optional[str] = None,)
super().__init__()
# Non changeable
self.esp_tag: str = '’
self.field_dt = int(time())
self.tag: str = 'dwh.helpdesk’
self.field_src_id: int = 4
self.field_eid: int = 802
self.field_version: int = 0
# Changeable
self.field_ctid: int = field_ctid
20. Дополнительные потребности
• Ребят, могу ли я в свой крутой микросервис тянуть данные
не из DWH, а сразу из MongoDB?
• Мы хотим показывать нашим пользователям чистую от
ботов статистику в реальном времени. Как нам это сделать?
22. Подробнее об ESP
События, события и ещё раз события.
Опыт построения Event Stream Processing — Сухов
Антон — http://ritfest.ru/2017/abstracts/2652.html
23. К чему это все привело – рост типов
событий
0
100
200
300
400
500
600
700
800
900
1000
09/2013 03/2014 09/2014 03/2015 09/2015 03/2016 09/2016 03/2017 09/2017
Осознание
MVP
V2
24. Clickstream – как это стало
ELT
ESP
Segmentation
Stat Counter
Push
Get
Route
25.
26.
27. О чем не подумали сразу
Единый
справочник полей
Дополнительные
метаданные
Перевод старых
событий на новые
языковые пакеты
31. Дополнительные метаданные
Тип события
• Просмотр страницы
• Контакт
• Прочее
Уровень логирования
• Только сырые данные
• Все отчеты, кроме детального
• Все отчеты, включая детальный
32. Перевод старых событий на новые
языковые пакеты
Просвещение
Мониторинг событий
Возможность тестирование событий
33. Что дальше?
Реализация автоматической загрузки в DWH
Полная централизация очистки событий
Stream – аналитика в реальном времени
Обвязка событиями без участия аналитиков
О том: что Авито большой и о том, что много данных
Как развивалось хранилище данныхHP Vertica + Anchor Modelling
О том: что это сердце аналитикиПоведение пользователей – AB тесты, конверсии, аномалии
Ckickstream – поток событий, которые происходят у вас в продукте.Немного слов о том, что такое Домофонод и Автотека
Fluentd – коллектор логов
На беке все хардкодом – каждое событие написано немного по-своему
Не забыть сказать, зачем вообще стали переходить на микросервисы
Добавить историй и мяса
Добавить историй и мяса
История – забыли метку AB теста, записали событие в другую коллекцию, пока писали свое событие – сломали чужое – контакты.
Добавить историй и мяса
Например, завели второе событие просмотра телефона.
Событие заполнение какой-либо формы.
Добавить историй и мяса
Добавить историй и мяса
Добавить историй и мяса
ToDo: детали + скрины
Обязательно расшифровать что такое языковой пакет, детальнее рассказать о кодогенерации
Языковой пакет – библиотека, которая умеет генерить код отправки событий для конкретного яхыка
Обязательно сказать, что до этого данные тянули из вертики
ToDo: наглядно показать разницу со старой схемой
по мотивации и
легаси (попытались автоматически перевести, а что мне за это будет, логика в событиях)
Единый репозиторий метаданных позволяет быстро и удобно управлять существующими и новыми источниками данных и их жизненными циклом.
Единая шина данных позволяет быстро и удобно маршрутизировать события в децентрализованной архитектуре.