Elasticsearch – поиск для самых больших
Чем крупнее компания, тем большим количеством данных она владеет. Но все эти петабайты ценной для бизнеса и его клиентов информации не должны лежать без дела – они должны работать, постоянно и эффективно.
Требования к современным системам быстрого внутреннего поиска постоянно меняются и растут. Меняется и сама структура данных. Если раньше это были единообразные записи в таблицах БД, то теперь чаще речь идет об «озерах данных», содержащих неструктурированную информацию, объектных хранилищах S3 и т.д.
Не так уж много существует поисковых решений, способных хорошо показать себя в подобной среде, особенно если дело касается поиска среди многих и многих петабайт. Одной из самых популярных в области Big Data поисковых систем такого рода является, безусловно, Elasticsearch.
Первая версия поискового движка увидела свет в 2010 году. В 2012 году создатель Elasticsearch Шай Бейнон (Shay Banon) зарегистрировал одноименную компанию, задачей которой стала коммерциализация изначально открытого решения. Позднее она была переименована в Elastic.
В настоящее время возможностями Elasticsearch пользуются множество всемирно известных компаний, среди которых GitHub, Netflix, Uber, Slack, Microsoft и пр. Так, к примеру, для организации поиска по своим бездонным хранилищам Netflix постоянно использует 700-800 узлов Elasticsearch, объединенных в 100 кластеров. Uber обрабатывает по тысяче поисковых запросов в секунду и более, а GitHub индексирует более 8 млн репозиториев, обслуживая более 4 млн пользователей.
Принципы работы Elasticsearch
В основе Elasticsearch лежит написанный на Java поисковый движок, использующий свободную библиотеку скоростного полнотекстового поиска Lucene и поддерживающий JSON REST API. К ключевым достоинствам Elasticsearch, помимо высочайшей производительности и возможности практически безграничного горизонтального масштабирования, можно отнести автоматическую индексацию новых объектов, которые становятся доступными сразу после загрузки в БД в соответствии с концепцией NoSQL.
Кроме того, поисковая система оснащена широким набором настраиваемых фильтров, позволяющим реализовать мультиарендность и использовать нечеткий поиск. Также Elasticsearch снабжен анализаторами, в автоматическом режиме выполняющими токенизацию текста (разбиение на элементарные элементы – слова, знаки препинания и пр.), лемматизацию, стемминг и другие преобразования.
Elasticsearch можно назвать документно-ориентированной базой данных с поддержкой многопоточности. Поиск в реальном времени может осуществляться по документам любого типа при помощи API-интерфейсов библиотеки Lucene и запросов GET.
В случае необходимости, которая в крупных проектах возникает почти всегда, несколько копий Elasticsearch могут быть объединены в кластер. Группа таких кластеров может хранить реплицированные копии сегментов индекса, за счет чего достигается высокая отказоустойчивость решения.
В достаточно большом хранилище данных число развернутых кластеров Elasticsearch может измеряться сотнями. При этом каждый из узлов кластера умеет делегировать операции поиска правильному сегменту индекса, попутно осуществляя маршрутизацию и перебалансировку данных.
Elastic Stack
Важно отметить, что в своем типичном воплощении Elasticsearch не используется в отрыве от других продуктов Elastic – Logstash, Kibana и FileBeat. Вместе они образуют комплексное решение, получившее общее название Elastic Stack.
Logstash – инструмент сбора, обработки и отправки в хранилище всевозможных событий из разных источников – журналы, пакеты, события, транзакции, временные метки и т.д. Logstash написан на JRuby и работает на JVM, что позволяет запускать его на разных платформах.
В качестве источников данных для этого инструмента могут служить социальные сети, новостные агрегаторы, внутренние данные систем электронной коммерции, CRM, финансовые показатели, телеметрия мобильных устройств, сенсорные сети IoT, HTTP-запросы и ответы на них, журналы Apache или Windows, а также многое другое.
Широкий ассортимент фильтров Logstash помогает извлекать ценные выводы из данных при помощи преобразований и анализа. Построенные на основе регулярных выражений шаблоны фильтров могут быть объединены в последовательности. Также анализ данных облегчает набор плагинов для Logstash, позволяющих преобразовать содержимое журналов в любой удобный формат.
Kibana – веб-инструмент визуализации, позволяющий привести поток событий от Logstash в человекочитаемый вид для анализа. При этом Kibana не взаимодействует с Logstash напрямую, а использует в качестве источника данных уже обработанные индексы Elasticsearch. С помощью Kibana можно создавать разнообразные динамические панели мониторинга, таблицы, графики и диаграммы, демонстрирующие обстановку во входящих источниках событий в реальном времени.
FileBeat – легковесный серверный агент, с помощью которого можно организовать отправку логов серверов в Logstash. Этот элемент стека не является обязательным, однако зачастую оказывается весьма полезен в инфраструктурах определенных типов.
Особенности лицензирования
Все элементы Elastic Stack доступны для изучения и использования в виде исходных кодов в репозитории GitHub. До недавнего времени они распространялись по лицензии Apache 2.0, однако в январе 2021 года Elastic объявила о переходе на лицензию SSPL (Server Side Public License), накладывающую некоторые ограничения на коммерческое использование.
Теперь эксплуатанты Elastic Stack могут продолжать пользоваться им безвозмездно только в том случае, если все остальные компоненты, вовлеченные в работу сервиса, также будут публиковаться в виде открытого исходного кода.
Изменения коснулись главным образом облачных провайдеров, которые физически не в состоянии выполнить требования SSPL и будут вынуждены перейти на коммерческую лицензию.
В то же время, основное коммерческое предложение Elastic состоит вовсе не в этом. Различные варианты лицензий, такие как Gold, Platinum и Enterprise, включают в себя многочисленные дополнительные инструменты, направленные на расширение функциональности Elastic Stack.
· Gold включает в себя механизмы авторизации через Active Directory/LDAP, дополнительные инструменты внутреннего аудита, расширенные возможности службы оповещений и, разумеется, техническую поддержку в рабочие часы.
· Platinum в дополнение к вышеперечисленному предлагает встроенные инструменты машинного обучения, поддержку ODBC/JDBC, настройки гранулярного доступа вплоть до отдельных документов, кросс-кластерную репликацию и ряд других возможностей, включая круглосуточную техподдержку. На сегодняшний день это самый востребованный тип лицензий на Elastic Stack.