Elasticsearch — поисковая система и аналитическая СУБД в облаке

Если вам нужна поисковая система, аналитическая СУБД и масштабируемое нереляционное хранилище данных, то обязательно обратите внимание на Elasticsearch. Сейчас его применяют на различных сайтах, сервисах и системах Big Data в крупных и средних компаниях по всему миру. Расскажем о возможностях Elasticsearch, полнотекстовом поиске по множеству языков и аналитических инструментах, которые работают в реальном времени. И, конечно, о нашем управляемом сервисе Yandex Managed Service for Elasticsearch в инфраструктуре Yandex.Cloud.

Что такое Elasticsearch

Elasticsearch — это высокомасштабируемая распределенная поисковая система полнотекстового поиска и анализа данных с веб-интерфейсом, REST API и неформализованными JSON-документами, которая разработана на базе полнотекстового поиска Lucene и работает в режиме реального времени. Кроме того, Elasticsearch — это нереляционное хранилище документов в формате JSON, которое разработано на Java и выпущено как проект с открытым исходным кодом в соответствии с условиями лицензии Apache.

История Elasticsearch

Создатель системы Шей Банон в 2004 году работал над Compass. Разрабатывая уже третью версию этого программного обеспечения, он понял, что для создания масштабируемого поискового решения старых наработок уже не хватает, а переписывать код Compass под новые задачи не имеет смысла. Поэтому он создал с нуля Elasticsearch: спроектировал его распределенным и легко масштабируемым для обработки больших объемов данных на доступном железе. Шей Банон использовал библиотеку Apache Lucene, которая прекрасно умеет индексировать и искать и разработана специально для построения поисковых систем. Первая версия Elasticsearch появилась в феврале 2010 года.

Сейчас Elasticsearch — ядро экосистемы Elastic Stack, в состав которой также входят:

  • механизм сбора данных и регистрации журналов Logstash;

  • платформа аналитики и визуализации Kibana;

  • платформа для одноцелевых отправителей данных Beats.

Кроме того, существуют плагины X-Pack, которые расширяют возможности экосистемы, и многофункциональный REST API (Representational state transfer API), работающий на протоколе HTTP. Elasticsearch имеет широкую поддержку пользовательских библиотек, которые обеспечивают полную совместимость со многими языками программирования, такими как Java, .NET (C#), PHP, Python, Apache Groovy, Ruby и т. д.

elastic stack

Elasticsearch. Поиск

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

Основой для работы с текстовыми документами является анализатор. Он представляет собой цепочку последовательных обработчиков. Сначала поступивший в анализатор текст проходит символьные фильтры, которые убирают, добавляют или заменяют отдельные символы в потоке. Например, с помощью символьных фильтров можно заменить арабские цифры (٠ ١٢٣٤٥٦٧٨ ٩) на современные арабские цифры (0123456789), перевести текст в нижний регистр или удалить HTML-теги.

data analyzation scheme

Затем Elasticsearch передает обработанный текст токенизатору, который очищает поток символов от знаков препинания и разбивает по определенным правилам на отдельные слова — токены. В зависимости от токенизатора можно получить как набор слов, так и набор, где будут лишь основы слов (например, корни).

После токенизатора система передает набор слов в один или несколько фильтров токенов, которые могут добавлять, удалять или менять слова в наборе. Например, фильтр стоп-токенов может удалять часто используемые служебные слова, такие как артикли a и the в англоязычном тексте. На выходе из анализатора мы имеем набор токенов, который помещается в индекс. Это позволяет сохранять максимум смысла при минимуме знаков.

Elasticsearch ищет слова из запроса уже по индексу. При этом поисковые индексы можно разделить на сегменты — шарды. На каждом узле (запущенном экземпляре Elasticsearch) может быть размещено несколько сегментов. Каждый узел действует как координатор для делегирования операций правильному сегменту, а перебалансировка и маршрутизация выполняются автоматически.

Elasticsearch. Хранилище данных

Elasticsearch — это нереляционное хранилище документов, которое имеет REST API и позволяет работать с данными в формате JSON. Строгая структурированность при этом не является обязательным требованием.

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

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

data processing scheme

Как компании применяют Elastic Stack

Для полнотекстового поиска по сайту

Stack Overflow использует Elasticsearch как средство для полнотекстового поиска по вопросам и ответам для пользователей, а также для поиска похожих вопросов и подсказок при создании нового вопроса. С помощью Elasticsearch сервис предоставляет поиск по точному совпадению (например, поиск строки кода) и нечеткий поиск с большим количеством настроек.

GitHub обеспечивает пользователей возможностями полнотекстового поиска и поиска по отдельным критериям среди 8 миллионов репозиториев кода благодаря Elasticsearch. Например, можно найти проект на языке Clojure, который был активен в течение последнего месяца.

Альфа-Банк применяет Elasticsearch для полнотекстового поиска по транзакциям в личном кабинете и в сервисе «Выписка по счёту».

Для хранения и анализа журналов

Netflix выбрал Elasticsearch для хранения, индексации и поиска по этим данным. Всего за два года после начала внедрения инфраструктура выросла до 150 кластеров, а количество инстансов превысило 3500.

ДомКлик организовал кластер логирования с помощью Elasticsearch. Задача кластера — агрегировать и вести поиск по журналам более 2000 приложений, которые работают в кластере Kubernetes. Система обрабатывает более 4,4 терабайтов данных в сутки.

Для поиска по продуктам

Компания Leroy Merlin в России с помощью Elasticsearch создала поиск по продуктам, быструю выдачу каталога и сервис поисковых подсказок. С момента запуска сервиса количество товаров в индексе увеличилось в два раза и продолжает расти. В среднем пользователи делают 300 поисковых запросов в секунду, а время отклика составляет меньше 200 миллисекунд.

Для визуализации и анализа показателей

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

На нашем митапе Elasticsearch Community Meetup спикеры из «ДомКлик», «Тинькофф» и Leroy Merlin подробно рассказали про свой опыт работы с Elasticsearch.

Как развернуть Elasticsearch и весь Elastic Stack

Для этого подойдут как локальные физические сервера, так и облачные среды. Большинство крупных облачных платформ предоставляет различные возможности развертывания Elastic Stack. Но самый быстрый результат от использования Elasticsearch достигается при использовании его в виде управляемого сервиса на облачной платформе. Вам не нужно обслуживать кластер, заниматься резервированием, мониторингом, обеспечением отказоустойчивости, обновлением, настраивать интеграции между сторонними сервисами и Elasticsearch. Кроме того, в облаке уже настроены интеграции с сервисами самой платформы, а также всегда доступны инструменты для оперативного реагирования и управления кластером.

В 2021 году облачная платформа Yandex.Cloud и компания Elastic договорились о партнерстве. Yandex.Cloud — первая в России платформа, которая предоставляет Elasticsearch от создателя технологии в модели CSP (Cloud Solution Provider) с доступом как к управляемому сервису в публичном облаке в трех вариантах подписки: Basic, Gold и Platinum. Это позволяет открыть доступ пользователям к официальным расширенным функциям сервиса, таким как мониторинг, инструменты визуализации, управление доступом, аналитика графов, а также к технической поддержке уровня L3 от команды Elasticsearch. Пользователи сервиса первыми получают доступ к новым функциям, патчам безопасности и другим улучшениям.

В Yandex.Cloud вы сможете развернуть готовый к работе кластер всего за несколько минут. Настройки стека Elasticsearch и Kibana уже оптимизированы под выбранный размер кластера.

Создать кластер →

  • Статьи