73
RT индексы в поиске Avito Вячеслав Крюков, Avito

Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

  • Upload
    ontico

  • View
    195

  • Download
    10

Embed Size (px)

Citation preview

Page 1: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

RT индексы в поиске Avito

Вячеслав Крюков, Avito

Page 2: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск в Avito

● Активные объявления

● Контекстные объявления

● BackOffice

● В докладе про поиск активных объявлений на RT (Real Time) индексах

Page 3: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «до» внедрения RT индексов

Page 4: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «до» внедрения RT индексов

● Активное объявление появилось в Master базе

Page 5: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «до» внедрения RT индексов

● Через логическую репликацию оно стало доступно на сервере, где происходит индексация

Page 6: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «до» внедрения RT индексов

● Каждые 5-8 мин строятся Plain индексы и с этой задержкой наше объявление проиндексировано

● В это время репликация на паузе

Page 7: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «до» внедрения RT индексов

● Plain индексы раздаются по udp на поисковые сервера, битые индексы дораздаются через rsync

Page 8: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «до» внедрения RT индексов

● Ротация Plain индексов делает доступным в поиске наше объявление

Page 9: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «до» внедрения RT индексов

● Пользователь делает поисковый запрос на сайте или в мобильном приложении через интернет

Page 10: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «до» внедрения RT индексов

● Его принимает однин из бэкендов

Page 11: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «до» внедрения RT индексов

● HAProxy бэкенда отправляет SphinxQL запрос на демон Searchd и он выполняется на индексе одной из категории

Page 12: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «до» внедрения RT индексов

● Или выполняется распределенный запрос по индексам всех категорий

Page 13: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Ожидания от внедрения RT индексов

● Мгновенная доступность нового объявления в поиске

● Надежность

● Масштабируемсть

● Обслуживать высокую поисковую нагрузку (17000 RPS в пике)

● Сотни изменений в секунду

● Комбинированное решение, с тем что было «до»

● Унификация настроек

Page 14: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Чем отличается поиск на RT индексах от Plain?

● Indexer и Main+Delta схема внутри демона Searchd

● Indexer не нужен

● Запросы на изменения данных идут к Searchd

● Ram + Disk чанки

● Внутренние Kill листы

Page 15: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Изменения данных в RT индексах

● INSERT/REPLACE

● UPDATE

● DELETE

Page 16: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «после» внедрения RT индексов

Page 17: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «после» внедрения RT индексов

● Активное объявление появилось в Master базе

Page 18: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «после» внедрения RT индексов

● Через логическую репликацию оно стало доступно на сервере, где происходит индексация

Page 19: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «после» внедрения RT индексов

● По факту новых данных в реплике генерируется событие с Id объявления в очереди PGQrt

Page 20: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «после» внедрения RT индексов

● Событие считывается консьюмером RT Indexer

Page 21: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «после» внедрения RT индексов

● Если у RT Indexer установлен флаг active, то он делает SELECT из реплики данных по Id объявления в событии

Page 22: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «после» внедрения RT индексов

● Если данные найдены, то RT Indexer выполнит запрос REPLACE к демону Searchd

● Cоответствующие изменения отображается в RT индексах

Page 23: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «после» внедрения RT индексов

● Если данные не найдены, то делается запрос DELETE

Page 24: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «после» внедрения RT индексов

● RT Indexer отмечает событие в очереди обработанным

● Если при поступлении события флага active не было, то эта отметка делается сразу и никакой др. работы не делается

Page 25: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Отставание «До» и «после» выкатки RT индексов

Page 26: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Количество объявлений в общем индексе (Distr Index)

Page 27: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Количество изменяемых объявлений во времени

Page 28: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «после» внедрения RT индексов

● Зачем две очереди PGQm и PGQrt?

Page 29: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Зачем две очереди PGQm и PGQrt?

● Очередь PGQm нужна для Londiste репликации

● Очередь PGQrt влючена последовательно

● Данные есть в реплике - операция REPLACE

● Данных нет в реплике - операция DELETE

● Гонки данных не возможны

● Возможен оверхед по уже выполненной операции

Page 30: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «после» внедрения RT индексов

● Зачем нужны Plain индексы?

Page 31: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Зачем нужны Plain индексы?

● Нельзя бесконечно накапливать изменения в RT индексах

● Нужно сбрасывать сотояние RT индексов — делать rebuild

● Plain индексы играют промежуточную роль

● Можем откатиться к решению «до», если RT поломается

Page 32: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «после» внедрения RT индексов

● Rebuild RT индексов

● Репликация на паузе

● Переиндексация Plain индексов

Page 33: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «после» внедрения RT индексов

● Rebuild RT индексов

● Репликация на паузе

● Раздача Plain индексов

Page 34: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «после» внедрения RT индексов

● Rebuild RT индексов

● Репликация на паузе

● Принудительная пауза, для холостой прокрутки PGQrt

Page 35: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «после» внедрения RT индексов

● Rebuild RT индексов

● Репликация на паузе

● RELOAD Plain индексов

Page 36: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «после» внедрения RT индексов

● Rebuild RT индексов

● Репликация на паузе

● ATTACH WITH TRUNCATE Plain индексов в RT

Page 37: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «после» внедрения RT индексов

● Rebuild RT индексов закончен

● Репликация снята с паузы

● Установлен флаг active

● RT indexer обрабатывает очередь PGQrt

Page 38: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Rebuild RT индексов

Page 39: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Изменение размера Ram чанка

Page 40: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «после» внедрения RT индексов

● Поисковые запросы через бэкененды и HAProxy поступают на демон Searchd и он их отрабатывает на RT индексах

Page 41: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поисковая нагрузка

Page 42: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «после» внедрения RT индексов

● Зачем нужен Failover ?

Page 43: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «после» внедрения RT индексов

● Следит за отставанием очереди PGQrt

Page 44: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «после» внедрения RT индексов

● Следит за отставанием и кол-ом объявлений в RT индексах

Page 45: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «после» внедрения RT индексов

● Следит за окончанием периода активности RT indexer

● Следит за перезапуском или отсутствием процесса RTIndexer

Page 46: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Поиск «после» внедрения RT индексов

● И устанавливает флаг rebuild если есть нарушения

● После этого начинается Rebuild RT индексов

Page 47: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Что еще делает Failover?

● Перезапуск RTIndexer при зависании

● Нотификация в Slack

Page 48: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Неконтролируемое отставание очереди PGQrt

Page 49: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Контролируемое отставание очереди PGQrt

Page 50: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

RT Indexer

● Python демон с подключенной библиотекой на Go

Page 51: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

RT Indexer

● Если не установлен флаг active, RT Indexer прогоняет очередь PGQrt вхолостую, без какой-либо работы

Page 52: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

RT Indexer

● В RT Indexer можно выделить три основные сущности оформленные в виде Go рутин и соединенные последовательно через каналы в Pipeline

Page 53: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

RT Indexer

● Сортирует Id объявлений в пачки по категориям, возвращает канал, для передачи таких пачек

Page 54: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

RT Indexer

● Передает отсортированные пачки Id в этот канал по мере поступления событий из PGQrt

Page 55: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

RT Indexer

● Слушает канал с отсортированными по категориям пачками Id объявлений

● Извлекает для них данные объявлений из реплики исползуя конфиг для Plain индексов

Page 56: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

RT Indexer

● Создает два канала с данными объявлений по категориям для запросов REPLACE и id удаляемых объявлений для запросов DELETE

● Если данные для Id объявления не найдены, то оно считается удаляемым

Page 57: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

RT Indexer

● Передает в эти каналы данные по мере поступления пачек Id объявлений

Page 58: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

RT Indexer

● Слушает канал с данными объявлений по категориям для запросов REPLACE

● Слушает канал с Id объявлений для удаления

● Формирует и выполняет запросы REPLACE и DELETE

Page 59: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

RT Indexer

● Выполняются запросы REPLACE и DELETE для категории 1

Page 60: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

RT Indexer

● Выполняются запросы REPLACE и DELETE для категории 2

Page 61: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

RT Indexer

● Выполняются запросы REPLACE и DELETE для категории Nc

Page 62: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

RT Indexer

● В RT Indexer обрабатываются абсолютно все ошибки, падения не допускаются

Page 63: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

RT Indexer

● В RT Indexer отмечаются обработанными абсолютно все события

Page 64: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

RT Indexer

● Ошибки пишутся в общий для всех канал ошибок

● Канал ошибок слушает специальная Go рутина

Page 65: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

RT Indexer

● Если встречается критичная ошибка, то выставляется состояние rebuild

● Аварийного завершения не происходит

Page 66: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Критичные ошибки в RT Indexer

● Возникновение ошибок выполнения запросов

● Появление нового поискового сервера

● Ошибки конфигурации

Page 67: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Настройка производительности

● Медленные запросы REPLACE/DELETE — отставание очереди PGQrt

● rt_mem_limit срабатывает поиндексно

● Необходим некоторый избыток rt_mem_limit

Page 68: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

0.95 время выполнения SELECT

Page 69: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Максимальное время выполнение REPLACE

Page 70: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Отставание

Page 71: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Полное спокойствие в пик трафика

Page 72: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Что реально получили «после» внедрения RT индексов

● Попадание нового объявление в поиск с 10 сек отставанием

● Как и прежде держит высокую нагрузку

● Не вычитываем повторно данные

● Уменьшили трафик в сети

● Гармонично вписали решение c RT индексами в ранее существующую систему

● Получили надежную систему

Page 73: Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав Крюков (Avito)

Спасибо, вопросы?