<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ydb/library/cpp/unified_agent_client/dynamic_counters_wrapper.h, branch CLI_2.31.0</title>
<subtitle>Mirror of YDB github repos</subtitle>
<id>https://code.mastervirt.ru/ydb/atom?h=CLI_2.31.0</id>
<link rel='self' href='https://code.mastervirt.ru/ydb/atom?h=CLI_2.31.0'/>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/'/>
<updated>2025-10-02T10:53:21Z</updated>
<entry>
<title>/1: Специализированный Multishard Metrics Store для быстрой отдачи метрик в Multishard Metrics Pull</title>
<updated>2025-10-02T10:53:21Z</updated>
<author>
<name>iofik</name>
<email>iofik@yandex-team.com</email>
</author>
<published>2025-10-02T10:30:11Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=ea1a91993977153ce5528ce8fef162f9b1b9e366'/>
<id>urn:sha1:ea1a91993977153ce5528ce8fef162f9b1b9e366</id>
<content type='text'>
## С точки зрения пользователя

### 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&amp;)` - запись метрик в очередь
  - `Handle(TMultishardReadCmd&amp;)` - чтение из множественных шардов
  - `Handle(TReadCmd&amp;)` - чтение из одного шарда - не поддерживатся
  - Обработчики остальных сообщений адаптированы для работы с `TShardedMetricsQueue`
- **Особенности:** Управляет сессиями и делегирует работу с данными в `TShardedMetricsQueue`

#### `TShardedMetricsQueue`
- **Назначение:** Очередь метрик с поддержкой шардирования
- **Ключевые структуры:**
  ```cpp
  struct TShardedMessage {
      std::unique_ptr&lt;TOutputMessage&gt; Message;
      std::vector&lt;TChunk&gt; 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
</content>
</entry>
<entry>
<title>separate counters for each file</title>
<updated>2023-02-28T09:17:32Z</updated>
<author>
<name>valerybitsoev</name>
<email>valerybitsoev@yandex-team.com</email>
</author>
<published>2023-02-28T09:17:32Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=38ec3bde944ec1d54c28a316a1b188106145fd27'/>
<id>urn:sha1:38ec3bde944ec1d54c28a316a1b188106145fd27</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Log backend move</title>
<updated>2023-02-09T09:40:11Z</updated>
<author>
<name>hor911</name>
<email>hor911@ydb.tech</email>
</author>
<published>2023-02-09T09:40:11Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=24689527cd888aa8a640ecb5077e656b3520d373'/>
<id>urn:sha1:24689527cd888aa8a640ecb5077e656b3520d373</id>
<content type='text'>
</content>
</entry>
</feed>
