Обзор Elasticsearch и его использования

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

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

В случае, когда потребители ищут информацию о продукте на сайтах электронной коммерции, каталоги сталкиваются с такими проблемами, как длительное время поиска информации о продукте. Это приводит к плохому пользовательскому опыту и, в свою очередь, к упущению потенциального клиента. Сегодня бизнес ищет альтернативные способы хранения большого объема данных таким образом, чтобы их можно было быстро найти.
Этого можно достичь, используя для хранения данных NOSQL, а не RDBMS (реляционную систему управления базами данных).

Elasticsearch выступает в качестве NOSQL DB, потому что:

  • Она проста в использовании
  • Имеет большое сообщество
  • Совместимость с JSON
  • Широкие возможности использования

Компоненты бэкенда

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

Узел

Узел - это отдельный сервер, который является частью кластера, хранит наши данные и участвует в индексировании и поиске кластера. Как и кластер, узел идентифицируется именем, которое по умолчанию представляет собой случайный универсальный уникальный идентификатор (UUID), присваиваемый узлу при запуске. В случае необходимости мы можем изменить имена узлов по умолчанию.

Кластер

Кластер - это набор из одного или нескольких узлов, которые вместе хранят все ваши данные и обеспечивают возможности федеративного индексирования и поиска. Может быть N узлов с одинаковым именем кластера.
Elasticsearch работает в распределенной среде: благодаря межкластерной репликации вторичный кластер может быть задействован в качестве "горячей" резервной копии.

Индекс

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

Документ

Документ - это основная единица информации, которая может быть проиндексирована. Например, у вас может быть индекс о вашем продукте, а затем документ для отдельного клиента. Этот документ выражается в JSON (JavaScript Object Notation), который является повсеместно распространенным форматом обмена данными в Интернете. Аналогия с отдельным файлом в БД.
Внутри индекса вы можете хранить столько документов, сколько хотите, так что в одном и том же индексе у вас может быть документ для одного продукта и еще один для одного заказа.

Осколки (шарды) и реплики

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

Стек Elastic

Хотя в своей основе это поисковая система, пользователи начали использовать Elasticsearch для работы с журналами и захотели легко получать и визуализировать их. Elasticsearch, Logstash, Kibana являются основными компонентами стека и известны как ELK.

Kibana

Kibana позволяет визуализировать данные Elasticsearch и ориентироваться в стеке Elastic Stack. Вы можете выбрать способ придания формы вашим данным, начав с одного вопроса, чтобы узнать, куда приведет вас интерактивная визуализация. Вы можете начать с классических диаграмм (гистограммы, линейные графики, круговые диаграммы, солнечные лучи и так далее) или разработать собственную визуализацию и добавить данные Geo на любую карту.
Вы также можете выполнять расширенный анализ временных рядов, находить визуальные взаимосвязи в ваших данных и исследовать аномалии с помощью функций машинного обучения.

Logstash

Logstash - это конвейер обработки данных с открытым исходным кодом на стороне сервера, который получает данные из множества источников одновременно, преобразует их, а затем отправляет на сбор.
Данные часто разбросаны или загрязнены во многих системах в разных форматах. На Logstash можно собирать журналы, метрики, данные из веб-приложений, хранилищ данных и различных сервисов AWS, и все это в непрерывном потоковом режиме. Его можно использовать с различными модулями, такими как Netflow, для получения информации о вашем сетевом трафике.
Он динамически преобразует и подготавливает данные независимо от формата, определяя именованные поля для построения структуры и преобразуя их для приведения к общему формату. Вы можете использовать функцию мониторинга в X-Pack, чтобы получить глубокое представление о показателях развертывания Logstash. На обзорной приборной панели можно увидеть все события, полученные и отправленные Logstash, а также информацию об использовании памяти и времени работы.

Примеры использования Elasticsearch

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

  • Основное хранилище данных: Создание каталога с возможностью поиска, хранилища документов и системы протоколирования.
  • Дополнительная технология: добавьте возможности визуализации к SQL, mongoDB, добавьте индексирование и поиск к Hadoop или добавьте обработку и хранение к kafka.
  • Аддитивная технология: Если у вас уже есть журналы в Elasticsearch, вы можете захотеть добавить возможности метрики, мониторинга и аналитики.

Netflix

Система обмена сообщениями Netflix за сценой использует Elasticsearch. Система обмена сообщениями делится на следующие категории:

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

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

Допустим, был представлен новый фильм, в этом случае сообщение "новое название" должно быть доставлено всем клиентам.
Используя Kibana, они могут в реальном времени увидеть, сколько людей получили уведомление с новым сообщением и коэффициент успешности доставки сообщения. Они также могут проверить причину неудачи некоторых сообщений. Это дало возможность гораздо быстрее расследовать и решать проблемы, такие как высокий процент неудачных сообщений в Бразилии в 2012 году.

Используя круговую диаграмму в Kibana, они смогли практически мгновенно обнаружить огромное количество отказов недействительных членств. Связавшись с национальным провайдером, они обнаружили, что 29 июля во многих регионах Бразилии к левому краю всех существующих мобильных номеров была добавлена цифра 9, независимо от их прежних начальных цифр. Это изменение было призвано увеличить номерную емкость в таких мегаполисах, как Сан-Паулу, устранив тем самым постоянную нехватку свободных номеров в этом регионе.
Благодаря Elasticsearch у них была возможность обнаруживать все эти сбои практически в режиме реального времени и оперативно реагировать на них.

Tinder

Это пример взаимного сотрудничества между крупной технологической компанией и сообществом Elasticsearch.
Tinder по своей сути является поисковой системой. Поисковые запросы сложны: двузначное число событий, сотни стран и более 50 языков.
Большинство взаимодействий пользователей вызывают запрос в Elasticsearch.
Существуют различные способы взаимодействия с tinder в зависимости от местоположения. Например, в Азии его используют для обмена языками или для поиска гида.
По этой причине запросы в Tinder очень сложны. Они должны быть:

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

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

Cisco Commerce Delivery Platform

Elasticsearch был представлен в 2017 году, когда они обновили свою коммерческую платформу. Они перешли от RDBMS к Elasticsearch по следующим причинам:

  • Добавление отказоустойчивости, работающей в активном/активном режиме. РСУБД не являются распределенными и не отказоустойчивыми.
  • Поиск данных из нескольких баз данных по 30/40 атрибутам с опережением типа для получения ответов в течение нескольких секунд.
  • Глобальный поиск: если в поиске не указаны конкретные объекты, поисковая система найдет результаты по нескольким объектам.

Отдел разведки угроз Cisco

В двух словах, отдел Cisco Threat Intelligence или Cisco Talos - это то, что не дает вредоносным программам и спаму перенасытить "интернет".
В этом отделе Cisco ежедневно просматривают более 1,5 миллионов образцов вредоносного ПО. Вредоносная полезная нагрузка и спам составляют 86% всего почтового трафика (более 600 миллиардов писем ежедневно).
Команда разведки угроз в Talos - это те ребята, которые обнаруживают новые уязвимости глобального масштаба в Интернете и находят настоящих злодеев.
Они обнаруживают новые наборы эксплойтов, анализируя трафик с помощью ssh-терминалов и маршрутизаторов, чтобы собрать аномальное поведение, например, попытки входа в систему с использованием атак "грубой силы" для угадывания пользователей и паролей. Таким образом, они фиксируют, какие команды используют злоумышленники после входа в систему, какие файлы они скачивают и загружают с сервера и на сервер (хотя в это трудно поверить, большинство учетных данных в Интернете так же просты, как пароль строки и имя пользователя admin).
Именно они остановили так называемых SSHPsychos в 2015 году. Эта группа была хорошо известна тем, что создавала значительные объемы сканирующего трафика в Интернете, генерируя попытки входа по SSH грубой силой с определенного класса IP-адресов. Как только им удавалось войти на сервер в качестве root, они загружали и устанавливали DDoS-руткиты.

С 2017 года они используют logstash и kibana для обнаружения и анализа возможных потоков глобального масштаба.

Выводы

Elasticsearch - это распределенная, RESTful и аналитическая поисковая система, способная решать широкий спектр задач.
Многие компании переходят на него и интегрируют его в свою текущую бэкэнд-инфраструктуру:

  • Он позволяет увеличить масштаб данных с помощью агрегации и найти смысл в миллиардах строк журнала.
  • Он объединяет различные типы поиска: структурированный, неструктурированный, Geo, поиск приложений, аналитику безопасности, метрики и протоколирование.
  • Он очень быстрый и может работать одинаково как на ноутбуке с одним узлом, так и на кластере с сотнями серверов, что делает очень простым создание прототипов.
  • Он использует стандартные RESTful API и JSON. Сообщество также создало и поддерживает клиентов на многих языках, таких как Java, Python, .NET, SQL, Perl, PHP и др.
  • С помощью коннектора Elasticsearch-Hadoop (ES-Hadoop) можно использовать функции поиска и аналитики в реальном времени Elasticsearch для работы с большими данными.
  • Такие инструменты, как Kibana и Logstash, позволяют очень просто и быстро разобраться в данных, используя графики и выполняя детализированный поиск.

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

Понравилась статья? Поделиться с друзьями:
Добавить комментарий