Обзор проекта 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_URL | URL RabbitMQ | amqp://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/
Документация
📚 Основная документация
- Руководство по интеграции — интеграция компонентов системы
- Worker Pool оптимизация — система управления воркерами
- Hot Reload и алерты — динамическая конфигурация
- Аналитика для RL-агентов — сервис аналитики
🔧 Техническая документация
- Генетический алгоритм — оптимизация параметров
- Динамические алерты — система мониторинга
- Оптимальные проценты выборки — стратегии сэмплирования
- Результаты A/B тестов — анализ производительности
Контакты и поддержка
- Issues: Создавайте issues для багов и предложений
- Pull Requests: Приветствуются улучшения и новые функции
- Documentation: Помогайте улучшать документацию
RecipientOFQuotes-Worker — высокопроизводительная система для автоматизации торговых стратегий с использованием AI/ML технологий.