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.

.NET Fest 2018. Андрей Винда. Построение поисковой системы: от тернии к звездам

12 views

Published on

В докладе будут рассмотрены принципы построения поисковых систем. Будет произведена сравнительная характеристика различных поисковых движков, этапы построения поисковой системы на базе ElasticSearch. Также будет рассмотрена индексация контента и возникающие при этом попутные тонкости и "подводные камни".
Доклад будет интересен, в первую очередь, разработчикам, пишущим поисковые системы в режиме реального времени, а также решении таких задач, как DataRetention и постоянная оптимизация скорости поиска.

Published in: Education
  • Be the first to comment

  • Be the first to like this

.NET Fest 2018. Андрей Винда. Построение поисковой системы: от тернии к звездам

  1. 1. Построение поисковой системы: от терния к звездам t WITH PASSION TO TECHNOLOGY Андрей Винда .NET CONFERENCE #1 IN UKRAINE, KYIV 2018
  2. 2. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Бизнес
  3. 3. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Бизнес
  4. 4. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Поисковая система Поисковый запрос Поисковый движок Результаты поиска
  5. 5. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Типы поисковых систем Использующие поисковые роботы Управляемые человеком Гибридные Мета-системы
  6. 6. Тема доклада Тема доклада Тема доклада .NET LEVEL UP Поисковая система: Архитектура .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Сбор и хранение документов Наполнение поискового индекса Графический интерфейс
  7. 7. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Алгоритм обработки запроса Внешний поисковый запрос Внутренний поисковый запрос Построение запроса по документам Выполнение запроса Возврат результатов
  8. 8. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Исходное поисковое решение
  9. 9. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Исходное поисковое решение Полнотекстовый поиск крайне медлителен Агрегация на лету Поиск при указании больших периодов (> 6 месяцев) JOINS Скорость поиска низкая Масштабируемость
  10. 10. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Бизнес требования Функциональные Полнотекстовый поиск Поиск на вхождение фразы по одному из нескольких фильтров Нефункциональные Масштабируемость Поиск должен занимать не более 3 секунд Возможность указания больших периодов при поиске Ограничения Open-source поисковый движок On-Premise
  11. 11. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Выбор поискового движка Параметры выбора Варианты движков
  12. 12. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Параметры выбора Скорость индексирования Скорость переиндексации Размер базы и скорость поиска Платформа и язык Поддержка разных языков Поддержка дополнительных типов полей Поддерживаем ые API Встроенные механизмы ранжирования и сортировки
  13. 13. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Список поисковых систем
  14. 14. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Варианты движков ElasticSearch Почти мгновенная индексация Полнотекстовый поиск Масштабируемость Хранение данных Визуализация данных Аналитика безопасности Solr Граненый поиск (FACETED SEARCH) Полнотекстовый поиск Подсветка, подсказки в результатах Импорт файлов Визуализация данных Sphinx Быстрый и мощный Граненый поиск (FACETED SEARCH) Высокая масштабируемость Полнотекстовый поиск Подсветка, подсказки в результатах
  15. 15. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Проверка концепции (POC)
  16. 16. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Сравнительная таблица Elasticsearch Solr Sphinx Изменение схемы данных на лету + + только при обратной совместимости - Анализаторы + - - Поддержка API + + - Поиск при частых изменениях данных Оптимален для часто изменяемых данных Лучше для статических данных
  17. 17. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 ElasticSearch Масштабируемость и отказоустойчивость Оптимизация для построения запросов Простые запросы без JOIN Отсутствие схемы RESTful api Основан на Lucene
  18. 18. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 ElasticSearch: Структура
  19. 19. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Первая попытка
  20. 20. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Визуальный интерфейс
  21. 21. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Визуальный интерфейс
  22. 22. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Визуальный интерфейс
  23. 23. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Визуальный интерфейс
  24. 24. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Параметры поисковой системы Один индекс 130+ полей 5 условных «типов» данных Денормализирова нные данные Индексация 5 потоков за 3 минуты Изменение данных каждые 15 секунд Авто шардир ование STG и PROD на одном кластере
  25. 25. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Конфигурация кластера Ноды: 3 master + 3 data RAM: 8 Gb HDD: 100 Gb CPU: 4 Core Шарды = 5 + 5 + 5
  26. 26. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Поток данных База данных Планировщик задач Импорт / Обновление Ручная переиндексация ElasticSearch КомандаДанные
  27. 27. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Планировщик задач ASP.Net Core MVC Rabbit MQ Quartz.net Elasticsearch (Nest) Dapper
  28. 28. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Планировщик задач
  29. 29. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Импорт / Изменение данных Получить измененные / новые данные Разбить данные на пакеты Отправка пакета изменений в ElasticSearch
  30. 30. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 К запуску готовы!
  31. 31. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 2 месяца в ПРОДе и Out of Memory exception
  32. 32. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Разбор полетов
  33. 33. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Lucene: Сегменты Сегмент – неизменяе мая единица Операции: добавление и удаление Удаленные сегменты не участвуют в поиске «Слияние сегментов»
  34. 34. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Ошибки Огромный размер индекса Поиск сразу по всем шардам Частые обновления данных
  35. 35. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 ElasticSearch: Типы отношений между объектами Денормали зированные Вложенные Родитель – Ребенок На уровне приложения
  36. 36. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Родитель-Ребенок Каждый тип – это документ Изменение одного типа не влияет на весь индекс Указание типов при поиске Параллельная индексация типов Частые изменения - меньший размер удаленных сегментов
  37. 37. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Структура поискового индекса Player Data General Lifetime Sensitive Personalization
  38. 38. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Поисковый запрос Query Filter Сортировка по PlayerID Score не нужен
  39. 39. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Шардирование 1 2 3 4 Приложение Шарды Осуществлять поиск только на нужных шардах Слияние результатов займет меньше времени Уменьшение трафика при формировании ответа
  40. 40. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Игрок меняет оператора
  41. 41. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Удаленные сегменты
  42. 42. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Постоянный поток данных База данных Планировщик задач Импорт / Обновление Оптимизация сегментов Удаление устаревших данных Ручная переиндексация ElasticSearch КомандаДанные
  43. 43. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Импорт / Изменение данных Получить измененные / новые данные Разбить данные на пакеты Отправка пакета изменений в ElasticSearch Подтверждение / Отмена пакета Отправка максимальной обработанной даты в исполнитель задач
  44. 44. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Нужно ли обновлять данные?
  45. 45. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Получение очередной порции данных
  46. 46. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Мониторинг
  47. 47. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Мониторинг: Уровни Уровень сервера Уровень сервиса Уровень кластера Уровень ноды
  48. 48. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Мониторинг: Сервер Загрузка процессорных ядер Использование памяти Пинг до сервера и время отклика I/O по дисковой подсистеме Остаток свободного места на дисках
  49. 49. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Мониторинг: Сервис Количество запущенных процессов сервиса elasticsearch Используемая сервисом память Пинг до порта приложения
  50. 50. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Мониторинг: Кластер Статус Количество нод в кластере Количество не назначенных шард
  51. 51. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Мониторинг: Нода Память Выделенная Используемая Используемая в % от выделенной Файловая система Всего Свободно Доступно Пулы очередей Выполненные Активные Отказанные
  52. 52. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Конфигурация кластера Ноды: 3 master + 3 data RAM: 32 Gb HDD: 100 Gb CPU: 4 Core Шарды = 6 + 6
  53. 53. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Более года в ПРОДе. Без инцидентов.
  54. 54. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Целостность данных Непрерывный импорт данных Удаление данных при изменении параметра шардирования
  55. 55. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Что важнее: индексация или поиск
  56. 56. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Оптимизация Изменение структуры индекса Шардирование Регулярный запуск слияний сегментов Заточка на индексацию 1 Шард на 1 Ядро
  57. 57. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Важные уроки Первое впечатление обманчиво Мониторинг Длительный стресс тест Как НЕ НАДО делать Оптимизация: бесконечный процесс
  58. 58. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Что дальше Ноды балансировщики Оптимизация настроек индексов Переход на ElasticSearch 6.0
  59. 59. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Что дальше: Elasticsearch 6.0 Редкие значения Сортировка при индексации Улучшенное восстановление шарда
  60. 60. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Материалы Статьи https://www.elastic.co/guide/index.html https://www.zdnet.com/article/elasticsearch-6-0.../ https://stackify.com/elasticsearch-tutorial/ http://www.linkedkeeper.com/97.html https://habr.com/post/280488/ Оптимизация https://blog.usejournal.com/7-things-to-consider.../ https://www.loggly.com/blog/nine-tips-configuring.../ https://www.oreilly.com/ideas/10-elasticsearch- metrics-to-watch Эксперт Kyle Kingsberry https://aphyr.com/tags/jepsen https://jepsen.io/ Блоги https://www.elastic.co/blog https://blog.insightdatascience.com/anatomy-of... https://www.cubrid.org/blog/our-experience...
  61. 61. Тема доклада Тема доклада Тема доклада .NET LEVEL UP .NET CONFERENCE #1 IN UKRAINE KYIV 2018 Вопросы FB: https://www.facebook.com/andrey.vinda Email: vindaav@gmail.com Skype: vinda.andrew

×