Elasticsearch - это хорошо масштабируемый механизм полнотекстового поиска и аналитики с открытым исходным кодом. Он позволяет хранить, искать и анализировать большие объемы данных быстро и практически в реальном времени. Обычно он используется в качестве базового движка/технологии, на основе которой работают приложения со сложными функциями и требованиями к поиску. Elasticsearch представляет собой распределенную систему поверх Lucene StandardAnalyzer для индексирования и автоматического определения типов и использует REST API на основе JSON для обращения к функциям Lucene.
Его легко настроить из коробки, поскольку он поставляется с разумными настройками по умолчанию и скрывает сложность от новичков. У него короткая кривая обучения для постижения основ, поэтому любой, кто приложит немного усилий, сможет очень быстро начать работать. Он не содержит схем и использует некоторые параметры по умолчанию для индексации данных.
В случае с потребителями, ищущими информацию о товарах на сайтах электронной коммерции, они сталкиваются с такими проблемами, как длительное время поиска информации о товарах. Это приводит к негативному пользовательскому опыту и, в свою очередь, к упущению потенциального клиента. Сегодня бизнес ищет альтернативные способы хранения большого объема данных таким образом, чтобы их можно было быстро найти. Этого можно достичь, используя для хранения данных NOSQL, а не RDBMS (реляционную систему управления базами данных).
Elasticsearch выступает в качестве такой NOSQL DB, потому что: она проста в использовании, имеет большое сообщество, совместимость с JSON, широкие возможности использования, компоненты бэкенда
Для лучшего понимания Elasticsearch и его использования полезно иметь общее представление об основных компонентах бэкенда.
Узел - это отдельный сервер, который является частью кластера, хранит наши данные и участвует в индексировании и поиске. Как и кластер, узел идентифицируется именем, которое по умолчанию представляет собой случайный универсальный уникальный идентификатор (UUID), присваиваемый узлу при запуске. В случае необходимости мы можем изменить имена узлов по умолчанию.
Кластер - это набор из одного или нескольких узлов, которые вместе хранят все ваши данные и обеспечивают возможности федеративного индексирования (индексирование сразу нескольких источников) и поиска. Может быть N узлов с одинаковым именем кластера.
Elasticsearch работает в распределенной среде: благодаря кросс-кластерной репликации вторичный кластер может быть задействован как горячая резервная копия.
Индекс - это коллекция документов, которые имеют схожие характеристики. Например, у нас может быть один индекс для конкретного клиента, другой - для информации о продукте, а третий - для другой типологии данных. Индекс идентифицируется уникальным именем, которое ссылается на индекс при выполнении операций поиска, обновления и удаления индекса. В одном кластере мы можем определить столько индексов, сколько захотим. Индекс похож на базу данных в РСУБД.
Документ - это основная единица информации, которая может быть проиндексирована. Например, у вас может быть индекс о вашем продукте, а затем документ для отдельного клиента. Этот документ выражается в JSON (JavaScript Object Notation), который является повсеместно распространенным форматом обмена данными в Интернете. Аналогия с отдельным файлом в БД.
В индексе вы можете хранить столько документов, сколько хотите, так что в одном индексе может быть документ для одного продукта и еще один для одного заказа.
Elasticsearch предоставляет возможность разделить ваш индекс на несколько частей, называемых шардами. Когда вы создаете индекс, вы можете просто определить количество шардов, которые вам нужны. Каждый шард сам по себе является полнофункциональным и независимым "индексом", который может быть размещен на любом узле кластера. Шарды важны, потому что они позволяют горизонтально разделить объем данных, потенциально также на нескольких узлах, распараллеливая операции, что повышает производительность. Шарды также можно использовать, создавая несколько копий индекса в репликах шардов, что в облачных средах может быть полезно для обеспечения высокой доступности.
Так как в основе Elasticsearch лежит поисковая система, пользователи начали использовать его для работы с логами, чтобы легко собирать и визуализировать их. Elasticsearch, Logstash, Kibana являются основными компонентами стека Elasticsearch и известны как ELK.
Kibana позволяет визуализировать данные Elasticsearch и перемещаться по стеку Elastic. Вы можете выбрать способ придания формы вашим данным, начав с одного вопроса, чтобы узнать, куда приведет вас интерактивная визуализация. Вы можете начать с классических диаграмм (гистограммы, линейные графики, круговые диаграммы, солнечные лучи и так далее) или разработать собственную визуализацию и добавить данные Geo на любую карту.
Вы также можете выполнять расширенный анализ временных рядов, находить визуальные взаимосвязи в данных и исследовать аномалии с помощью функций машинного обучения.
Logstash - это своеобразный конвейер обработки данных с открытым исходным кодом на стороне сервера, который получает данные из множества источников одновременно, преобразует их, а затем отправляет на дальнейшую обработку.
Данные часто разбросаны во многих системах в разных форматах. На Logstash можно собирать логи, метрики, данные из веб-приложений, хранилищ данных и различных сервисов AWS, и все это в непрерывном потоковом режиме. Его можно использовать с различными модулями, такими как Netflow, для получения информации о вашем сетевом трафике.
Logstash динамически преобразует и подготавливает данные независимо от формата, определяя именованные поля для построения структуры и преобразуя их для приведения к общему формату. Вы можете использовать функцию мониторинга в X-Pack, чтобы получить глубокое представление о показателях развертывания Logstash. На обзорной приборной панели можно увидеть все события, полученные и отправленные Logstash, а также информацию об использовании памяти и времени работы. Затем вы можете детализировать данные, чтобы просмотреть статистику по конкретному узлу.
Elasticsearch - это распределенная, RESTful и аналитическая поисковая система, способная решать широкий спектр задач. Многие компании (Netflix, Tinder, Cisco Talos) переходят или уже прешли на него и интегрируют его в свою текущую бэкэнд-инфраструктуру - он позволяет анализировать ваши данные с помощью агрегации и найти смысл в миллиардах журнальных строк.
Он объединяет различные типы поиска: структурированный, неструктурированный, Geo, аналитику безопасности, метрики и протоколирование.
Он очень быстрый и может работать одинаково хорошо как на ноутбуке с одним узлом, так и на кластере с сотнями серверов, что делает очень простым создание прототипов.
Он использует стандартные RESTful API и JSON. Сообщество также создало и поддерживает клиентов на многих языках, таких как Java, Python, Groovy, .NET, Perl, PHP и др.
С помощью коннектора Elasticsearch-Hadoop (ES-Hadoop) можно использовать функции поиска и аналитики в реальном времени Elasticsearch для работы с большими данными.
Такие инструменты, как Kibana и Logstash, позволяют очень просто и оперативно разобраться в данных, используя графики и выполняя детализированный анализ.