SlideShare ist ein Scribd-Unternehmen logo
1 von 31
архитектура вокруг поиска
Андрей Аксенов // Авито // Киев 2018 // v.1.0
Про что доклад
• НЕ про собственно поисковой движок
• Про всякое вокруг ещё, что – оказывается!! – нужно для боя
• Про живую систему, со своими фокусами и глупостями
• Про довольно нагруженную систему, highload
• Про “архитектуру highload” как бы
• (если выйдет неинтересно, вините организаторов, хихи)
• (если интересно, хвалите тоже их, впрочем)
Ты вообще кто! (И архитектура чего?)
• Зовут Андрей, строю движки, включая Sphinx
• Сегодня в Авито, “архитектура вокруг поиска” оттуда
• В сутки, прикидочно (оно постоянно растёт)…
• 40M активных объявлений, 0.4M новых
• 10M уников, 140M (пользовательских) поисков
• 1000M+ запросов собственно к движку (SphinxQL)
• В общем, есть некоторая нагрузка
Обязательный вопрос rev.2018
• Почему не Elastic?
Обязательный вопрос rev.20xx
• Почему не Elastic?
• Почему не Solr?
• Почему не Lucene?
• Почему не Xapian?
• Почему не Postgres?
• Почему не MongoDB?
• Почему не MySQL FULLTEXT?
• Почему не ht://dig?
Обязательный вопрос rev.2018
• Почему не Elastic?
• Потому что мы всё ещё умеем хорошо готовить Sphinx и C++
• Плюс исторически
• Например, Elastic не существовал :P
• Например, остальное не очень работало :P
Архитектура: как бывает в начале
• “index.php” => fts-engine => db => а всё ;)
Архитектура: как бывает в начале
• “index.php” => fts-engine => db => а всё ;)
Архитектура: на самом деле (упрощенно!)
• Функционально? Зоопарк!
• “index.php” // api-search, api-suggest, api-typos, …
// fts-engine, fts-mlranker // indexer-db, indexer-rt, db, db-replica,
// ml-labels, ml-metrics // photos-classifier, …,
// click-stream, click-aggr, …
• Названия цинично изменены, для понятности
• Технически? Зоопарк!
• golang, python, php, c++, lua, bash  // k8s, docker, bare metal
// postgres, vertica, mongodb, tarantool… // catboost, avitonet…
Архитектура: на самом деле (упрощенно!)
api-search
api-suggest
click-aggr
ml-XXX
photos-XXX
indexer-rt
ESP (click-stream)
……
indexer-db
Движок как бы “не важен”
• Движок == базовая индексация и поиск, ну окей
Движок как бы “не важен”
• Движок == базовая индексация и поиск, ну окей
• А ещё есть ML ранжирование
• А ещё есть сборка нескольких результатов (поиска)
• А ещё есть опечатки, suggest, bubbles итп лингвистика
• А ещё есть доставка данных, причем из пачки мест, плюс RT
• А ещё есть некий feedback loop (клики и их анализ)
• А ещё есть поиск по фоткам
• А ещё…
Движок таки важен, конечно
• Наверняка же будет падать!!!
• Могут быть нужны спецправки
• Точно нужна всякая интеграция
• Особо когда ML
• Особо когда “свои” текстовые сигналы
• И почему это важно?
Движок таки важен, конечно
• Наверняка же будет падать!!!
• Могут быть нужны спецправки
• Точно нужна всякая интеграция
• Особо когда ML
• Особо когда “свои” текстовые сигналы
• Spice must flow
• Фундамент должен крепко стоять – надо уметь готовить
Большие архитектурные куски
1. Поиск == и по ключевикам, и без них
2. Индексация == полная, инкременты, апдейты
3. ML ранжирование == оценки, обучение, собственно
вычисление
4. Аналитика == от A/B тестов до онлайн анализа кликов
• “Бонусы” == suggest, typos, bubbles, …
• И кстати: где живет и в чем проявляется “highload”?
pt1: поиск L*
• Внезапно, 2 уровня (или даже 2.5), а не 1
• 1 уровень: “index.php” => fts-engine [c++]
• 2 уровня: “index.php” => api-search [go] => fts-engine [c++]
• 2.5 уровня: одновременно и так и эдак
• Скорее легаси, конечно, но так (было) надо!!
• Хочется ровно 2 уровня, конечно, работаем
• Зачем так?!
pt1: поиск L2, зачем
• Затем, что 1 “пользовательский” поиск == N “базовых”
• Потому что органика, pushes, premium, итп
• Потому что всякие смешивания выдач
• Затем, что асинхронность ftw (ну и перф ещё)
• Затем, что “настройки” обязательно нужно “свои”
• Затем, что это в т.ч. настройки смешивания выдач
• Затем, что релизы/багфиксы, AB-тесты, унификация web/mobile…
pt1: поиск L2, как
• “api-search” == Искало :)
• 2.5K rps, k8s, ~10 реплик
• 10K loc, Golang
• И зачем?
• Оно делает 1..5+ (ага, пять) запросов к fts-engine (это далее L1)
• Оно “сливает” результаты по БЛ для “клиента” (web, мобилки итп)
• Что интересно
• Источники (“драйвера”) отвязаны, теоретически ;) можно менять движки
• Коллеги из напрочь других отделов успешно коммитают, Golang FTW
pt1: поиск L1, зачем/как
• “fts-engine” == Sphinx
• 13K rps, bare metal, 20-30 машин
• 150K loc, C++
• И зачем? 
• Обеспечивает “базовые” поиски, весь этот ярд
• ML ранжирование, поиск фоток итп сложный счёт, разумеется, строго тут
• Что интересно
• Тормозит (пока!) необязательно ML
pt2: индексация, что
• Режим 1, полный ребилд, “indexer-db”
• Режим 2, RT подливка, “indexer-rt”
• Режим 3, “пакетные” апдейты, “indexer-rt”
pt2: индексация, сколько
• Режим 1, полный ребилд == 40M за 15 минут, 50K rows/sec
• Режим 2, RT подливка == 0.4M новых за 24 часа, 5 rows/sec?
• Режим 3, “пакетные” апдейты
• Режим 2+3, RT подливка == 20+M за 24 часа, 200+ rows/sec
• Что интересно
• В случае “ядерной войны” очень спасает быстрый ребилд
• Где highload? Вроде бы нет, но есть целевые time budgets => и трюки!!!
pt2: индексация, как
• “indexer-db” == полный ребилд, выкатка, мониторинг, и т.п.
• 30-50+ GB total, 30+ MB/sec (***)
• ~6K+ loc, Python/PgSQL/bash/Puppet/…
• Python, генератор конфигов, мелочи для статистики, итп
• PgSQL, процедуры для индексации
• bash, всевозможные скрипты раскладки, проверки, прочих операций
• Puppet, конфигурация кластера
• Что интересно
• Brotli/zstd, uftp, rsync
pt2: индексация, как
• “indexer-rt” == RT подливка
• ~1.5K rps, мало, но это пока кратный запас…
• ~2K loc, Golang
• Postgres => pgq => “indexer-rt” => “fts-engine” (Sphinx)
pt3: ML ранжирование
• 10K+ запросов, 1M+ оценок, постоянно новые
• 15K loc, Python // Django
• Отдельный чёрный ящик => выдаёт новые модели
• Сложный чёрный ящик => Толока, оценки, метрики, обучение…
• Где highload?
• В обучении “как бы” нету; объемы нового приличные, но не шоковые
• В бою (вычисление модели) зато во весь рост; CatBoost FTW
• Что интересно
• Пробить плато “adhoc формула обойдена” заняло много времени
pt4: онлайн-аналитика
• Хотим анализировать и учитывать клики
• Хотим это делать онлайн
• Онлайн == с разумной задержкой, а не RT == немедленно
• RT даже вредно, надо фильтровать, усреднять, итп
• Где highload?
• Кликов при 140M/день поисков и 200+M/день просмотров много
• Обработать их всякими “смежными” системами небыстро, а надо
• Обработать и доставить хочется предельно быстро
• “click-aggr” == делаем спецсервис, бой близко
ptX: поиск по фоткам
• Хотим искать по фоткам!
• Оффлайн, считаем 40M+ дескрипторов для объявлений (AvitoNet)
• Онлайн, считаем 1 дескриптор для фотки и степень совпадения
• Где highload?
• Что интересно, не “у нас”, а в соседнем отделе!!!
• У нас: ну ок, лишние десятки GB индекса, фигня
• У нас: ну ок, нехитрая векторная математика, фигня
• У них: самое оно, расчет дескрипторов, тренировка нейросетки 
ptY: “бонусные” сервисы
• Хотим подправлять опечатки
• Хотим показывать suggest
• Хотим…
• В целом, хотим всячески обрабатывать текстовый запрос
• А их, напоминаю, десятки млн в сутки
• Good: запросы “на обработку” сравнительно легковесные
• Ugly: отдельные сервисы; изготовление и доставка данных…
ptZ: а ещё внутренние системы
• Например, админка 
• 600M+ объявлений за всё время эвар!!!
• Например, “легаси” код в монолите index.php
• ~25K строк (без учета всяких странных словарей)
Выводы!
• Поиск это не только лишь движок
• Даже тупо по строчкам
• Engine ~150K loc C++
• Infra ~35K loc Golang, Python, bash, Postgres, LUA, …
• Php ~25K loc PHP!
Выводы!
• Масса необходимых (c некоего масштаба) уровней прослоек
• Масса “трущихся” технологий
• Местами сильная нагрузка (а местами нет)
• Местами непростая обработка и доставка данных (а местами нет)
• Везде требования к надежности
• Почему-то $700K/сутки (по публичным данным FY 2017) немного жалко
• Поиск это не только лишь движок
вопросы?
aaksenov@
shodan@

Weitere ähnliche Inhalte

Was ist angesagt?

Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)Ontico
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Yandex
 
Цена абстракции, Андрей Аксёнов (Sphinx)
Цена абстракции, Андрей Аксёнов (Sphinx)Цена абстракции, Андрей Аксёнов (Sphinx)
Цена абстракции, Андрей Аксёнов (Sphinx)Ontico
 
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)Ontico
 
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил ТюринPG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюринpgdayrussia
 
Как устроен поиск
Как устроен поискКак устроен поиск
Как устроен поискAndrew Aksyonoff
 
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"Tanya Denisyuk
 
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Ontico
 
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?HappyDev-lite
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Ontico
 
Как устроен поиск / Андрей Аксенов (Sphinx)
Как устроен поиск / Андрей Аксенов (Sphinx)Как устроен поиск / Андрей Аксенов (Sphinx)
Как устроен поиск / Андрей Аксенов (Sphinx)Ontico
 
Учебный план для highload гуру / Андрей Аксёнов (Sphinx Technologies Inc.)
Учебный план для highload гуру / Андрей Аксёнов (Sphinx Technologies Inc.)Учебный план для highload гуру / Андрей Аксёнов (Sphinx Technologies Inc.)
Учебный план для highload гуру / Андрей Аксёнов (Sphinx Technologies Inc.)Ontico
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015Alex Chistyakov
 
Open source субд глазами обычного программиста
Open source субд глазами обычного программистаOpen source субд глазами обычного программиста
Open source субд глазами обычного программистаSlach
 
Мой Python всегда со мной!
Мой Python всегда со мной!Мой Python всегда со мной!
Мой Python всегда со мной!PyNSK
 
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)Ontico
 
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)Ontico
 
RTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwordsRTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwordsDaniel Podolsky
 

Was ist angesagt? (20)

Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
 
Цена абстракции, Андрей Аксёнов (Sphinx)
Цена абстракции, Андрей Аксёнов (Sphinx)Цена абстракции, Андрей Аксёнов (Sphinx)
Цена абстракции, Андрей Аксёнов (Sphinx)
 
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
 
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил ТюринPG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
 
Как устроен поиск
Как устроен поискКак устроен поиск
Как устроен поиск
 
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
 
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
 
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
 
Как устроен поиск / Андрей Аксенов (Sphinx)
Как устроен поиск / Андрей Аксенов (Sphinx)Как устроен поиск / Андрей Аксенов (Sphinx)
Как устроен поиск / Андрей Аксенов (Sphinx)
 
Учебный план для highload гуру / Андрей Аксёнов (Sphinx Technologies Inc.)
Учебный план для highload гуру / Андрей Аксёнов (Sphinx Technologies Inc.)Учебный план для highload гуру / Андрей Аксёнов (Sphinx Technologies Inc.)
Учебный план для highload гуру / Андрей Аксёнов (Sphinx Technologies Inc.)
 
Барнаул15
Барнаул15Барнаул15
Барнаул15
 
Devconf15
Devconf15Devconf15
Devconf15
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
 
Open source субд глазами обычного программиста
Open source субд глазами обычного программистаOpen source субд глазами обычного программиста
Open source субд глазами обычного программиста
 
Мой Python всегда со мной!
Мой Python всегда со мной!Мой Python всегда со мной!
Мой Python всегда со мной!
 
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
 
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
 
RTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwordsRTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwords
 

Ähnlich wie Andrew Aksyonoff "Архитектура вокруг поиска"

Про качественный поиск
Про качественный поискПро качественный поиск
Про качественный поискAndrew Aksyonoff
 
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014it-people
 
Андрей Карпов, Приватные байки от разработчиков анализатора кода
Андрей Карпов, Приватные байки от разработчиков анализатора кодаАндрей Карпов, Приватные байки от разработчиков анализатора кода
Андрей Карпов, Приватные байки от разработчиков анализатора кодаSergey Platonov
 
PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipesAlexey Ermakov
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 
BlackBox testing
BlackBox testingBlackBox testing
BlackBox testingbeched
 
20131112федорроманенко
20131112федорроманенко20131112федорроманенко
20131112федорроманенкоYandex
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНСit-people
 
Построение системы аналитики
Построение системы аналитикиПостроение системы аналитики
Построение системы аналитикиИлья Середа
 
DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.Alexander Titov
 
20131105 романенко
20131105 романенко20131105 романенко
20131105 романенкоYandex
 
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TKConf
 
SECON'2016. Васильков Василий, Серверное программирование сегодня
SECON'2016. Васильков Василий, Серверное программирование сегодняSECON'2016. Васильков Василий, Серверное программирование сегодня
SECON'2016. Васильков Василий, Серверное программирование сегодняSECON
 
Сверхоптимизация кода на Python
Сверхоптимизация кода на PythonСверхоптимизация кода на Python
Сверхоптимизация кода на Pythonru_Parallels
 
Сверхоптимизация кода на Python
Сверхоптимизация кода на PythonСверхоптимизация кода на Python
Сверхоптимизация кода на PythonCodeFest
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и DjangoTaras Lyapun
 
Мастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииМастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииNikolay Sivko
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструментыRoman Dvornov
 
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)Zabbix
 

Ähnlich wie Andrew Aksyonoff "Архитектура вокруг поиска" (20)

Про качественный поиск
Про качественный поискПро качественный поиск
Про качественный поиск
 
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014
 
Андрей Карпов, Приватные байки от разработчиков анализатора кода
Андрей Карпов, Приватные байки от разработчиков анализатора кодаАндрей Карпов, Приватные байки от разработчиков анализатора кода
Андрей Карпов, Приватные байки от разработчиков анализатора кода
 
PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipes
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
BlackBox testing
BlackBox testingBlackBox testing
BlackBox testing
 
20131112федорроманенко
20131112федорроманенко20131112федорроманенко
20131112федорроманенко
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
 
Построение системы аналитики
Построение системы аналитикиПостроение системы аналитики
Построение системы аналитики
 
DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.
 
20131105 романенко
20131105 романенко20131105 романенко
20131105 романенко
 
Sivko
SivkoSivko
Sivko
 
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.
 
SECON'2016. Васильков Василий, Серверное программирование сегодня
SECON'2016. Васильков Василий, Серверное программирование сегодняSECON'2016. Васильков Василий, Серверное программирование сегодня
SECON'2016. Васильков Василий, Серверное программирование сегодня
 
Сверхоптимизация кода на Python
Сверхоптимизация кода на PythonСверхоптимизация кода на Python
Сверхоптимизация кода на Python
 
Сверхоптимизация кода на Python
Сверхоптимизация кода на PythonСверхоптимизация кода на Python
Сверхоптимизация кода на Python
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и Django
 
Мастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииМастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатации
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
 
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
 

Mehr von Fwdays

"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y..."How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...Fwdays
 
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil TopchiiFwdays
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro SpodaretsFwdays
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua", Maksym KindritskyiFwdays
 
"Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl..."Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl...Fwdays
 
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T..."How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...Fwdays
 
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ..."The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...Fwdays
 
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu..."[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...Fwdays
 
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care..."[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...Fwdays
 
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"..."4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...Fwdays
 
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast..."Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...Fwdays
 
"Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others..."Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others...Fwdays
 
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?", Oleksandra MyronovaFwdays
 
"Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv..."Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv...Fwdays
 
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin..."How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...Fwdays
 

Mehr von Fwdays (20)

"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y..."How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
 
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
 
"Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl..."Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl...
 
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T..."How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
 
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ..."The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
 
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu..."[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
 
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care..."[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
 
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"..."4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
 
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast..."Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
 
"Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others..."Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others...
 
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
 
"Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv..."Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv...
 
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin..."How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
 

Andrew Aksyonoff "Архитектура вокруг поиска"

  • 1. архитектура вокруг поиска Андрей Аксенов // Авито // Киев 2018 // v.1.0
  • 2. Про что доклад • НЕ про собственно поисковой движок • Про всякое вокруг ещё, что – оказывается!! – нужно для боя • Про живую систему, со своими фокусами и глупостями • Про довольно нагруженную систему, highload • Про “архитектуру highload” как бы • (если выйдет неинтересно, вините организаторов, хихи) • (если интересно, хвалите тоже их, впрочем)
  • 3. Ты вообще кто! (И архитектура чего?) • Зовут Андрей, строю движки, включая Sphinx • Сегодня в Авито, “архитектура вокруг поиска” оттуда • В сутки, прикидочно (оно постоянно растёт)… • 40M активных объявлений, 0.4M новых • 10M уников, 140M (пользовательских) поисков • 1000M+ запросов собственно к движку (SphinxQL) • В общем, есть некоторая нагрузка
  • 5. Обязательный вопрос rev.20xx • Почему не Elastic? • Почему не Solr? • Почему не Lucene? • Почему не Xapian? • Почему не Postgres? • Почему не MongoDB? • Почему не MySQL FULLTEXT? • Почему не ht://dig?
  • 6. Обязательный вопрос rev.2018 • Почему не Elastic? • Потому что мы всё ещё умеем хорошо готовить Sphinx и C++ • Плюс исторически • Например, Elastic не существовал :P • Например, остальное не очень работало :P
  • 7. Архитектура: как бывает в начале • “index.php” => fts-engine => db => а всё ;)
  • 8. Архитектура: как бывает в начале • “index.php” => fts-engine => db => а всё ;)
  • 9. Архитектура: на самом деле (упрощенно!) • Функционально? Зоопарк! • “index.php” // api-search, api-suggest, api-typos, … // fts-engine, fts-mlranker // indexer-db, indexer-rt, db, db-replica, // ml-labels, ml-metrics // photos-classifier, …, // click-stream, click-aggr, … • Названия цинично изменены, для понятности • Технически? Зоопарк! • golang, python, php, c++, lua, bash  // k8s, docker, bare metal // postgres, vertica, mongodb, tarantool… // catboost, avitonet…
  • 10. Архитектура: на самом деле (упрощенно!) api-search api-suggest click-aggr ml-XXX photos-XXX indexer-rt ESP (click-stream) …… indexer-db
  • 11. Движок как бы “не важен” • Движок == базовая индексация и поиск, ну окей
  • 12. Движок как бы “не важен” • Движок == базовая индексация и поиск, ну окей • А ещё есть ML ранжирование • А ещё есть сборка нескольких результатов (поиска) • А ещё есть опечатки, suggest, bubbles итп лингвистика • А ещё есть доставка данных, причем из пачки мест, плюс RT • А ещё есть некий feedback loop (клики и их анализ) • А ещё есть поиск по фоткам • А ещё…
  • 13. Движок таки важен, конечно • Наверняка же будет падать!!! • Могут быть нужны спецправки • Точно нужна всякая интеграция • Особо когда ML • Особо когда “свои” текстовые сигналы • И почему это важно?
  • 14. Движок таки важен, конечно • Наверняка же будет падать!!! • Могут быть нужны спецправки • Точно нужна всякая интеграция • Особо когда ML • Особо когда “свои” текстовые сигналы • Spice must flow • Фундамент должен крепко стоять – надо уметь готовить
  • 15. Большие архитектурные куски 1. Поиск == и по ключевикам, и без них 2. Индексация == полная, инкременты, апдейты 3. ML ранжирование == оценки, обучение, собственно вычисление 4. Аналитика == от A/B тестов до онлайн анализа кликов • “Бонусы” == suggest, typos, bubbles, … • И кстати: где живет и в чем проявляется “highload”?
  • 16. pt1: поиск L* • Внезапно, 2 уровня (или даже 2.5), а не 1 • 1 уровень: “index.php” => fts-engine [c++] • 2 уровня: “index.php” => api-search [go] => fts-engine [c++] • 2.5 уровня: одновременно и так и эдак • Скорее легаси, конечно, но так (было) надо!! • Хочется ровно 2 уровня, конечно, работаем • Зачем так?!
  • 17. pt1: поиск L2, зачем • Затем, что 1 “пользовательский” поиск == N “базовых” • Потому что органика, pushes, premium, итп • Потому что всякие смешивания выдач • Затем, что асинхронность ftw (ну и перф ещё) • Затем, что “настройки” обязательно нужно “свои” • Затем, что это в т.ч. настройки смешивания выдач • Затем, что релизы/багфиксы, AB-тесты, унификация web/mobile…
  • 18. pt1: поиск L2, как • “api-search” == Искало :) • 2.5K rps, k8s, ~10 реплик • 10K loc, Golang • И зачем? • Оно делает 1..5+ (ага, пять) запросов к fts-engine (это далее L1) • Оно “сливает” результаты по БЛ для “клиента” (web, мобилки итп) • Что интересно • Источники (“драйвера”) отвязаны, теоретически ;) можно менять движки • Коллеги из напрочь других отделов успешно коммитают, Golang FTW
  • 19. pt1: поиск L1, зачем/как • “fts-engine” == Sphinx • 13K rps, bare metal, 20-30 машин • 150K loc, C++ • И зачем?  • Обеспечивает “базовые” поиски, весь этот ярд • ML ранжирование, поиск фоток итп сложный счёт, разумеется, строго тут • Что интересно • Тормозит (пока!) необязательно ML
  • 20. pt2: индексация, что • Режим 1, полный ребилд, “indexer-db” • Режим 2, RT подливка, “indexer-rt” • Режим 3, “пакетные” апдейты, “indexer-rt”
  • 21. pt2: индексация, сколько • Режим 1, полный ребилд == 40M за 15 минут, 50K rows/sec • Режим 2, RT подливка == 0.4M новых за 24 часа, 5 rows/sec? • Режим 3, “пакетные” апдейты • Режим 2+3, RT подливка == 20+M за 24 часа, 200+ rows/sec • Что интересно • В случае “ядерной войны” очень спасает быстрый ребилд • Где highload? Вроде бы нет, но есть целевые time budgets => и трюки!!!
  • 22. pt2: индексация, как • “indexer-db” == полный ребилд, выкатка, мониторинг, и т.п. • 30-50+ GB total, 30+ MB/sec (***) • ~6K+ loc, Python/PgSQL/bash/Puppet/… • Python, генератор конфигов, мелочи для статистики, итп • PgSQL, процедуры для индексации • bash, всевозможные скрипты раскладки, проверки, прочих операций • Puppet, конфигурация кластера • Что интересно • Brotli/zstd, uftp, rsync
  • 23. pt2: индексация, как • “indexer-rt” == RT подливка • ~1.5K rps, мало, но это пока кратный запас… • ~2K loc, Golang • Postgres => pgq => “indexer-rt” => “fts-engine” (Sphinx)
  • 24. pt3: ML ранжирование • 10K+ запросов, 1M+ оценок, постоянно новые • 15K loc, Python // Django • Отдельный чёрный ящик => выдаёт новые модели • Сложный чёрный ящик => Толока, оценки, метрики, обучение… • Где highload? • В обучении “как бы” нету; объемы нового приличные, но не шоковые • В бою (вычисление модели) зато во весь рост; CatBoost FTW • Что интересно • Пробить плато “adhoc формула обойдена” заняло много времени
  • 25. pt4: онлайн-аналитика • Хотим анализировать и учитывать клики • Хотим это делать онлайн • Онлайн == с разумной задержкой, а не RT == немедленно • RT даже вредно, надо фильтровать, усреднять, итп • Где highload? • Кликов при 140M/день поисков и 200+M/день просмотров много • Обработать их всякими “смежными” системами небыстро, а надо • Обработать и доставить хочется предельно быстро • “click-aggr” == делаем спецсервис, бой близко
  • 26. ptX: поиск по фоткам • Хотим искать по фоткам! • Оффлайн, считаем 40M+ дескрипторов для объявлений (AvitoNet) • Онлайн, считаем 1 дескриптор для фотки и степень совпадения • Где highload? • Что интересно, не “у нас”, а в соседнем отделе!!! • У нас: ну ок, лишние десятки GB индекса, фигня • У нас: ну ок, нехитрая векторная математика, фигня • У них: самое оно, расчет дескрипторов, тренировка нейросетки 
  • 27. ptY: “бонусные” сервисы • Хотим подправлять опечатки • Хотим показывать suggest • Хотим… • В целом, хотим всячески обрабатывать текстовый запрос • А их, напоминаю, десятки млн в сутки • Good: запросы “на обработку” сравнительно легковесные • Ugly: отдельные сервисы; изготовление и доставка данных…
  • 28. ptZ: а ещё внутренние системы • Например, админка  • 600M+ объявлений за всё время эвар!!! • Например, “легаси” код в монолите index.php • ~25K строк (без учета всяких странных словарей)
  • 29. Выводы! • Поиск это не только лишь движок • Даже тупо по строчкам • Engine ~150K loc C++ • Infra ~35K loc Golang, Python, bash, Postgres, LUA, … • Php ~25K loc PHP!
  • 30. Выводы! • Масса необходимых (c некоего масштаба) уровней прослоек • Масса “трущихся” технологий • Местами сильная нагрузка (а местами нет) • Местами непростая обработка и доставка данных (а местами нет) • Везде требования к надежности • Почему-то $700K/сутки (по публичным данным FY 2017) немного жалко • Поиск это не только лишь движок