С непрерывным развитием современных предприятий объем данных резко увеличился, и масштабируемость системы стала решающим вопросом. Будучи мощной распределенной системой поиска и анализа, Elasticsearch продемонстрировал свои выдающиеся возможности в обработке крупномасштабных данных. Однако спроектировать эффективный и масштабируемый кластер Elasticsearch непросто. Цель этой статьи — помочь пользователям лучше создавать и оптимизировать свои кластеры Elasticsearch, поделившись некоторыми принципами проектирования масштабируемости и общими антишаблонами.
В процессе нашего сотрудничества с клиентами мы обнаружили, что многие пользователи разрабатывают и внедряют Elasticsearch кластер, мы часто встречаем Узкое место в проблемы производительности и масштабируемости. Эта статья Подвести Итог Причины этих проблем,И предоставить некоторые практические решения и предложения по оптимизации.,Направлен на существование, чтобы помочь пользователям избежать распространенных ошибок.,Улучшение производительности и стабильности кластера.
Прочитав эту статью, читатели узнают:
когда мы используем Elasticsearch На данный момент оно обычно оценивается исходя из текущего масштаба и нагрузки бизнеса. Но поскольку масштабы бизнеса продолжают расти и количество посещающих пользователей увеличивается, нам необходимо выполнить две основные операции над исходным кластером: обновление и расширение. Оба индивидуальных аспекта важны для расширения, Принцип масштабируемости является важнейшим ориентиром. Каждый принцип подробно описан ниже:,Помогите пользователям более полно понять и применить эти принципы.
в дизайне Elasticsearch кластер, вам нужно следовать некоторым основным принципам масштабируемости:
На следующем рисунке показана типичная архитектура кластера Elasticsearch, которая делит данные на «горячие», «теплые» и «холодные» данные в зависимости от «теплоты» данных и использует разные роли узлов для обработки различных рабочих нагрузок данных:
в дизайнеи Конфигурация Elasticsearch При кластеризации очень важно понимать и обрабатывать различные рабочие нагрузки по данным. Каждая рабочая нагрузка имеет разные требования к ресурсам, что требует соответствующей корректировки конфигурации узла и распределения ресурсов.
Кластеры Elasticsearch обычно обрабатывают три основные рабочие нагрузки данных: прием, поиск и сохранение. Каждая рабочая нагрузка имеет разные требования к ресурсам, поэтому узлы и ресурсы необходимо настроить соответствующим образом.
Мы можем классифицировать и обрабатывать рабочие нагрузки по трем основным измерениям: вычисления, память и хранилище.
Рабочие нагрузки, требующие интенсивной записи, обычно включают в себя большие объемы операций записи данных, таких как данные временных рядов, данные журналов, и часто требуют обработки ETL (конвейеры). Эти рабочие нагрузки характеризуются обработкой больших объемов документов в секунду (Документов в секунду) или больших объемов данных в день (ТБ/день). Для этого типа рабочей нагрузки особенно важна конфигурация вычислительных ресурсов (Compute) и ресурсов хранения (Storage):
Рабочие нагрузки, требующие интенсивного чтения или обновления, включают частые операции чтения и обновления данных, такие как запросы в реальном времени, векторное хранилище, обратный просмотр обнаружения и т. д. Этот тип рабочей нагрузки требует больших объемов ресурсов памяти для поддержки высокочастотных запросов и обновлений данных:
Рабочие нагрузки только для чтения в основном включают долговременное хранение и извлечение данных, например архивирование данных, моментальные снимки и запросы исторических данных. Этот тип рабочей нагрузки характеризуется низкой частотой записи данных, но требует эффективного извлечения больших объемов исторических данных:
Изоляция рабочей нагрузки — это улучшение Elasticsearch кластер Важная стратегия масштабируемости и использования ресурсов. Разделив различные типы рабочих нагрузок, мы можем более эффективно управлять ресурсами и избегать конфликтов за ресурсы. место в производительности。существовать Изоляция рабочей нагрузкисередина,Есть трииндивидуальныйосновные стратегии:Чанк、Группаи Распространение。
Суть стратегии разделения на блоки заключается в разделении больших рабочих нагрузок на части одинакового размера, гарантируя, что рабочая нагрузка каждой части сбалансирована. Такой подход помогает добиться более равномерного распределения нагрузки по кластеру и улучшает использование ресурсов. В частности, мы можем разделить индексы, сегменты, соединения и т. д. на несколько частей одинакового размера, чтобы облегчить параллельную обработку.
Пример: допустим, у нас есть очень большой поток данных журнала, обрабатывающий миллиарды записей журнала каждый день. Разделив этот поток данных на несколько сегментов и сохранив одинаковый размер объема данных в каждом сегменте, можно распределить нагрузку на запись и запросы более равномерно и избежать перегрузки одного сегмента.
Стратегии группировки позволяют добиться эффекта масштаба за счет группировки рабочих нагрузок по категориям и их сопоставления с ресурсами. Конкретный метод заключается в кластеризации схожих рабочих нагрузок на основе ролей узлов, слоев данных, конвейеров и т. д. Такой подход может сократить растрату ресурсов и повысить общую эффективность кластера.
Пример. В системе мониторинга безопасности мы можем разделить задачи обнаружения в реальном времени и задачи хранения исторических данных и обрабатывать их соответственно выделенными узлами. Задачи обнаружения в реальном времени требуют быстрого реагирования и могут выделять больше ресурсов ЦП и памяти, в то время как задачи хранения исторических данных в основном полагаются на ресурсы хранения и могут выделять узлы хранения с высокой плотностью.
Цель стратегии распределения — максимальное использование ресурсов каждой единицы работы с минимальным количеством шардов. Правильно распределяя узлы и агенты, мы можем гарантировать, что нагрузка каждой рабочей единицы будет максимально сбалансирована, тем самым повышая эффективность обработки всей системы.
Пример. При обработке крупномасштабных поисковых запросов мы можем распределить поисковые запросы по нескольким поисковым узлам, узнать верхний предел обработки каждой единицы посредством сравнительного тестирования и рассчитать запросы, которые необходимо распределить по каждому узлу. Таким образом, вы сможете избежать перегрузки одного узла и повысить общую производительность поиска.
Шардинг — это основная единица разделения и балансировки рабочих нагрузок в Elasticsearch. Для обеспечения эффективной работы и балансировки нагрузки кластера решающее значение имеет разработка стратегии шардинга. Ниже приводится подробное руководство по разработке стратегии сегментирования:
В Elasticsearch шардинг — это не только основная единица работы подразделения, но и ключ к достижению балансировки нагрузки. Чем более похожи сегменты, тем легче добиться балансировки нагрузки. Это означает, что при создании шардов мы должны стараться поддерживать одинаковый размер и рабочую нагрузку каждого шарда, чтобы система могла более равномерно распределять ресурсы и обрабатывать запросы.
Следует отметить, что,Скорость ответа Elasticsearch зависит от самого медленного шарда。поэтому,Если определенный шард обрабатывается медленно,Это повлияет на время ответа всего запроса. Это требует от нас реализации стратегии сегментирования,Старайтесь избегать создания слишком больших или слишком маленьких сегментов, чтобы не повлиять на общую производительность.。
В сценариях записи данных с высокой нагрузкой разработка стратегии сегментирования требует особого внимания к следующим моментам:
num_shards = (hot_nodes - 1) / 2
,И используйте копию индивидуально. Эта конфигурация может обеспечить отказоустойчивость, обеспечивая при этом,Максимизируйте пропускную способность.total_shards_per_node: 1
,Это может предотвратить концентрацию всех сегментов определенного индивидуального индекса на одном индивидуальном узле.,Избегайте отдельных точек перегрузки.force_merge
Скорость создания снимков, снижающая затраты на обслуживание.Анализируя множество реальных случаев, мы можем лучше понять и применить стратегии сегментирования и их влияние на производительность кластера. Ниже приведены конфигурации кластера и их производительность для трех различных типов клиентов.
Банк размещает более 6 кластеров на Elasticsearch Service (ESS). Конфигурация эталонного кластера следующая:
Этот кейс демонстрирует, как добиться эффективной обработки и хранения данных путем правильной настройки «горячих» и «холодных» узлов в среде с высокой нагрузкой.
Компания размещает на ESS более 7 кластеров. Конфигурация эталонного кластера следующая:
Этот случай показывает, как оптимизировать баланс между горячими и холодными узлами, используя теплые узлы для хранения пустых сегментов и сегментов с низкой нагрузкой в сценарии безопасной обработки данных.
Агентство размещает на ESS более 12 кластеров. Конфигурация эталонного кластера следующая:
Этот кейс демонстрирует, как обеспечить быструю запись и долговременное хранение данных путем настройки большого количества «горячих» и «замороженных» узлов в среде с высоким объемом записи данных.
существования Проанализировав реальные случаи крупных банков, крупных поставщиков услуг по управлению безопасностью и крупных гостиничных организаций, мы можем Подвести завершить какое-то массивное существование Elasticsearch Ключевые уроки и передовой опыт проектирования кластеров.
Анализируя реальные случаи, мы видим, что разные типы рабочих нагрузок и бизнес-требований требуют разных стратегий сегментирования и конфигураций узлов. Правильное применение этих стратегий может значительно улучшить Elasticsearch производительность и масштабируемость кластера. Я надеюсь, что эти тематические исследования смогут предоставить пользователям дизайн оптимизируйте свой собственный Elasticsearch Предоставьте ценную информацию и рекомендации при кластеризации.
в дизайнеиоптимизация Elasticsearch кластер, помимо необходимости понимать основной принцип масштабируемости,Крайне важно понимать и избегать распространенных анти-шаблонов производительности. Так же, как заниматься программированием,Нам необходимо знать различные шаблоны проектирования.,Также помните о различных неприятных запахах в программировании. Вот некоторые распространенные антипаттерны, их влияние на производительность системы и что с ними делать.
Вообще говоря, для крупномасштабных кластеров мы можем оптимизировать запросы путем координации узлов, чтобы снизить нагрузку на узлы данных и избежать влияния на пропускную способность записи из-за сложных запросов. Но часто из-за небрежности в проектировании весь трафик на стороне записи все равно сначала направляется на координационный узел:
Описание проблемы:
Координационный узел в основном используется для распределения и сортировки запросов. Если большое количество запросов также отправляется непосредственно в координационный узел, это станет узким местом, как показано в сценарии на рисунке.
Если данные сначала отправляются на координационный узел, то координационный узел станет узким местом.
Решение:
Избегайте использования координационных узлов для записи данных и записывайте данные непосредственно на узлы обработки (например, «горячие» узлы), чтобы улучшить использование ресурсов и пропускную способность системы.
Иллюстрация:
Описание проблемы:
В некоторых наших обычных проектах архитектуры мы можем видеть следующую архитектуру. Мы можем хранить данные в течение 7 дней в горячем слое и 14 дней в теплом слое. Мы оцениваем количество теплых узлов в зависимости от объема данных. размер
Однако такая архитектура будет иметь следующие проблемы:
Решение:
Иллюстрация:
Описание проблемы:
Большое количество сегментов и небольшие пакетные записи могут привести к резкому увеличению количества операций ввода-вывода в секунду и серьезно повлиять на производительность системы хранения. Например, размер пакета Logstash по умолчанию составляет 125 документов, предполагая, что данные за 7 лет распределены по 7 индексам, каждый из которых имеет 50–100 сегментов, что в общей сложности составляет 500 сегментов. В результате на каждый сегмент записывается в среднем 0,25 документов, что приводит к чрезвычайно низкой производительности записи — только один документ на запись.
Решение:
Оптимизируйте размер пакета и стратегию сегментирования, чтобы уменьшить количество пустых и малонагруженных сегментов. Убедитесь, что каждая операция записи максимально эффективна, и избегайте слишком большого количества небольших пакетов записи.
Проектирование эффективного и масштабируемого кластера Elasticsearch требует рассмотрения многих факторов: от стратегии сегментирования до настройки роли узла и изоляции рабочей нагрузки. Избегая распространенных антишаблонов и следуя принципам проектирования масштабируемости, вы можете значительно повысить производительность и стабильность вашего кластера. Мы надеемся, что принципы и практические примеры, представленные в этой статье, помогут пользователям лучше понять и применить концепцию масштабируемости Elasticsearch.
Надеюсь, эта статья поможет вам! Если у вас есть какие-либо вопросы или вам требуется дополнительная поддержка, пожалуйста, свяжитесь с нашей технической командой.