В сценариях масштабной загрузки данных, таких как аналитика журналов и мониторинг в реальном времени, традиционный механизм маршрутизации OpenSearch может генерировать избыточные внутренние запросы переадресации по мере увеличения количества шардов индекса и пропускной способности записи. Это может привести к write rejections и росту задержки в длинном хвосте. Для решения этой проблемы CSS предоставляет несколько способов повышения производительности ingesting: bulk routing, bulk aggregation, text indexing acceleration и merge optimization. Они позволяют снизить накладные расходы и значительно улучшить стабильность записи и пропускную способность в условиях высокой нагрузки.
Для балансировки производительности и функциональности CSS предоставляет четыре решения по повышению производительности загрузки. Основная идея заключается в устранении или смягчении узких мест производительности за счёт снижения межузловой коммуникации и ускорения построения индекса.
Solution | Description | When to Use | Details |
|---|---|---|---|
Bulk routing | Bulk routing уменьшает межузловую коммуникацию и переадресацию запросов координатором, помогая предотвратить write rejections. Как это работает: вместо маршрутизации каждого документа отдельно по его ID (поведение по умолчанию) эта оптимизация заставляет несколько документов из одного bulk‑запроса маршрутизироваться совместно к одному шару или локальному узлу. | Включите эту функцию для масштабных кластеров с большим количеством шардов. Она особенно эффективна, когда пропускная способность bulk‑запросов настолько высока, что исчерпывает сетевой ввод‑вывод или ресурсы CPU координаторного узла. | |
Bulk aggregation | Bulk aggregation снижает нагрузку на систему и повышает ёмкость отдельного узла, минимизируя конкуренцию за блокировки ресурсов во время операций записи. Как это работает: вместо обработки документов по отдельности в рамках одного bulk‑запроса система обрабатывает их как единый пакет, уменьшая выделения памяти и конкуренцию за блокировки. | Включите эту функцию для сценариев записи с ультра‑высокой конкуренцией, где критична пропускная способность. Мы рекомендуем включать её, когда мониторинг показывает высокую загрузку системного CPU или значительное давление на выделение памяти. | |
Text indexing acceleration | Text indexing acceleration значительно ускоряет индексацию текстовых и ключевых полей. Как это работает: благодаря оптимизированному процессу индексации, улучшенному использованию памяти и ускоренной токенизации эта функция повышает общую эффективность обработки текста. | Включите эту функцию, когда требуется быстрое построение индекса с относительно простой логикой токенизации. Примеры таких сценариев включают аудит журналов и полнотекстовый поиск, где обрабатываются тексты большого объёма и множество ключевых полей. | |
Merge optimization | Merge optimization обеспечивает стабильность записи, предотвращая ограничение записи, вызванное медленным слиянием сегментов. Как это работает: динамически увеличивая количество потоков слияния для шардов индекса, эта функция ускоряет объединение небольших сегментов и своевременно освобождает пространство кэша записи. | Включите эту функцию в сценариях записи с высокой частотой, особенно когда пропускная способность записи резко возрастает после включения трёх вышеуказанных оптимизаций, и записи становятся нестабильными из‑за ограничения слияния. |
Только кластеры OpenSearch 1.3.6 и 2.19.0 поддерживают повышение производительности ingest данных.
Войдите в OpenSearch Dashboards и перейдите на страницу выполнения команд. Кластеры OpenSearch поддерживают несколько методов доступа. В этой теме в качестве примера используется OpenSearch Dashboards для описания процедур выполнения.
Левая часть консоли представляет собой поле ввода команд, а треугольный значок в её правом верхнем углу является кнопкой выполнения. Правая часть отображает результат выполнения.
После включения bulk routing (то есть, index.bulk_routing установлен в значение pack или local_pack), документы больше не маршрутизируются по ID. Это может повлиять на функции, связанные с маршрутизацией. Например, запросы GET по ID могут завершиться ошибкой, поскольку шарды не могут быть найдены.
Включите bulk routing, чтобы снизить нагрузку на перенаправление запросов у узла, получающего запросы.
PUT /{index_name}/_settings{"index.bulk_routing": "local_pack"}
Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
index_name | String | N/A | Указывает один или несколько индексов.
|
index.bulk_routing | String | default | Указывает внутреннюю политику маршрутизации для обработки документов в bulk‑запросах записи.
|
Включите bulk aggregation, чтобы система обрабатывала документы в каждом bulk‑запросе как единый пакет, а не обрабатывала каждый документ отдельно. Это значительно снижает нагрузку на CPU и конкуренцию за блокировки при операциях записи с ультра‑высокой параллельностью.
PUT /{index_name}/_settings{"index.aggr_perf_batch_size": "128"}
Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
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) |
Ускорение индексации текста нельзя включить для индексов, чья mapping содержит nested fields. Система не сможет запустить ускорение из‑за проблем совместимости.
Включите ускорение индексации текста, чтобы ускорить индексацию полей типа text и keyword.
PUT /{index_name}/_settings{"index.native_speed_up": true,"index.native_analyzer": true}
Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
index.native_speed_up | Boolean | false | Определяет, включить ли ускорение индексации текста. Значение может быть:
|
index.native_analyzer | Булево | false | Нужно ли включать ускорение токенизации. Этот параметр доступен только когда index.native_speed_up установлен в true, и применяется только к текстовым полям. Значение может быть:
|
Увеличьте количество потоков, используемых для слияния сегментов в индексных шардах. Это помогает предотвратить ограничение записи, вызванное медленным слиянием сегментов.
PUT /{index_name}/_settings{"index.merge.scheduler.max_thread_count": 8}
Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
index.merge.scheduler.max_thread_count | Целое | 4 | Указывает максимальное количество потоков, используемых для объединения сегментов в одном шарде. Диапазон значений: от 1 до (Количество ядер CPU на узле/2) Рекомендуемое значение — 8. Оно позволяет ускорить объединение сегментов, используя многопоточную архитектуру процессоров, устраняя ограничение записи, вызванное медленным объединением сегментов. Однако необходимо убедиться, что узлы кластера имеют достаточное количество ядер CPU для выполнения этих потоков. |