Практический опыт модификации Elasticsearch

Elastic (ВК).jpg

Один из наших клиентов столкнулся с необычной проблемой: поисковая система ElasticSearch «из коробки» не умеет мигрировать индексы незаметно для пользователей. Приходилось каждый раз отключать поиск на несколько часов. Мы сделали систему доступной в режиме 24/7, снизили количество человеческих ошибок, повысили скорость выполнения работ при миграции и удешевили обслуживание.

Справочная информация

Elasticsearch — поисковый движок с поддержкой полнотекстового поиска, созданный на основе библиотеки Lucene. Благодаря развитой экосистеме и простоте интеграции в инфраструктуру, Elasticsearch занимает лидирующее положение на рынке. Систему используют Microsoft, eBay, Amazon, GitHub, Netflix и многие другие.

Индексация/Реиндексация — процесс добавления сведений о документах и файлах в базу данных поисковой системы, чтобы в дальнейшем можно было осуществлять полнотекстовый поиск по индексированной актуальной информации.

Основные проблемы

Крупная компания, которая использует Elasticsearch в своей инфраструктуре, столкнулась с рядом проблем. С ростом объёма информации в корпоративных сервисах, на работы по миграции схем, где главным фактором является правильная и быстрая реиндексация данных, стало уходить слишком много времени и денег.


Проблема 1

На реиндексацию данных уходит несколько часов. В процессе поиск становится недоступен сотрудникам компании.

Негативный эффект

Пользователи не могут получить доступ к поисковой системе. Растёт их недовольство работой внутренних сервисов компании.


Проблема 2

С ростом компании многократно выросли расходы на техническую поддержку поисковой системы.

Негативный эффект

DevOps-инженеры тратят всё больше времени на исправление ошибок при реиндексации и миграции данных.

Обе проблемы связаны с особенностями системы Elasticsearch. В ней отсутствуют инструменты для контроля миграций и проверки данных, а реиндексация нуждается в дополнительной тонкой настройке. Всё это негативно отражается на работе поисковой системы, соответственно — вредит и пользователям, и бизнесу.

Решение проблемы контроля миграций

Развитие сервисов компании приводит к изменению схемы в реляционной базе данных, которые важно оперативно переносить в поисковую систему. Нужен инструмент для миграции изменений, отслеживания версий и мониторинга процессов. Проблема в том, что такого встроенного инструмента в Elasticsearch нет.

Мы создали утилиту с рабочим названием MigrationTool, который включает гибкие настройки, поддержку скриптов и профилей, а также возможность расширения функциональности в будущем. После запуска инструмент проверяет последнюю версию изменений в Elasticsearch и, в случае наличия более новых версий, начинает процесс миграции.


01.jpg

Решение гарантирует, что все версии индекса автоматически будут перенесены в поисковую систему по очереди, а применённые ранее — были пропущены. Всё происходит без привлечения инженеров, которые тратят на это больше времени и периодически допускают ошибки.


Было

С ростом компании выросли расходы на поддержку поисковой системы. DevOps-команда отвлекалась от важных проектов для контроля миграций Elasticsearch. В процессе часто допускались ошибки, исправление которых требовало дополнительных ресурсов.

Стало

Утилита MigrationTool отслеживает версии и самостоятельно осуществляет миграции. Снизилась стоимость поддержки системы и количество допускаемых ошибок. Инженеры больше не отвлекаются от важных проектов.

Решение проблемы реиндексации данных

Сломать поиск или уничтожить поисковую информацию могут изменения мастер-данных в реляционной базе данных, изменения в структуре индекса или его статических настройках.

Решить проблему можно с помощью версионирования дополнительных полей индекса. Ещё один вариант избежать потерь данных — создание новых версий индексов с изменённой структурой. Мы разработали утилиту с рабочим названием ReindexTool, который минимизирует количество ошибок и автоматически обновляет поисковый сервис с учётом выбранных критериев и режимов.


02.jpg

Инструмент позволяет производить реиндексацию без отключения системы поиска. Например, нужно мигрировать индекс версии 1.0 на версию 2.0. Пользователи считывают информацию из старого индекса, при этом в фоне создаётся индекс версии 2.0, куда записываются изменения. После завершения миграции, мы переключаем чтение с версии 1.0 на 2.0. Поиск при этом не отключается ни на секунду.


Было

Реиндексация часто приводила к возникновению ошибок, которые ломали систему и удаляли важные данные из индекса. Во время реиндексации поиск информации становился частично недоступен пользователям.

Стало

Утилита ReindexTool автоматизировала процессы и свёл количество ошибок к минимуму. Поиск доступен в режиме 24/7, так как реиндексация теперь осуществляется в фоновом режиме.

Оптимизация реиндексации

С ростом количества документов до 30–50 миллионов реиндексация стала отнимать до 5 часов. Мы добавили в утилиту ReindexTool ряд настроек, которые позволяют снизить нагрузку на поисковый движок и ускорить процесс:

  • Количество реплик индекса до и после реиндексации.
  • Интервал, с которым обновленное содержимое индекса становится доступным для поиска.
  • Возможность запуска параллельных процессов извлечения информации из базы данных.
  • Пакетирование данных и их групповая отправка на индексацию.
  • Возможность индексации данных за выбранный период времени и прочие фильтры, по которым необходимо сделать переиндексацию.

Было

Настройки Elasticsearch «по умолчанию» замедляли процесс реиндексации. В какой-то момент он стал занимать до 5 часов.

Стало

Оптимизация настроек Elasticsearch позволила сократить время реиндексации в среднем до 60 минут.

Выводы и метрики

Когда бизнес активно развивается, поисковая система может перестать справляться с быстро растущим массивом данных. Это приводит к увеличению времени реиндексации, возникновению ошибок, росту расходов на поддержку системы и недовольству пользователей.

При правильном подходе и наличии опыта работы с поисковыми системами можно сделать Elasticsearch эффективнее. C помощью всего двух утилит и тонкой настройки специалисты Sibedge:

  • Сократили время, необходимое на реиндексацию в пять раз.
  • Автоматизировали миграции и разгрузили DevOps-инженеров.
  • Обеспечили доступность поиска для пользователей в режиме 24/7.
  • Минимизировали количество ошибок в работе поискового движка.
  • Снизили расходы на техническую поддержку Elasticsearch.

Полученный опыт применим к компаниям любого размера. Вне зависимости от сложности инфраструктуры и объёма документной базы, любую поисковую систему можно сделать более быстрой, автономной и стабильной. Мы рады делиться с вами нашей экспертизой. Надеемся, что этот материал будет вам полезен. В будущем мы обязательно продолжим публиковать подобные истории из практики Sibedge.

Таблица улучшения метрик

elastic_metrics_table.png

* При использовании стратегии с двумя индексами, но в полностью ручном режиме.
** 1 час работы DevOps-инженера = $16.