diff options
| author | iofik <[email protected]> | 2025-10-02 13:30:11 +0300 |
|---|---|---|
| committer | iofik <[email protected]> | 2025-10-02 13:53:21 +0300 |
| commit | ea1a91993977153ce5528ce8fef162f9b1b9e366 (patch) | |
| tree | 2aa0d459a2db8fdcfae9bf73d00dee7ada048635 /library/cpp | |
| parent | 0b03f6a2e0882544541d44b4b98ce877f1578bcc (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 'library/cpp')
| -rw-r--r-- | library/cpp/unified_agent_client/dynamic_counters_wrapper.h | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/library/cpp/unified_agent_client/dynamic_counters_wrapper.h b/library/cpp/unified_agent_client/dynamic_counters_wrapper.h index 7ae4ea0fa20..e26894397af 100644 --- a/library/cpp/unified_agent_client/dynamic_counters_wrapper.h +++ b/library/cpp/unified_agent_client/dynamic_counters_wrapper.h @@ -5,8 +5,8 @@ namespace NUnifiedAgent { class TDynamicCountersWrapper: public TAtomicRefCount<TDynamicCountersWrapper> { public: - explicit TDynamicCountersWrapper(const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters) - : Counters(counters) + explicit TDynamicCountersWrapper(TIntrusivePtr<NMonitoring::TDynamicCounters> counters) + : Counters_(std::move(counters)) { } @@ -37,16 +37,16 @@ namespace NUnifiedAgent { virtual ~TDynamicCountersWrapper() = default; const TIntrusivePtr<NMonitoring::TDynamicCounters>& Unwrap() const { - return Counters; + return Counters_; } protected: NMonitoring::TDeprecatedCounter& GetCounter(const TString& value, bool derivative) { - return *Counters->GetCounter(value, derivative); + return *Counters_->GetCounter(value, derivative); } private: - TIntrusivePtr<NMonitoring::TDynamicCounters> Counters; + TIntrusivePtr<NMonitoring::TDynamicCounters> Counters_; }; class TUpdatableCounters: public TDynamicCountersWrapper { |
