Блог

Elasticsearch: что это такое, как работает и для чего используется

Elasticsearch: что это такое, как работает и для чего используется

Введение

Когда люди спрашивают: «Что такое Elasticsearch?», некоторые могут ответить, что это «индекс», «поисковая система», «аналитическая база данных», «решение для big data, что «это быстро и масштабно» или что «это типо как Google». В зависимости от вашего уровня знакомства с этой технологией, эти ответы могут либо приблизить вас к пониманию сущности, либо еще больше запутать вас. Но правда в том, что все эти ответы верные. На протяжении многих лет Elasticsearch и экосистема компонентов, выросшая вокруг него, называемая «Elastic Stack», использовалась для различных случаев использования: от простого поиска на веб-сайте или в документе, сбора и анализа данных журналов до бизнес-аналитики – инструмент для анализа и визуализации данных. Так как же простая поисковая система, созданная учредителем Elastic Шэем Бэнноном для кулинарных рецептов его жены, превратилась в самую популярную корпоративную поисковую систему сегодняшнего дня и в одну из 10 самых популярных СУБД? Мы ответим на этот вопрос в этом посте, разобравшись, что такое Elasticsearch, как он работает и как он используется. Давайте приступим.

Что такое Elasticsearch?

По своей сути Elasticsearch можно рассматривать как сервер, который может обрабатывать запросы JSON и возвращать вам данные JSON.

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


Как работает Elasticsearch?
По сути, Elasticsearch организует данные в документы, которые представляют собой единицы информации на основе JSON, представляющие сущности. Документы группируются в индексы, подобно базам данных, на основе их характеристик. Elasticsearch использует инвертированные индексы — структуру данных, которая сопоставляет слова с их расположением в документе для эффективного поиска. Распределенная архитектура Elasticsearch обеспечивает быстрый поиск и анализ огромных объемов данных практически в режиме реального времени.

Чтобы лучше понять, как работает Elasticsearch, давайте рассмотрим некоторые основные понятия о том, как он организует данные и его серверные компоненты.

Логические концепции

– Документы
Документы – это базовая единица информации, которая может быть проиндексирована в Elasticsearch и выражена в формате JSON, который является глобальным форматом обмена данными в Интернете. Вы можете думать о документе как о строке в реляционной базе данных, представляющей заданную сущность – то, что вы ищете. В Elasticsearch документ может быть не просто текстом, это могут быть любые структурированные данные, закодированные в формате JSON. Этими данными могут быть такие вещи, как числа, строки и даты. Каждый документ имеет уникальный идентификатор и заданный тип данных, который описывает, к какому типу сущности относится документ. Например, документ может представлять собой статью энциклопедии или записи журнала веб-сервера.

– Индексы
Индекс – это набор документов, имеющих схожие характеристики. Индекс – это объект самого высокого уровня, к которому вы можете обращаться в Elasticsearch. Это как база данных в схеме реляционной базы данных. Любые документы в индексе обычно логически связаны. Например, в контексте веб-сайта электронной коммерции вы можете иметь индекс для клиентов, один для продуктов, один для заказов и т. д. Индекс идентифицируется по имени, которое используется для ссылки на индекс при выполнении операций индексирования, поиска, обновления и удаления документов в нем.

– Инвертированный индекс
Индекс в Elasticsearch на самом деле представляет собой так называемый инвертированный индекс, который представляет собой механизм, с помощью которого работают все поисковые системы. Это структура данных, в которой хранится сопоставление содержимого, например слов или чисел, с его расположением в документе или наборе документов. По сути, это структура данных, похожая на хэш-карту, которая направляет вас от слова к документу. Инвертированный индекс не хранит строки напрямую, а вместо этого разбивает каждый документ на отдельные условия поиска (т. е. каждое слово), а затем сопоставляет каждый поисковый запрос с документами, в которых встречаются эти поисковые запросы. Например, на изображении ниже термин «лучший» встречается в документе 2, поэтому он сопоставлен с этим документом. Это служит для быстрого поиска условий поиска в данном документе. Используя распределенные инвертированные индексы, Elasticsearch быстро находит лучшие совпадения для полнотекстового поиска даже из очень больших наборов данных.

Визуальное представление инвертированного индекса

Визуальное представление инвертированного индекса

Бэкэнд-компоненты

– Кластер
Кластер Elasticsearch — это группа из одного или нескольких экземпляров узлов, соединенных вместе. Суть кластера Elasticsearch заключается в распределении задач, поиске и индексировании по всем узлам кластера.

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

Главный узел — управляет кластером Elasticsearch и отвечает за все операции в масштабе кластера, такие как создание/удаление индекса и добавление/удаление узлов.

Узел данных — хранит данные и выполняет операции, связанные с данными, такие как поиск и агрегирование.

Клиентский узел — перенаправляет запросы кластера на главный узел и запросы, связанные с данными, на узлы данных.

– Фрагменты
Elasticsearch предоставляет возможность разделить индекс на несколько частей, называемых фрагменты (shard или шард). Каждый шард сам по себе является полнофункциональным и независимым «индексом», который может размещаться на любом узле кластера. Распределяя документы в индексе по нескольким сегментам и распределяя эти сегменты по нескольким узлам, Elasticsearch может обеспечить избыточность, которая одновременно защищает от сбоев оборудования и увеличивает пропускную способность запросов при добавлении узлов в кластер.

– Дубликаты
Elasticsearch позволяет вам сделать одну или несколько копий фрагментов вашего индекса, которые называются «shard-replicas» или просто «репликами». По сути, шард-реплика — это копия основного шарда. Каждый документ в индексе принадлежит одному основному сегменту. Реплики предоставляют избыточные копии ваших данных для защиты от сбоев оборудования и увеличения емкости для обслуживания запросов на чтение, таких как поиск и извлечение документа.

 

Знакомство с Elasticsearch не может быть полным без упоминания Elastic Stack.

Что такое Elastic stack (ранее известный как ELK Stack)?

Elasticsearch — центральный компонент Elastic Stack, набора инструментов с открытым исходным кодом для приема, обогащения, хранения, анализа и визуализации данных. Его обычно называют стеком «ELK» по названию его компонентов Elasticsearch, Logstash и Kibana, и теперь он еще включает Beats. Несмотря на то, что по своей сути это поисковая система, пользователи начали использовать Elasticsearch для данных журналов и хотели найти способ легко получать и визуализировать эти данные.

Кибана
Kibana – это инструмент визуализации и управления данными для Elasticsearch, который предоставляет гистограммы, линейные графики, круговые диаграммы и карты в реальном времени. Он позволяет визуализировать данные Elasticsearch и перемещаться по Elastic Stack. Например, поскольку Kibana часто используется для анализа логов, она позволяет вам отвечать на вопросы о том, откуда поступают ваши веб-посещения, URL-адреса вашего распространения и т. д.

Если вы не создаете собственное приложение на основе Elasticsearch, Kibana — отличный способ поиска и визуализации вашего индекса с помощью мощного и гибкого пользовательского интерфейса. Однако основным недостатком является то, что каждая визуализация может работать только с одним шаблоном индекс/индекс. Так что если у вас есть индексы с разными данными, вам придется создавать для каждого отдельные визуализации.


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

Битс
Beats — это набор легких одноцелевых агентов доставки данных, используемых для отправки данных с сотен или тысяч машин и систем в Logstash или Elasticsearch. Beats отлично подходят для сбора данных, поскольку они могут находиться на ваших серверах, в ваших контейнерах или развертываться как функции, а затем централизовать данные в Elasticsearch. Например, Filebeat может находиться на вашем сервере, отслеживать файлы логов по мере их поступления, анализировать их и импортировать в Elasticsearch практически в реальном времени.


Для чего используется Elasticsearch?
Теперь, когда у нас есть общее представление о том, что такое Elasticsearch, лежащие в его основе логические концепции и его архитектура, мы лучше понимаем, почему и как его можно использовать в различных случаях. Ниже мы рассмотрим некоторые основные варианты использования Elasticsearch и приведем примеры того, как компании используют его сегодня.

Основные случаи использования
– Поиск приложений – для приложений, которые в значительной степени полагаются на поисковую платформу для доступа, поиска и составления отчетов о данных.
– Поиск по веб-сайтам. Elasticsearch является очень полезным инструментом для эффективного и точного поиска при большом количестве контента на сайте. 
– Корпоративный поиск – Elasticsearch обеспечивает поиск в масштабах всего предприятия, включая поиск документов, поиск продуктов электронной коммерции, поиск по блогам, поиск людей и любую форму поиска, которую вы только можете придумать. Фактически, он постепенно проник в поисковые решения большинства популярных веб-сайтов, которые мы используем ежедневно, и заменил их. С точки зрения предприятия, Elasticsearch успешно используется во внутренних сетях компаний.
– Ведение логов и их аналитика. Как мы уже говорили, Elasticsearch обычно используется для приема и анализа данных логов практически в реальном времени и в масштабируемом виде. Он также предоставляет важную оперативную информацию о показателях для принятия мер.
– Метрики и мониторинг объектов. Многие компании используют стек ELK для анализа различных метрик. Это может включать сбор данных по нескольким параметрам производительности, которые различаются в зависимости от варианта использования.
– Аналитика безопасности. Еще одним важным аналитическим приложением Elasticsearch является анализ безопасности. Логи доступа и аналогичные логи, касающиеся безопасности системы, можно анализировать с помощью стека ELK, предоставляя более полную картину того, что происходит в ваших системах в режиме реального времени.
– Бизнес-аналитика. Многие встроенные функции, доступные в стеке ELK, делают его подходящим вариантом в качестве инструмента бизнес-аналитики. Однако для внедрения этого продукта в большинстве организаций требуется непростое обучение. Это особенно актуально в тех случаях, когда у компаний есть несколько источников данных, помимо Elasticsearch, поскольку Kibana работает только с данными Elasticsearch. 


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

– Ebay
Благодаря бесчисленным сценариям использования критически важного для бизнеса текстового поиска и аналитики, в которых Elasticsearch используется в качестве основы, eBay создал специальную платформу «Elasticsearch-as-a-Service», позволяющую легко развертывать кластер Elasticsearch на своей внутренней облачной платформе на базе OpenStack.

– Walmart 
Walmart использует Elastic Stack, чтобы раскрыть скрытый потенциал своих данных, получить представление о моделях покупок клиентов, отслеживать показатели эффективности магазина и анализировать праздники — и все это практически в режиме реального времени. Он также использует функции безопасности ELK для обеспечения безопасности с помощью единого входа, оповещения об обнаружении аномалий и мониторинга DevOps.

Почему Elasticsearch популярен
Согласно опросу Stackshare, следующие основные причины, по которым разработчики и компании выбирают Elasticsearch:

  • Мощный API
  • Отличная поисковая система
  • Открытый исходный код
  • RESTful
  • Поиск почти в реальном времени
  • Бесплатно
  • Любой тип поиска
  • Легкий старт
  • Аналитика
  • Децентрализованный

Итоги

Так что же такое Elasticsearch? В этом посте мы попытались ответить на этот вопрос через призму понимания того, что это такое, как оно работает, как используется, и это всего лишь только основная информация для общего понимания. Резюмируя, Elasticsearch по своей сути является поисковой системой, базовая архитектура и компоненты которой делают ее быстрой и масштабируемой, находясь в центре экосистемы взаимодополняющих инструментов, которые имеют различное применение, включая поиск, аналитику, обработку и хранение данных. 
Удачных поисков!

 

banner-footer
Умный поиск для интернет-магазинов. 30 Дней бесплатно