summaryrefslogtreecommitdiffstats
path: root/yql/essentials/udfs/common/python
diff options
context:
space:
mode:
authoriofik <[email protected]>2025-10-02 13:30:11 +0300
committeriofik <[email protected]>2025-10-02 13:53:21 +0300
commitea1a91993977153ce5528ce8fef162f9b1b9e366 (patch)
tree2aa0d459a2db8fdcfae9bf73d00dee7ada048635 /yql/essentials/udfs/common/python
parent0b03f6a2e0882544541d44b4b98ce877f1578bcc (diff)
/1: Специализированный Multishard Metrics Store для быстрой отдачи метрик в Multishard Metrics Pull
## С точки зрения пользователя ### 1. Как включать изменения - Изменения автоматически активируются при использовании `metrics_pull_output_par` параметра - Количество тредов в тредпуле устанавливается параметром `metrics_pull_output_threads` (по-умолчанию 1) - Совместимо с существующими конфигурациями метрик #### Пример конфигурации: ```yaml experimental: metrics_pull_output_par: true metrics_pull_output_threads: 16 ``` ### 2. На что влияют изменения - **Производительность обработки метрик:** Группировка метрик по шардам теперь происходит один раз в момент записи сообщения в хранилище - **Масштабируемость:** Параллельная обработка команд на запись и чтение сообщений ## С точки зрения программиста ### 1. Новая архитектура и взаимодействие #### Архитектура шардирования ``` TMultishardMetricsStoreHandler ↓ TShardedMetricsQueue ↓ TUAShardedMetricsWriter → IMultiShardEncoder ``` #### Принцип работы 1. **Шардирование:** Метрики группируются по ключу `(project, service, cluster)` из лейблов `__ua_project`, `__ua_service`, `__ua_cluster` 2. **Сортировка:** Внутри каждого сообщения метрики сортируются по ключам шардов 3. **Слияние:** При чтении используется priority queue для объединения шардов из разных сообщений 4. **Вывод:** Данные выводятся последовательно по шардам а внутри шарда в порядке добавления сообщений ### 2. Новые классы #### `TMultishardMetricsStoreHandler` - **Назначение:** Основной обработчик команд для шардированных метрик - **Ключевые методы:** - `Handle(TWriteCmd&)` - запись метрик в очередь - `Handle(TMultishardReadCmd&)` - чтение из множественных шардов - `Handle(TReadCmd&)` - чтение из одного шарда - не поддерживатся - Обработчики остальных сообщений адаптированы для работы с `TShardedMetricsQueue` - **Особенности:** Управляет сессиями и делегирует работу с данными в `TShardedMetricsQueue` #### `TShardedMetricsQueue` - **Назначение:** Очередь метрик с поддержкой шардирования - **Ключевые структуры:** ```cpp struct TShardedMessage { std::unique_ptr<TOutputMessage> Message; std::vector<TChunk> Chunks; // Индексы шардов }; ``` - **Алгоритм:** Сортировка метрик по шардам + priority queue для слияния при чтении #### `IUAShardedMetricsWriter` + `TUAShardedMetricsWriter` - **Назначение:** Интерфейс и реализация для записи шардированных метрик - **Расширение:** Добавляет методы `OnShardBegin/End`, `OnStreamBegin/End` к базовому `IUAMetricsWriter` - **Интеграция:** Работает с `NSolomon::NMultiShard::IMultiShardEncoder` ### 3. Рефакторинг #### Изменения в базовых классах - **`TMetricsStoreHandlerBase`:** Вынесен метод `GetMetricsWriterOptions()` для переиспользования - **`TUAMetricsWriter`:** Добавлено `virtual` наследование для множественного наследования !!! - **`TOutputItem`:** Изменена видимость конструктора (убран лишний `private`) #### Структурные изменения - **Новый модуль:** `metrics_multishard_pull_output` с собственными классами - **Тесты:** Добавлены unit-тесты `sharded_metrics_queue_ut.cpp` для проверки логики шардирования, а интеграционные тесты продублированы для проверки работы в параллельном режиме - **Сборка:** Обновлен `ya.make` для включения новых файлов commit_hash:44618a480d29307e7131b82b19473d284ea68efa
Diffstat (limited to 'yql/essentials/udfs/common/python')
0 files changed, 0 insertions, 0 deletions