Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Sphinx для высоко-нагруженных и масштабируемых проектов (Вячеслав Крюков)

1,019 views

Published on

  • Be the first to comment

Sphinx для высоко-нагруженных и масштабируемых проектов (Вячеслав Крюков)

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

×