summaryrefslogtreecommitdiffstats
path: root/library/cpp
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 /library/cpp
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 'library/cpp')
-rw-r--r--library/cpp/unified_agent_client/dynamic_counters_wrapper.h10
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 {