Архитектура запросов и индексации Elasticsearch

Что такое Elasticsearch?

Elasticsearch — это распределённый движок поиска и аналитики с открытым исходным кодом, построенный на базе библиотеки Apache Lucene. Elasticsearch также предлагает векторный поиск и генерацию с дополненной извлечением (RAG), что позволяет бесшовно поддерживать современные приложения ИИ. Приложения могут хранить структурированные и неструктурированные данные в Elasticsearch, с определённой схемой или без неё, отправляя JSON полезные нагрузки в кластер Elasticsearch.

Архитектура Elasticsearch

С нуля основные компоненты кластера Elasticsearch включают в себя:

Документ

Документ — это самая маленькая запись информации, хранящаяся в Elasticsearch, и представлена в формате JSON. Документ состоит из нескольких полей (пар ключ-значение) различных типов и может иметь предопределённую схему или быть без схемы, выводя типы данных для любых новых полей, которые индексируются.

Индекс

Индекс — это логическая коллекция документов с одинаковой схемой, идентифицируемая по имени индекса.

Шард

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

Узел

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

Кластер

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

Архитектура запросов

Следующая архитектурная диаграмма описывает поток поискового запроса:

  1. Пользователь или приложение формирует поисковый запрос. Запрос может быть обработан любым узлом в кластере. Узел, который обрабатывает запрос, является «координирующим» узлом.
  2. Координирующий узел рассылает запрос всем участвующим шартам и их репликам.
  3. Каждый шард выполняет запрос локально и возвращает легкий набор результатов координирующему узлу.
  4. Координирующий узел объединяет полученные результаты. Это конец фазы «запроса». Фаза запроса определяет основные документы, которые формируют результат поиска, но полный документ все еще нужно извлечь.
  5. Координирующий узел отправляет запросы на извлечение к принадлежащим шартам, которые обогащают документы в наборе результатов.
  6. Обогащенные документы возвращаются координирующему узлу.
  7. Полный набор результатов поиска, отсортированный и обогащенный, возвращается вызывающему.

Архитектура индексации

На следующей диаграмме архитектуры показана последовательность выполнения запроса на индексацию:

  1. Пользователь отправляет JSON-документ для индексации в Elasticsearch. Если документ уже существует, добавляются новые поля, а существующие поля перезаписываются. Узел, который первым получает запрос, является “координирующим” узлом.
  2. Координирующий узел определяет первичный шар входящего документа, обычно на основе идентификатора документа, и передает запрос узлу данных, которому принадлежит первичный шар.
  3. Первичный шар проверяет операцию и выполняет ее локально.
  4. Затем первичный шар передает операцию всем своим репликам параллельно.
  5. Реплики шаров применяют операцию локально на своих узлах.
  6. Шаги 6, 7 и 8 показывают подтверждение записи, перемещающееся от реплики шара к первичному шару, к координирующему узлу и к вызывающему.

Заключение

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

Source:
https://dzone.com/articles/elasticsearch-query-and-indexing-architecture