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

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

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

Обзор

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

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

Метод

Описание

Подробности

Оптимизация bulk‑маршрутизации

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

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

массовая оптимизация агрегации

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

Text index acceleration

Вы можете настроить index.native_speed_up для включения или отключения ускорения текстового индекса. Эта настройка оптимизирует процесс индексирования и доступ к памяти, ускоряя построение индекса для текстовых полей (text и keyword). Когда ускорение текстового индекса включено, вы можете настроить index.native_analyzer чтобы также включить ускорение сегментации слов. Для текстов, которым нужна обычная сегментация слов, вы можете использовать анализатор для ускорения сегментации слов.

NOTE:
  • Ускорение сегментации слов можно включить (установив index.native_analyzer to true) только когда ускорение индекса текста включено (установив index.native_speed_up to true). В противном случае ускорение сегментации слов не подействует.
  • Ускорение индекса текста нельзя включить для индексов, содержащих вложенные поля.

Index merge task optimization

Включение трех перечисленных выше параметров оптимизации увеличит количество задач слияния индексов в кластере. Вы можете настроить index.merge.scheduler.max_thread_count для снижения влияния задач слияния индексов на производительность загрузки данных. Оптимизация заключается в увеличении количества потоков слияния шардов и тем самым смягчает ограничение загрузки данных.

Ограничения

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

Предварительные требования

Целевой кластер доступен.

Вход в OpenSearch Dashboards

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

  1. Войдите в консоль управления CSS.
  2. В левой навигационной панели выберите Кластеры > OpenSearch.
  3. В списке кластеров найдите целевой кластер и нажмите Дашборды в Операция столбец для входа в OpenSearch Dashboards.
  4. В левой навигационной панели выберите Dev Tools.

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

Bulk Route Optimization

Вы можете указать index.bulk_routing элемент конфигурации для включения bulk route optimization. Вы можете использовать его для уменьшения количества запросов, которые необходимо перенаправлять внутри системы. Для кластера с большим количеством шардов эта настройка может улучшить производительность записи и снизить отклонения bulk.

Caution

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

Выполните следующую команду, чтобы включить оптимизацию массовой маршрутизации:

PUT my_index
{
"settings": {
"index.bulk_routing": "local_pack"
}
}

Параметры для index.bulk_routing элемент конфигурации выглядит следующим образом:

  • по умолчанию: Используйте механизм маршрутизации по умолчанию. Записи в массовом запросе разбиваются и затем маршрутизируются отдельно.
  • пакет: Все данные одного массового запроса случайным образом маршрутизируются в один и тот же шард.
  • local_pack: Данные одного bulk‑запроса направляются к локальному шарду data‑нода, получившего bulk‑запрос. Если узел не содержит соответствующий индексный шардинг, данные случайным образом перенаправляются к другому узлу, содержащему индексный шардинг. Это решение зависит от случайного распределения bulk‑запросов клиента и сбалансированного распределения первичных шардов.

Оптимизация массовой агрегации

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

Выполните следующую команду для включения оптимизации массовой агрегации:

PUT my_index
{
"settings": {
"index.aggr_perf_batch_size": "128"
}
}

Диапазон значений index.aggr_perf_batch_size элемент конфигурации имеет значение [1, Integer.MAX_VALUE]. Значение по умолчанию — 1, что указывает на отключенную оптимизацию массовой агрегации. Если значение больше 1, оптимизация массовой агрегации включена, значение MIN(bulk_doc_size, aggr_perf_batch_size) указывает размер пакета.

Ускорение текстового индекса

Вы можете настроить index.native_speed_up чтобы включить или отключить ускорение текстового индекса. Эта настройка оптимизирует процесс индексации и доступ к памяти для ускорения построения индекса для текстовых полей (text и keyword). Когда ускорение текстового индекса включено, вы можете настроить index.native_analyzer чтобы также включить ускорение сегментации слов. Для текстов, которым требуется обычная сегментация слов, вы можете использовать анализатор для ускорения сегментации слов.

Caution
  • Ускорение сегментации слов может быть включено (установив index.native_analyzer на true) только когда ускорение текстового индекса включено (установив index.native_speed_up на true). В противном случае ускорение сегментации слов не подействует.
  • Ускорение текстового индекса не может быть включено для индексов, содержащих вложенные поля.

Выполните следующую команду, чтобы включить ускорение текстового индекса:

PUT my_index
{
"settings": {
"index.native_speed_up": true,
"index.native_analyzer": true
}
}

Значения index.native_speed_up и index.native_analyzer являются true или false. Значение по умолчанию — false.

Оптимизация задач объединения индексов

Включение трех перечисленных выше параметров оптимизации увеличит количество задач объединения индексов в кластере. Вы можете настроить index.merge.scheduler.max_thread_count чтобы снизить влияние задач объединения индексов на производительность загрузки данных. Оптимизация заключается в увеличении количества потоков объединения шардов и тем самым в ослаблении ограничения скорости загрузки данных.

Выполните следующую команду, чтобы запустить оптимизацию задачи объединения индексов:

PUT my_index
{
"settings": {
"index.merge.scheduler.max_thread_count": 8
}
}

Диапазон значений index.merge.scheduler.max_thread_count равно [1, node.processors/2]. Значение по умолчанию — 4, а рекомендованное значение — 8.