sphinx для высоко-нагруженных и масштабируемых проектов,...
DESCRIPTION
TRANSCRIPT
![Page 2: Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков](https://reader034.vdocuments.mx/reader034/viewer/2022051609/54676bcfaf79594f578b687f/html5/thumbnails/2.jpg)
Кратко о Sphinx
http://sphinxsearch.com/docs/current.html#intro
![Page 3: Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков](https://reader034.vdocuments.mx/reader034/viewer/2022051609/54676bcfaf79594f578b687f/html5/thumbnails/3.jpg)
Кратко о проекте BoardReader.COM
• Поиск по форумам и социальным сетям• >2 млн web запросов ежедневно, пик до 300 тыс/час• >10 млрд проиндексированных документов• >20 MySQL серверов, >15Tb сжатых данных• Sphinx кластер
• >20 серверов • суммарный размер индексов >3Tb • >7 млн Sphinx запросов ежедневно
![Page 4: Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков](https://reader034.vdocuments.mx/reader034/viewer/2022051609/54676bcfaf79594f578b687f/html5/thumbnails/4.jpg)
Требования к проекту● Производительность● Надежность● Масштабируемость● Доступность● Легкость в обслуживании
![Page 5: Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков](https://reader034.vdocuments.mx/reader034/viewer/2022051609/54676bcfaf79594f578b687f/html5/thumbnails/5.jpg)
Front-end
• Общедоступный поиск BoardReader.COM• Агрегированные данные по сайтам, форумам,
тредам, топикам• Коммерческий API к поиску по форумам, блогам,
микроблогам, новостям, картинкам, ссылкам • Система мониторинга и управления постами• Админки
![Page 6: Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков](https://reader034.vdocuments.mx/reader034/viewer/2022051609/54676bcfaf79594f578b687f/html5/thumbnails/6.jpg)
Back-end
![Page 7: Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков](https://reader034.vdocuments.mx/reader034/viewer/2022051609/54676bcfaf79594f578b687f/html5/thumbnails/7.jpg)
Масштабируемость Sphinx кластера
• Scale Up– добавляем памяти, диски, заменяем текущие на более
мощные сервера• Scale Out
– MySQL — шардинг, добавляем новые DB сервера– Sphinx - дистрибутивные индексы, добавляем новые SE
сервера, до 2^64 документов
![Page 8: Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков](https://reader034.vdocuments.mx/reader034/viewer/2022051609/54676bcfaf79594f578b687f/html5/thumbnails/8.jpg)
Дистрибутивные индексы Sphinx
• Запросы к нескольким индексам текущего и др инстансов searchd• Обращения к инстансам searchd на локальном и
удаленном серверах• Мерж результатов, удаление дубликатов• Рапределение ресурсов нескольких серверов• Инкрементация данных
![Page 9: Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков](https://reader034.vdocuments.mx/reader034/viewer/2022051609/54676bcfaf79594f578b687f/html5/thumbnails/9.jpg)
Конфигурация Sphinx кластера
![Page 10: Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков](https://reader034.vdocuments.mx/reader034/viewer/2022051609/54676bcfaf79594f578b687f/html5/thumbnails/10.jpg)
Конфигурация Sphinx SE
• 4 инстанса searchd на одном сервере • 4 конфигурационных файла для node{1,2,3,4}, в каждом
файле прописан свой собственный searchd• множество типов индексов по назначению — форумные
посты, блог посты, новости, картинки, ссылки• три типа индексов по дате заливки - 'big','3months','inc'
![Page 11: Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков](https://reader034.vdocuments.mx/reader034/viewer/2022051609/54676bcfaf79594f578b687f/html5/thumbnails/11.jpg)
Конфигурация Sphinx SE• 'big','3months','inc' sources – MySQL источники данных• 'big','3months','inc' indexes – набор индексов• 'big','3months' sources сохраняют состояние индексации во
вспомогательные таблицы, данные в индексах не пересекаются
![Page 12: Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков](https://reader034.vdocuments.mx/reader034/viewer/2022051609/54676bcfaf79594f578b687f/html5/thumbnails/12.jpg)
Конфигурация Sphinx SE• индексы со всех нод заданного Sphinx SE объединяются в
спец дистрибутивном на node1:• нужно для последующей передачи на Sphinx forwarder• big_se01 = big_node{1,2,3,4} + 3months_node{1,2,3,4}+
inc_node{1,2,3,4}• 3months_se01 = 3months_node{1,2,3,4} +
inc_node{1,2,3,4}
![Page 13: Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков](https://reader034.vdocuments.mx/reader034/viewer/2022051609/54676bcfaf79594f578b687f/html5/thumbnails/13.jpg)
Конфигурация Sphinx forwarder• Индексы объединяются в дистрибутивном со всех Sphinx SE
отдельно для каждого типа по дате заливки, кроме 'inc' и каждого типа по назначению.
![Page 14: Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков](https://reader034.vdocuments.mx/reader034/viewer/2022051609/54676bcfaf79594f578b687f/html5/thumbnails/14.jpg)
Оценка производительности Sphinx кластераavg(t), sec 0.16std(t), sec 1.01t < 0.1 sec 85%t < 0.3 sec 91%t < 0.5 sec 93%t < 0.7 sec 95%t < 1 sec 96%t < 3 sec 98%t < 5 sec 99%
requests: 7881995t — время выполнения Sphinx запроса
Так же подобные отчеты строятся для отдельных видов web запросов
![Page 15: Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков](https://reader034.vdocuments.mx/reader034/viewer/2022051609/54676bcfaf79594f578b687f/html5/thumbnails/15.jpg)
Типичные проблемы● Проблема в одном месте - проблема с
производительностью системы в целом● Нехватка пропускной способности дисков ● Нехватка ресурсов памяти – активно используется Swap● Нехватка ресурса CPU (встречается реже)
![Page 16: Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков](https://reader034.vdocuments.mx/reader034/viewer/2022051609/54676bcfaf79594f578b687f/html5/thumbnails/16.jpg)
Оптимизация схемы распределения данных в Sphinx кластере
• Цель - эффективность использования ресурсов• Один инстанс searchd на Sphinx SE + многопоточность,
общий файл для всех node{1,2,3,4}• Много индексов — нужна больше пропускная способность
дисков на чтение• Оптимизация размера атрибутов• Перебалансировка данных
![Page 17: Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков](https://reader034.vdocuments.mx/reader034/viewer/2022051609/54676bcfaf79594f578b687f/html5/thumbnails/17.jpg)
Обновление данных● до 100Гб новых данных в формате xml каждый день● Обновление инрементального индекса - каждые 5 минут● Обновление 3-х месячного индекса - раз в сутки● Обновление большого индекса - раз в месяц, данные за 2
года
![Page 18: Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков](https://reader034.vdocuments.mx/reader034/viewer/2022051609/54676bcfaf79594f578b687f/html5/thumbnails/18.jpg)
Обновление данных
• Перезаливка существующих данных• Система мониторинга и управления постами
• Изменение некоторых атрибутов постов, в том числе для пометки удаленных, скрытых, адултных и спамных постов
• Добавление задания как из web интерфейса, так и из сторонних скриптов
• Механизм очередей
![Page 19: Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков](https://reader034.vdocuments.mx/reader034/viewer/2022051609/54676bcfaf79594f578b687f/html5/thumbnails/19.jpg)
Обновление данных● indexer отнимает ресурсы по памяти и диску● Запас места на диске для переиндексации до 50-70%● Режим обслуживания БД MySQL● Вместо переиндексации можно использовать мержинг
индексов
![Page 20: Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков](https://reader034.vdocuments.mx/reader034/viewer/2022051609/54676bcfaf79594f578b687f/html5/thumbnails/20.jpg)
Оптимизация Sphinx запросов● Multi-queries● 10 web запросов – 1 Sphinx запрос● Переключение запроса на индекс меньшего размера или на
индексы конечных нод
![Page 21: Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков](https://reader034.vdocuments.mx/reader034/viewer/2022051609/54676bcfaf79594f578b687f/html5/thumbnails/21.jpg)
Балансировка данных Sphinx кластера● Анализ лога производительности Sphinx запросов● Оценка и перерасчет распределения данных в кластере● Учет неравнозначности ресурсов отдельных серверов● Переиндексация индексов, затрагиваемых
перебалансировкой● Вместо ротации через indexer - одномоментная замена
индексов
![Page 22: Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков](https://reader034.vdocuments.mx/reader034/viewer/2022051609/54676bcfaf79594f578b687f/html5/thumbnails/22.jpg)
Меры повышения производительности и надежности
● Кеширование – HTTP, Memcache, файловый кеш● Логи производительности и ошибок● Мониторинг, система оповещения - nagios, Zabbix● Автоматизация операций администрирования● Тестирование изменений конфигурации кластера
![Page 23: Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков](https://reader034.vdocuments.mx/reader034/viewer/2022051609/54676bcfaf79594f578b687f/html5/thumbnails/23.jpg)
Спасибо за внимание !Вопросы ?