2. Sphinx кластер для проекта BoardReader.COM
• Поисковый сервис по форумам, социальным сетям и медиа
данным
• Более 30 серверов
• Более 15 млрд. проиндексированных документов
• Более 5 TB данных в индексах (постов форумов и блогов,
новостей, изображений, ссылок)
• Более 10 млн. запросов в сутки, в пике 500 тыс. запросов в час
3. Масштабируемость Sphinx кластера
• Scale Up
Распределение данных по нескольким инстансам searchd
(нодам) на одном сервере. Апгрейд сервера
• Scale Out
Распределение данных по нескольким серверам.
Добавление новых серверов
• До 2^64 документов на кластер
4. Дистрибутивные индексы Sphinx
• Инструмент масштабирования кластера
• Распределение запросов по нескольким индексам на локальных и
удаленных нодах
• Мерж результатов, удаление дубликатов
• Инкрементация данных
7. Конфигурация Sphinx кластера
• Запрос к кластеру транслируется через Sphinx forwarder к
конечным нодам
• Утилизация ресурсов многодисковых и многоядерных серверов
через настройку многопоточности searchd или нескольких нод на
одном сервере (Sphinx nodes)
• 4 ступени инкрементации данных – Full, 3 Months, Week, Inc и
соотв. им конечные индексы
8. Конфигурация Sphinx кластера
• Схема распределения данных кластера - привязка индексируемых
данных к списку серверов и агентов с параметрами соединения и
конечными индексами
• Сохранение состояния индексации для стыковки между
ступенями инкрементации данных
• Интерпретируемый конфигурационный файл
• Обновление конфигурационных данных
9. Обновление и инкрементация данных
• Инкрементация данных каждые 5мин, сутки, неделю, месяц для
соотв. ступеней Inc , Week, 3 Months, Full
• Запас места на диске для переиндексации до 50-70%
• Перезаливка существующих данных, killlist's
• Изменение атрибутов записей в индексах
• Механизм очередей
• Режим обслуживания БД MySQL с индексируемыми данными
• Мержинг индексов вместо переиндексации
10. Проблемы производительности
• Ухудшение производительности отдельной ноды сказывается на
всем кластере
• Нехватка пропускной способности дисков, ресурсов памяти –
активно используется Swap, CPU (встречается реже)
13. Оптимизация конфигурации Sphinx кластера
• Цель – получить лучшую производительность кластера на текущих
ресурсах
• Уменьшение затрат на процесс индексации и сторонние задачи
(все, что кроме searchd)
• Выбор оптимального количества ступеней инкрементации данных
• Оптимизация размера и количества атрибутов
• Перебалансировка данных
14. Оптимизация Sphinx запросов
• Цель – выполнить Sphinx запрос меньшими ресурсами
• Multi-queries
• 10 web запросов – 1 Sphinx запрос
• Автоматизация переключения запроса на индекс меньшего
размера или на нужную ноду
15. Когда исчерпаны текущие ресурсы
Добавляем новые серверы, делаем балансировку - если растет кол-
во данных или используем межнодовую репликацию - если растет
кол-во запросов
16. Балансировка Sphinx кластера
• Причина – ухудшение производительности
• Ухудшение производительности отдельных нод кластера
• Добавление новых серверов в кластер
• Оценка объема индексируемых данных и перерасчет их
распределения в кластере
• Учет неравнозначности ресурсов отдельных серверов
• Переиндексация индексов, затрагиваемых перебалансировкой
• Целостность процесса балансировки
17. Дополнительные меры
• Кеширование
• Резервное копирование индексов Sphinx
• Логи производительности и ошибок
• Мониторинг, система оповещения - nagios, Zabbix
• Автоматизация операций администрирования
• Тестирование изменений конфигурации кластера
18. Перспективные Sphinx фитчи
• RT индексы
• Изменение атрибутов записей в индексах по условию
• MySql – Sphinx репликация – в работе
• Встроенная в Sphinx межнодовая репликация – в планах
19. Поздравляем Андрея Аксенова и его команду с
выходом книги - "Introduction to Search with Sphinx" в
издательстве O'Reilly!
20. Спасибо за внимание!
Вопросы?
vkrukov@ivinco.com
www.ivinco.com/services/
www.ivinco.com/software/
www.ivinco.com/blog/