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

996 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
996
On SlideShare
0
From Embeds
0
Number of Embeds
116
Actions
Shares
0
Downloads
12
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • 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. Спасибо за внимание ! Вопросы ?

    ×