Облачная платформаAdvanced

Повышение производительности загрузки данных

Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

В сценариях масштабной загрузки данных, таких как аналитика журналов и мониторинг в реальном времени, традиционный механизм маршрутизации OpenSearch может генерировать избыточные внутренние запросы переадресации по мере увеличения количества шардов индекса и пропускной способности записи. Это может привести к write rejections и росту задержки в длинном хвосте. Для решения этой проблемы CSS предоставляет несколько способов повышения производительности ingesting: bulk routing, bulk aggregation, text indexing acceleration и merge optimization. Они позволяют снизить накладные расходы и значительно улучшить стабильность записи и пропускную способность в условиях высокой нагрузки.

Как работает функция

Для балансировки производительности и функциональности CSS предоставляет четыре решения по повышению производительности загрузки. Основная идея заключается в устранении или смягчении узких мест производительности за счёт снижения межузловой коммуникации и ускорения построения индекса.

Table 1 Способы повышения производительности загрузки данных

Solution

Description

When to Use

Details

Bulk routing

Bulk routing уменьшает межузловую коммуникацию и переадресацию запросов координатором, помогая предотвратить write rejections.

Как это работает: вместо маршрутизации каждого документа отдельно по его ID (поведение по умолчанию) эта оптимизация заставляет несколько документов из одного bulk‑запроса маршрутизироваться совместно к одному шару или локальному узлу.

Включите эту функцию для масштабных кластеров с большим количеством шардов. Она особенно эффективна, когда пропускная способность bulk‑запросов настолько высока, что исчерпывает сетевой ввод‑вывод или ресурсы CPU координаторного узла.

Настройка Bulk Routing

Bulk aggregation

Bulk aggregation снижает нагрузку на систему и повышает ёмкость отдельного узла, минимизируя конкуренцию за блокировки ресурсов во время операций записи.

Как это работает: вместо обработки документов по отдельности в рамках одного bulk‑запроса система обрабатывает их как единый пакет, уменьшая выделения памяти и конкуренцию за блокировки.

Включите эту функцию для сценариев записи с ультра‑высокой конкуренцией, где критична пропускная способность. Мы рекомендуем включать её, когда мониторинг показывает высокую загрузку системного CPU или значительное давление на выделение памяти.

Настройка Bulk Aggregation

Text indexing acceleration

Text indexing acceleration значительно ускоряет индексацию текстовых и ключевых полей.

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

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

Настройка Text Indexing Acceleration

Merge optimization

Merge optimization обеспечивает стабильность записи, предотвращая ограничение записи, вызванное медленным слиянием сегментов.

Как это работает: динамически увеличивая количество потоков слияния для шардов индекса, эта функция ускоряет объединение небольших сегментов и своевременно освобождает пространство кэша записи.

Включите эту функцию в сценариях записи с высокой частотой, особенно когда пропускная способность записи резко возрастает после включения трёх вышеуказанных оптимизаций, и записи становятся нестабильными из‑за ограничения слияния.

Настройка Merge Optimization

Ограничения

Только кластеры OpenSearch 1.3.6 и 2.19.0 поддерживают повышение производительности ingest данных.

Вход в OpenSearch Dashboards

Войдите в OpenSearch Dashboards и перейдите на страницу выполнения команд. Кластеры OpenSearch поддерживают несколько методов доступа. В этой теме в качестве примера используется OpenSearch Dashboards для описания процедур выполнения.

  1. Войдите в консоль управления CSS.
  2. В левой панели навигации выберите Clusters > OpenSearch.
  3. В списке кластеров найдите целевой кластер и нажмите Dashboards в столбце Operation, чтобы войти в OpenSearch Dashboards.
  4. В левой панели навигации выберите Dev Tools.

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

Настройка Bulk Routing

Caution

После включения bulk routing (то есть, index.bulk_routing установлен в значение pack или local_pack), документы больше не маршрутизируются по ID. Это может повлиять на функции, связанные с маршрутизацией. Например, запросы GET по ID могут завершиться ошибкой, поскольку шарды не могут быть найдены.

Включите bulk routing, чтобы снизить нагрузку на перенаправление запросов у узла, получающего запросы.

PUT /{index_name}/_settings
{
"index.bulk_routing": "local_pack"
}
Table 2 Параметры bulk routing

Параметр

Тип

Значение по умолчанию

Описание

index_name

String

N/A

Указывает один или несколько индексов.

  • Один индекс: введите имя индекса, например, my_index.
  • Несколько индексов: введите несколько имен индексов и используйте запятую (,) для их разделения, например, my_index1,my_index2.
  • Подстановочный символ: используйте подстановочный символ (*) для сопоставления нескольких индексов. Например, myindex* указывает все индексы, имя которых начинается с myindex.

index.bulk_routing

String

default

Указывает внутреннюю политику маршрутизации для обработки документов в bulk‑запросах записи.

  • default: использует поведение маршрутизации по умолчанию. Каждый документ в одном bulk‑запросе хешируется и маршрутизируется отдельно на основе его _id. Это обеспечивает равномерное распределение данных по всем шардам, но может вызвать значительные накладные расходы на пересылку между узлами при масштабных bulk‑записях.
  • pack: маршрутизирует все документы в одном bulk‑запросе к единственному, случайно выбранному шару. Это устраняет вычисления хеша для каждого документа и пересылку между узлами, снижая нагрузку на пересылку запросов у координаторного узла.
  • local_pack (recommended): сначала пытается маршрутизировать все документы в одном bulk‑запросе к локальному шару на узле данных, получившем bulk‑запрос. Если этот узел не содержит шарда целевого индекса, происходит переход в режим pack. Этот вариант рекомендуется, поскольку обеспечивает нулевую пересылку между узлами.

Настройка Bulk Aggregation

Включите bulk aggregation, чтобы система обрабатывала документы в каждом bulk‑запросе как единый пакет, а не обрабатывала каждый документ отдельно. Это значительно снижает нагрузку на CPU и конкуренцию за блокировки при операциях записи с ультра‑высокой параллельностью.

PUT /{index_name}/_settings
{
"index.aggr_perf_batch_size": "128"
}
Table 3 Параметры bulk aggregation

Параметр

Тип

Значение по умолчанию

Описание

index.aggr_perf_batch_size

Integer

1

Указывает максимальное количество документов, обрабатываемых как один пакет.

Минимальное значение: 1 (отключает bulk aggregation, поэтому документы будут обрабатываться по отдельности)

Рекомендуемое значение: 128

Любое значение, превышающее 1, включает bulk aggregation. Система будет внутренне переагрегировать документы из bulk‑запросов в пакеты до указанного размера. Большие размеры пакетов увеличивают потребление памяти на пакет. Настройте этот параметр в соответствии с требованиями нагрузки и доступными системными ресурсами.

Фактическое количество документов в пакете рассчитывается как: MIN(Number of documents within the bulk request, aggr_perf_batch_size)

Настройка Text Indexing Acceleration

Caution

Ускорение индексации текста нельзя включить для индексов, чья mapping содержит nested fields. Система не сможет запустить ускорение из‑за проблем совместимости.

Включите ускорение индексации текста, чтобы ускорить индексацию полей типа text и keyword.

PUT /{index_name}/_settings
{
"index.native_speed_up": true,
"index.native_analyzer": true
}
Таблица 4 Параметры ускорения индексации текста

Параметр

Тип

Значение по умолчанию

Описание

index.native_speed_up

Boolean

false

Определяет, включить ли ускорение индексации текста.

Значение может быть:

  • true: Включает ускорение индексации текста. Это значительно ускорит индексацию полей типа text и keyword, оптимизирует использование памяти во время индексации и уменьшит частоту сборки мусора (GC), вызываемой частыми записями.
  • false: Отключает ускорение индексации текста.

index.native_analyzer

Булево

false

Нужно ли включать ускорение токенизации.

Этот параметр доступен только когда index.native_speed_up установлен в true, и применяется только к текстовым полям.

Значение может быть:

  • true: Включает ускорение токенизации. Это значительно сократит время CPU, затрачиваемое на токенизацию.
  • false: Отключает ускорение токенизации.

Настройка оптимизации слияния

Увеличьте количество потоков, используемых для слияния сегментов в индексных шардах. Это помогает предотвратить ограничение записи, вызванное медленным слиянием сегментов.

PUT /{index_name}/_settings
{
"index.merge.scheduler.max_thread_count": 8
}
Table 5 Параметры слияния сегментов

Параметр

Тип

Значение по умолчанию

Описание

index.merge.scheduler.max_thread_count

Целое

4

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

Диапазон значений: от 1 до (Количество ядер CPU на узле/2)

Рекомендуемое значение — 8. Оно позволяет ускорить объединение сегментов, используя многопоточную архитектуру процессоров, устраняя ограничение записи, вызванное медленным объединением сегментов. Однако необходимо убедиться, что узлы кластера имеют достаточное количество ядер CPU для выполнения этих потоков.