Обзор проекта RecipientOFQuotes-Worker

Обзор проекта RecipientOFQuotes-Worker

Описание проекта

RecipientOFQuotes-Worker — это высокопроизводительная система для автоматизации торговых стратегий с использованием AI/ML технологий. Проект реализован на Go и поддерживает масштабируемую архитектуру с использованием очередей (RabbitMQ), баз данных (PostgreSQL и ClickHouse) и модульной бизнес-логики.

Архитектура системы

graph TB
    subgraph "Внешние системы"
        API[API бирж]
        PG[(Postgres<br/>Котировки)]
        CH[(ClickHouse<br/>Котировки)]
        PG2[(Postgres<br/>StateStorage<br/>История)]
        MQ[RabbitMQ]
    end
    
    subgraph "RecipientOFQuotes-Worker"
        subgraph "Входные компоненты"
            TW[TaskWorker]
            Scheduler[Scheduler]
            Backup[BackupWorker]
        end
        
        subgraph "Обработка данных"
            DM[DataManager]
            Analytics[AnalyticsService]
        end
        
        subgraph "AI/ML компоненты"
            RL[RL Agent]
            GA[Genetic Algorithm]
            AB[AB Tests]
        end
        
        subgraph "Инфраструктура"
            CB[Circuit Breaker]
            Profiler[Profiler]
            Alerts[AlertingService]
            SS[StateStorage]
            Observability[Observability]
        end
        
        subgraph "Управление"
            Config[Config Manager]
            Health[Health Service]
        end
    end
    
    API --> TW
    PG -->|Котировки| DM
    CH -->|Котировки| DM
    PG2[(Postgres<br/>StateStorage)] -.->|История состояний| SS
    MQ --> Scheduler
    MQ --> Backup
    TW --> Analytics
    Analytics --> RL
    RL --> GA
    GA --> AB
    AB --> SS
    SS --> GA
    DM --> CB
    CB --> Profiler
    Profiler --> Alerts
    Config --> Health
    Analytics --> Observability

Основные компоненты

🤖 AI/ML компоненты

Reinforcement Learning Agent

  • Назначение: Адаптивный агент для оптимизации торговых стратегий
  • Возможности:
    • Q-learning с адаптивными параметрами
    • Динамическая настройка alpha, gamma, epsilon
    • Интеграция с техническими индикаторами
    • Управление рисками через критерий Келли

Genetic Algorithm Optimizer

  • Назначение: Генетический алгоритм для поиска оптимальных параметров
  • Возможности:
    • Эволюционная оптимизация параметров
    • Адаптивная популяция
    • Мультиобъективная оптимизация
    • Параллельная обработка

A/B Testing Framework

  • Назначение: Система A/B тестирования стратегий
  • Возможности:
    • Сравнение различных конфигураций
    • Статистический анализ результатов
    • Автоматическая оптимизация параметров
    • Meta Learning для накопления знаний
    • Transfer Learning для переноса знаний между задачами
    • State Persistence для защиты от потери данных

📊 Аналитика и мониторинг

Real-time Analytics

  • Назначение: Аналитика котировок в реальном времени
  • Возможности:
    • Технические индикаторы (RSI, MACD, ATR, Bollinger Bands)
    • Волатильность и тренды
    • Паттерны и сигналы

Performance Profiling

  • Назначение: Профилирование производительности
  • Возможности:
    • CPU и memory profiling
    • Метрики производительности
    • Оптимизация критических путей

Circuit Breaker Pattern

  • Назначение: Защита от сбоев внешних сервисов
  • Возможности:
    • Автоматическое восстановление
    • Настраиваемые пороги и таймауты
    • Мониторинг состояния сервисов

Dynamic Alerting

  • Назначение: Динамическая система алертов
  • Возможности:
    • Множественные каналы уведомлений
    • Готовые правила для мониторинга
    • Создание пользовательских правил

⚡ Производительность

Worker Pool

  • Назначение: Управление параллелизмом
  • Возможности:
    • Ограничение параллелизма
    • Graceful shutdown
    • Метрики Prometheus
    • Настраиваемые таймауты

Hot Reload

  • Назначение: Перезагрузка конфигурации без перезапуска
  • Возможности:
    • Автоматическое применение изменений
    • Валидация конфигурации
    • Уведомления подписчиков

Data Manager

  • Назначение: Эффективное управление данными в памяти
  • Возможности:
    • Индексация для быстрого поиска
    • Управление жизненным циклом данных
    • Метрики производительности

Batch Processing

  • Назначение: Батчевая обработка больших объемов данных
  • Возможности:
    • Параллельная обработка
    • Кэширование результатов
    • Сэмплирование для ускорения

💾 Хранилища данных

PostgreSQL (Котировки)

  • Назначение: Реляционная БД для хранения котировок (основное хранилище)
  • Возможности:
    • Хранение исторических данных котировок
    • Быстрый доступ к данным
    • Транзакционная целостность
    • Используется как основное хранилище котировок

ClickHouse (Котировки)

  • Назначение: Высокопроизводительная аналитическая БД для хранения котировок
  • Возможности:
    • Обработка больших объемов данных котировок
    • Аналитические запросы
    • Высокая производительность
    • Альтернатива PostgreSQL для котировок

StateStorage (PostgreSQL - История)

  • Назначение: Отдельная БД PostgreSQL для хранения истории состояний
  • Возможности:
    • История состояний Meta Learning, Transfer Learning и GA checkpoints
    • История прогресса воркеров (worker_progress)
    • Отдельная БД от хранилища котировок
    • Поддержка схем PostgreSQL для изоляции данных
    • Автоматические миграции через golang-migrate
    • Защита от потери данных при перезапусках подов
    • Глобальное хранилище знаний, доступное всем воркерам
    • Оптимистичные блокировки для конкурентного доступа

RabbitMQ

  • Назначение: Очередь сообщений для распределенной обработки
  • Возможности:
    • Асинхронная обработка задач
    • Масштабируемость
    • Надежность доставки

Жизненный цикл системы

sequenceDiagram
    participant Main as Main
    participant Config as Config Manager
    participant Services as Service Container
    participant Data as Data Manager
    participant RL as RL Agent
    participant GA as Genetic Algorithm
    participant Alerts as Alerting Service
    participant SS as StateStorage
    
    Main->>Config: LoadConfig()
    Config->>Services: ColdStart()
    Services->>SS: Initialize()
    Services->>Data: Initialize()
    Services->>RL: Initialize()
    Services->>GA: Initialize()
    Services->>Alerts: Initialize()
    
    loop Runtime
        Services->>Data: LoadData()
        Data->>RL: ProcessQuotes()
        RL->>GA: OptimizeParameters()
        GA->>SS: SaveCheckpoint()
        SS->>GA: RestoreCheckpoint()
        GA->>Alerts: CheckPerformance()
        Alerts->>Services: SendAlerts()
    end
    
    Main->>Services: GracefulShutdown()

Метрики и мониторинг

Prometheus метрики

graph LR
    subgraph "Метрики системы"
        WP[Worker Pool]
        RL[RL Agent]
        GA[Genetic Algorithm]
        CB[Circuit Breaker]
        DM[Data Manager]
        AL[Alerts]
    end
    
    subgraph "Экспорт"
        Prometheus[Prometheus]
        Grafana[Grafana]
    end
    
    WP --> Prometheus
    RL --> Prometheus
    GA --> Prometheus
    CB --> Prometheus
    DM --> Prometheus
    AL --> Prometheus
    Prometheus --> Grafana

Основные метрики:

  • Worker Pool: workerpool_* — метрики пулов воркеров
  • RL Agent: rl_agent_* — метрики RL-агентов
  • Genetic Algorithm: ga_* — метрики генетического алгоритма
  • Circuit Breaker: circuit_breaker_* — состояние circuit breakers
  • Data Manager: data_manager_* — статистика управления данными
  • Alerts: alerts_* — метрики системы алертов

Health checks:

  • /health — общее состояние сервиса
  • /metrics — Prometheus метрики
  • /debug/pprof/* — профилирование

Конфигурация

Основные секции config.yaml:

system_setup:
  log_level: "info"                # Уровень логирования
  metrics_port: 8080               # Порт для метрик
  pprof_port: 9080                 # Порт для профилирования
  worker_pool:
    task_worker:
      max_workers: 5               # Максимум воркеров
      queue_size: 50               # Размер очереди
      task_timeout: "30s"          # Таймаут задач
    ab_optimizer:
      max_workers: 12              # Воркеры для оптимизации
      queue_size: 200              # Очередь оптимизации
      task_timeout: "1200s"        # Таймаут оптимизации

storage:
  postgres:
    db_user: "quotes"
    db_password: "1qazxsw2"
    db_host: "localhost:5432"
    db_name: "quotes"
  clickhouse:
    db_user: "default"
    db_password: ""
    db_host: "localhost:9000"
    db_name: "quotes"
  rabbitmq:
    url: "amqp://user:user@localhost:5672/"

state_storage:
  db_user: "states"                          # Имя пользователя БД состояний
  db_password: "password"                    # Пароль пользователя БД состояний
  db_host: "localhost:5432"                  # Адрес и порт БД состояний
  db_name: "ml_states"                       # Имя базы данных состояний
  schema: "public"                           # Схема БД (по умолчанию "public")
  migrations_path: "migrations"              # Путь к миграциям
  auto_migrate: true                         # Автоматическое применение миграций при старте

ab_tests:
  enabled: true                    # Включить A/B тесты
  exchange: "binance"              # Биржа для тестов
  pair: "TONUSDT"                  # Торговая пара
  data_period: "24h"               # Период данных
  experiment:
    id: "test_experiment"
    parallelism: 5                 # Параллелизм
    ga:
      generations: 20              # Поколения GA
      population_size: 50          # Размер популяции
      mutation_rate: 0.15          # Вероятность мутации
  meta_learning:
    enabled: false                 # Включить Meta Learning
    knowledge_retention_days: 30   # Дни хранения знаний
    min_tasks_for_learning: 5      # Минимальное количество задач для обучения
  transfer_learning:
    enabled: false                 # Включить Transfer Learning
    use_similar_exchanges: true    # Использовать похожие биржи
    use_similar_pairs: true        # Использовать похожие пары
    max_source_tasks: 10           # Максимальное количество source tasks
  state_management:
    enabled: true                  # Включить управление состоянием
    checkpoint_interval: 5         # Интервал сохранения checkpoint'ов (каждые N поколений)
    retention_days: 7              # Дни хранения checkpoint'ов

ai_config:
  allow_trading: false             # Разрешить торговлю
  kelly:
    use_kelly: true                # Использовать критерий Келли
    window_type: "trades"          # Тип окна
    window_size: "200"             # Размер окна
  rl:
    alpha: 0.2                     # Коэффициент обучения
    gamma: 0.85                    # Коэффициент дисконтирования
    epsilon: 0.3                   # Вероятность случайного действия

Переменные окружения

ПеременнаяОписаниеПо умолчанию
LOG_LEVELУровень логированияinfo
METRICS_PORTПорт для метрик8080
PPROF_PORTПорт для профилирования9080
DB_USERПользователь БД (Postgres)quotes
DB_PASSWORDПароль БД (Postgres)1qazxsw2
DB_HOSTХост БД (Postgres)localhost:5432
DB_NAMEИмя БД (Postgres)quotes
CLICKHOUSE_DB_USERПользователь БД (ClickHouse)default
CLICKHOUSE_DB_PASSWORDПароль БД (ClickHouse)-
CLICKHOUSE_DB_HOSTХост БД (ClickHouse)localhost:9000
CLICKHOUSE_DB_NAMEИмя БД (ClickHouse)quotes
RABBITMQ_URLURL RabbitMQamqp://user:user@localhost:5672/
ENABLE_AB_TESTSВключить A/B тестыtrue
AB_TEST_EXCHANGEБиржа для тестовbinance
AB_TEST_PAIRТорговая параTONUSDT
STATE_STORAGE_DB_USERПользователь БД состоянийstates
STATE_STORAGE_DB_PASSWORDПароль БД состоянийpassword
STATE_STORAGE_DB_HOSTХост БД состоянийlocalhost:5432
STATE_STORAGE_DB_NAMEИмя БД состоянийml_states
STATE_STORAGE_SCHEMAСхема БД состоянийpublic
STATE_STORAGE_MIGRATIONS_PATHПуть к миграциямmigrations
STATE_STORAGE_AUTO_MIGRATEАвтоматическое применение миграцийtrue

Структура проекта

graph TB
    subgraph "RecipientOFQuotes-Worker"
        CMD[cmd/]
        INT[internal/]
        PKG[pkg/]
        CFG[configs/]
        DOCS[docs/]
        
        subgraph "internal/"
            ALERTS[alerts/]
            CONFIG[config/]
            HEALTH[health/]
            MODEL[model/]
            OBSERVABILITY[observability/]
            SERVICES[services/]
            STORAGE[storage/]
            
            subgraph "services/"
                ANALYTICS[analytics/]
                DATA[data/]
                MESSAGING[messaging/]
                RL_AGENT[rl_agent/]
                AB_OPT[ab_optimizer/]
                BACKUP[backup/]
                TASK_HANDLERS[task_handlers/]
            end
        end
        
        subgraph "pkg/"
            AB_METRICS[abmetrics/]
            ANALYTICS_METRICS[analyticsmetrics/]
            CIRCUIT_BREAKER[circuitbreaker/]
            DATA_METRICS[datametrics/]
            HEALTH_METRICS[healthmetrics/]
            LOGGER[logger/]
            POSTGRES_METRICS[postgresmetrics/]
            PROFILING[profiling/]
            RL_METRICS[rlmetrics/]
            UTILS[utils/]
            WORKERPOOL[workerpool/]
        end
    end
    
    CMD --> INT
    INT --> SERVICES
    INT --> STORAGE
    SERVICES --> ANALYTICS
    SERVICES --> DATA
    SERVICES --> MESSAGING
    SERVICES --> RL_AGENT
    SERVICES --> AB_OPT
    SERVICES --> BACKUP
    SERVICES --> TASK_HANDLERS
    PKG --> AB_METRICS
    PKG --> ANALYTICS_METRICS
    PKG --> CIRCUIT_BREAKER
    PKG --> DATA_METRICS
    PKG --> HEALTH_METRICS
    PKG --> LOGGER
    PKG --> POSTGRES_METRICS
    PKG --> PROFILING
    PKG --> RL_METRICS
    PKG --> UTILS
    PKG --> WORKERPOOL

Принципы разработки

  • Dependency Injection — используйте DI для управления зависимостями
  • Interface Segregation — создавайте специализированные интерфейсы
  • Circuit Breaker Pattern — защищайте от сбоев внешних сервисов
  • Graceful Shutdown — корректно завершайте работу сервисов
  • Observability — добавляйте метрики и логирование

Быстрый старт

Предварительные требования

# Установка зависимостей
go mod download

# Запуск PostgreSQL для котировок
docker run -d --name postgres-quotes \
  -e POSTGRES_DB=quotes \
  -e POSTGRES_USER=quotes \
  -e POSTGRES_PASSWORD=1qazxsw2 \
  -p 5432:5432 postgres:15

# Запуск ClickHouse для котировок (опционально, альтернатива PostgreSQL)
docker run -d --name clickhouse-quotes \
  -e CLICKHOUSE_DB=quotes \
  -e CLICKHOUSE_USER=default \
  -e CLICKHOUSE_PASSWORD= \
  -p 9000:9000 \
  -p 8123:8123 \
  clickhouse/clickhouse-server:latest

# Запуск RabbitMQ
docker run -d --name rabbitmq \
  -e RABBITMQ_DEFAULT_USER=user \
  -e RABBITMQ_DEFAULT_PASS=user \
  -p 5672:5672 -p 15672:15672 rabbitmq:3-management

# Запуск PostgreSQL для StateStorage (отдельная БД для истории состояний)
docker run -d --name postgres-states \
  -e POSTGRES_DB=ml_states \
  -e POSTGRES_USER=states \
  -e POSTGRES_PASSWORD=password \
  -p 5433:5432 postgres:15

Запуск приложения

# Сборка
go build -o worker ./cmd

# Запуск
./worker

# Или через go run
go run ./cmd/main.go

Проверка работоспособности

# Health check
curl http://localhost:8080/health

# Метрики Prometheus
curl http://localhost:8080/metrics

# Профилирование
curl http://localhost:9080/debug/pprof/

Документация

📚 Основная документация

🔧 Техническая документация

Контакты и поддержка

  • Issues: Создавайте issues для багов и предложений
  • Pull Requests: Приветствуются улучшения и новые функции
  • Documentation: Помогайте улучшать документацию

RecipientOFQuotes-Worker — высокопроизводительная система для автоматизации торговых стратегий с использованием AI/ML технологий.