Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Один кликстрим на все бэкенды. Дмитрий Хасанов ...
Search
AvitoTech
April 28, 2018
Programming
840
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Один кликстрим на все бэкенды. Дмитрий Хасанов (Авито)
Внедрение инструментария для отправки аналитических событий в php, go, python
AvitoTech
April 28, 2018
More Decks by AvitoTech
See All by AvitoTech
«Масштабируемая архитектура фронтенда» — Роман Дворнов, Avito
avitotech
0
1.3k
Атомарные SPA — Александр Китов, Альфа-Банк
avitotech
0
2k
Моделирование пользовательских предпочтений в мультимодальных данных. Hady W. Lauw, Максим Ткаченко (Singapore Management University)
avitotech
0
420
Кластеризация волатильных объявлений с помощью EM-алгоритма — Василий Лексин (Avito)
avitotech
0
450
«(Не)Безопасность 101» — Григорий Джанелидзе, Mosdroid
avitotech
0
530
«CI процессы в Android разработке Avito», Сергей Пинчук, Avito
avitotech
0
490
Кластеризация волатильных объявлений с помощью EM-алгоритма — Василий Лексин (Avito)
avitotech
0
140
Аналитическое хранилище Avito.ru — от больших к очень большим данным — Артем Данилов (Avito)
avitotech
1
4.9k
Кросс-продуктовые эффекты, или как мы оценивали вклад «Электричек» — Екатерина Лосева (Туту.ру)
avitotech
0
4.6k
Other Decks in Programming
See All in Programming
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
140
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
290
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
270
Domain-Driven Transformation
hschwentner
2
2.3k
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
220
AWSに止められる覚悟してますか?
morizo_1984
2
530
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
35
17k
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
1
430
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
410
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
ジョジョの世界をXRで再現する
mofurune
0
160
Featured
See All Featured
Optimizing for Happiness
mojombo
378
71k
Utilizing Notion as your number one productivity tool
mfonobong
4
620
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
430
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Agile that works and the tools we love
rasmusluckow
331
22k
What does AI have to do with Human Rights?
axbom
PRO
1
2.5k
Technical Leadership for Architectural Decision Making
baasie
3
600
Amusing Abliteration
ianozsvald
1
340
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
43k
Paper Plane
katiecoart
PRO
5
54k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Transcript
Один кликстрим на все бэкенды Внедрение инструментария для отправки аналитических
событий в php, go, python Дмитрий Хасанов, Avito
Сервисная архитектура Avito облако CI/CD сервис демонок крончик 2
Общие задачи логи загрузка файлов метрики сервис демонок крончик 3
Кликстрим • клик • просмотр • оплата • сообщение в
мессенджере • поисковый запрос • рекламный аукцион 4
Готовые решения • Google Analytics • Яндекс Метрика 5
Кликстрим Событие Хранилище Отчёт 6
Кликстрим Событие Хранилище Отчёт 7
Кликстрим Событие Хранилище Отчёт “clickstream_event”: { “event_id”: 100, “user”: {
“id”: 413, “email”: “
[email protected]
” }, “geo”: { “latitude”: 20.220, “longitude”: -10.110 }, “user_agent”: “fluffy_browser”, “time”: “2018-04-11 22:37:05” } 8
Кликстрим Событие Хранилище Отчёт DWH 9
Простая реализация Проект A event = { ‘field_one’: ‘val_1’, ‘field_two’:
‘val_2’, ‘time’: unixtime() } transport.send(event) 10 Проект Б event = { ‘fieldOne’: ‘val_1’, ‘field.TWO’: ‘val_2’, ‘time’: date() } customTransport.send(event)
Простая реализация Плюсы: • быстро получаем отчёт • легко реализовать
Минусы: • бардак • затраты ресурсов • трудно переиспользовать код 11
Источники событий Бэкенды: • монолит: php • сервисы: go, python,
php • кроны, демоны: go, python, php, shell 12
Источники событий Бэкенды: • монолит: php • сервисы: go, python,
php • кроны, демоны: go, python, php, shell Фронтенды: js 13
Источники событий Бэкенды: • монолит: php • сервисы: go, python,
php • кроны, демоны: go, python, php, shell Фронтенды: js Мобильные приложения: swift, java 14
Источники событий Бэкенды: • монолит: php • сервисы: go, python,
php • кроны, демоны: go, python, php, shell Фронтенды: js Мобильные приложения: swift, java Внешние проекты: c#, java 15
Путь события сервис демонок крончик DWH транспорт 16
Путь события фронтенд сайта внешний проект мобильное приложение DWH транспорт
прокси 17
Реестр событий • окружения • события • поля • метаинформация
18
Кодогенерация • лангпак php, go, python • отправщик событий в
DWH • автодокументация 19
Лангпак • геттеры, сеттеры • общая логика 20 class EventOne:
def setFieldOne(string value): self.fields[“one”] = value def getFieldOne() -> string: return self.fields[“one”] def getTime() -> Timestamp: return time.now() def getData() -> EventData: return self.fields
Отправщик событий 21 сервис демонок крончик DWH транспорт
Пример лангпака package someproject type SomeEventV0 struct { *event }
func NewSomeEventV0() *SomeEventV0 { e := &SomeEventV0{ event: new( 420, `
[email protected]
`, `lindows`, ), } e.required["user_id"] = struct{}{} e.required["email"] = struct{}{} e.required["os"] = struct{}{} return e } 22
Версионирование событий • нельзя ломать код на бою • нельзя
удалять • новая версия события на каждое изменение 23
Версионирование лангпаков • нельзя ломать код на бою • новая
версия на каждое изменение кода лангпака 24
Получение лангпака • php composer install reestr/langpack • go, python
curl \ -d '{"environment":"bo"}' \ -H "Content-Type: application/json" \ http://reestr/langpack/go/0/ | tar x 25
Отправка событий • php $clickstreamSender->send($event); • go err := clickstreamSender.Send(event)
• python clickstream_sender.send(event) 26
Протохитрости 27 фронтенд сайта внешний проект мобильное приложение DWH транспорт
прокси
Протохитрости Мобильные приложения message MobileAppEvent { int32 eventId = 1;
int32 version = 2; int32 timestamp = 3; map<string,string> params = 4; } 28 Сторонние проекты message ExternalProjectEvent { int32 someIntField = 1; string someStringField = 2; bool someBoolFied = 3; }
Объекты event = { ‘scalar_field’: ‘some_string’, ‘object_field’: { ‘inner_scalar’: 3.14,
‘inner_object’: { … } } } 29 Плюсы: • наборы объектов Комплексность: • лангпаки • админка реестра • валидация
Административности • идентификация владельцев событий • отслеживание девиаций: технических, логических
• вывод из эксплуатации неиспользуемых событий • интеграция в работающие проекты 30
Настоящее • десятки источников • более тысячи версий событий •
логируется около двух миллиардов событий в сутки 31
Будущее • ускорение создания событий • нативные пакеты с лангпаками
для python и go • статус отправки события • доменная модель компонентов 32
Спасибо за внимание 33