Реализована полнофункциональная высокопроизводительная система маршрутизации сообщений без блокировок (lock-free), предназначенная для обработки миллионов сообщений в секунду с микросекундными задержками. Система демонстрирует применение современных техник параллельного программирования для построения систем реального времени.
- Файл:
include/spsc_queue.hpp - Особенности:
- Кольцевой буфер с размером степени двойки (65536 элементов)
- Атомарные индексы head и tail
- Cache-line alignment (64 байта) для избежания false sharing
- Memory ordering: acquire/release семантика
- Trivially copyable типы для максимальной производительности
- Файл:
include/mpsc_queue.hpp - Особенности:
- Связный список с атомарными операциями
- Lock-free на стороне producer (CAS операции)
- Поддержка множественных производителей
- Динамическое выделение узлов
- Файл:
include/message.hpp - Размер: ~96 байт (2 cache lines)
- Поля:
- Идентификация: msg_type, producer_id, sequence_number
- Временные метки: 7 точек измерения задержек
- Метаданные обработки: processor_id, processing_ts_ns
- Методы вычисления задержек на каждом этапе
- Файлы:
include/producer.hpp,src/components/producer.cpp - Генерация сообщений с заданной скоростью (до 1M сообщений/сек)
- Вероятностное распределение типов сообщений
- Монотонно возрастающие sequence numbers
- Точный контроль скорости через временные интервалы
- Файлы:
include/processor.hpp,src/components/processor.cpp - Обработка сообщений с имитацией работы (busy-wait)
- Конфигурируемое время обработки по типам (50-2000 наносекунд)
- Добавление метаданных обработки
- Файлы:
include/strategy.hpp,src/components/strategy.cpp - Финальный потребитель сообщений
- Проверка порядка sequence numbers
- Сбор статистики задержек
- Обнаружение нарушений порядка
- Файлы:
include/router.hpp,src/components/router.cpp - Маршрутизация на основе типа сообщения
- Round-robin балансировка (Stage1)
- Busy-waiting для минимальной задержки
- Отметки времени для измерения overhead
- Файлы:
include/config.hpp,src/core/config.cpp - Загрузка из JSON с использованием nlohmann/json
- Валидация конфигурации
- Поддержка 6 тестовых сценариев
- Файлы:
include/statistics.hpp,src/core/statistics.cpp - Реал-тайм мониторинг (каждую секунду)
- Вычисление перцентилей (p50, p90, p99, p99.9, max)
- Отслеживание порядка сообщений для каждого producer
- Проверка потерь сообщений
- Финальный отчет с подробной статистикой
Созданы 6 конфигурационных файлов:
-
baseline.json (10 сек)
- 4 производителя × 1M сообщений/сек
- Равномерное распределение типов
- Базовая проверка корректности
-
hot_type.json (15 сек)
- 70% сообщений одного типа
- Проверка обработки горячих точек
-
burst_pattern.json (20 сек)
- Переменная нагрузка
- Проверка обработки всплесков
-
imbalanced_processing.json (15 сек)
- Разное время обработки (50ns - 2000ns)
- Проверка независимости процессоров
-
ordering_stress.json (10 сек)
- 8 производителей, все шлют в один процессор
- 8M сообщений/сек
- Стресс-тест сохранения порядка
-
strategy_bottleneck.json (20 сек)
- Медленная стратегия (1000ns)
- Проверка backpressure handling
Реализованы 4 типа бенчмарков:
-
queue_benchmark.cpp
- Производительность SPSC очереди
- Throughput и latency измерения
- Влияние размера очереди
-
routing_benchmark.cpp
- Overhead маршрутизации
- Сравнение прямого доступа vs роутинг
-
memory_benchmark.cpp
- Паттерны выделения памяти
- Cache miss анализ
- Влияние размера очереди на производительность
-
scaling_benchmark.cpp
- Масштабирование с количеством producers (1, 2, 4, 8)
- Масштабирование с количеством processors (1, 2, 4, 8)
- Полный pipeline benchmark
- Multi-stage build (builder + runtime)
- Base: Ubuntu 22.04
- Компилятор: Clang-19 (в оригинальном Dockerfile)
- Оптимизации:
-O3 -march=native - Непривилегированный пользователь для безопасности
- Сервис для тестов:
router-test - 4 отдельных сервиса для бенчмарков
- Сервис для запуска всех бенчмарков:
all-benchmarks - Volume mapping для результатов
- Настройки производительности (CPU limits, memory)
Созданы 2 документа:
-
README.md
- Описание проекта и архитектуры
- Инструкции по сборке и запуску
- Docker usage guide
- Troubleshooting
-
ARCHITECTURE.md
- Подробное описание компонентов
- Lock-free алгоритмы
- Memory layout оптимизации
- Trade-offs и дизайн решения
- Гарантии корректности
- Все очереди предалоцированы (65536 элементов)
- Zero allocations на hot path
- Использование
std::unique_ptrдля структур с атомиками (обход проблемы non-movable)
- Busy-waiting для минимальной latency (100% CPU usage trade-off)
- Acquire/release memory ordering (не seq_cst)
- Cache-line alignment для false sharing avoidance
- SPSC очереди между компонентами
- Trivially copyable messages
- Inline критических функций
- Bitwise AND для модульной арифметики (capacity - степень 2)
- Минимизация atomic operations
- FIFO порядок в SPSC очередях
- Детерминированная маршрутизация
- Sequence number tracking
- Проверка порядка в runtime
$ mkdir build && cd build
$ cmake -DCMAKE_BUILD_TYPE=Release ..
$ make -j4
[100%] Built target router_testПри реализации системы статистики были применены следующие паттерны работы с non-movable типами:
-
Хранение атомиков в контейнерах
- Использование
std::unique_ptr<std::atomic<T>>для векторов счетчиков - Позволяет динамически создавать коллекции атомиков без ограничений на move/copy
- Применено в:
SystemStatistics::stage1_queue_depths,stage2_queue_depths
- Использование
-
Композитные структуры с атомиками
- Паттерн indirect storage для
OrderTrackerс атомарными полями - Обеспечивает гибкость при работе с коллекциями tracking объектов
- Минимальный overhead благодаря единичному pointer indirection
- Паттерн indirect storage для
workspace/
├── CMakeLists.txt # Build configuration
├── Dockerfile # Multi-stage Docker build
├── docker-compose.yml # Service orchestration
├── README.md # User documentation
├── ARCHITECTURE.md # Technical documentation
├── REPORT.md # This file
│
├── include/ # Headers (10 files)
│ ├── spsc_queue.hpp
│ ├── mpsc_queue.hpp
│ ├── message.hpp
│ ├── config.hpp
│ ├── statistics.hpp
│ ├── timer.hpp
│ ├── producer.hpp
│ ├── processor.hpp
│ ├── strategy.hpp
│ └── router.hpp
│
├── src/ # Implementation
│ ├── main.cpp # Main application
│ ├── core/
│ │ ├── message.cpp
│ │ ├── config.cpp
│ │ └── statistics.cpp
│ ├── components/
│ │ ├── producer.cpp
│ │ ├── processor.cpp
│ │ ├── strategy.cpp
│ │ └── router.cpp
│ └── utils/
│ └── timer.cpp
│
├── benchmarks/ # Google Benchmark tests (4 files)
│ ├── queue_benchmark.cpp
│ ├── routing_benchmark.cpp
│ ├── memory_benchmark.cpp
│ └── scaling_benchmark.cpp
│
├── configs/ # Test scenarios (6 files)
│ ├── baseline.json
│ ├── hot_type.json
│ ├── burst_pattern.json
│ ├── imbalanced_processing.json
│ ├── ordering_stress.json
│ └── strategy_bottleneck.json
│
├── scripts/ # Helper scripts
│ ├── run_all_tests.sh
│ └── docker_run_all.sh
│
└── build/ # Build artifacts
└── router_test # Compiled executable
- Заголовочные файлы: 10 файлов, ~1200 строк
- Исходный код: 10 файлов, ~1500 строк
- Бенчмарки: 4 файла, ~600 строк
- Конфигурации: 6 JSON файлов
- Документация: 3 MD файла, ~1500 строк
- Всего: ~4800 строк кода + документация
-
Lock-Free Design
- ✅ SPSC очереди без мьютексов
- ✅ Атомарные операции only
- ✅ Cache-line alignment
-
Configuration
- ✅ JSON конфигурация (nlohmann/json)
- ✅ 6 тестовых сценариев
- ✅ Валидация конфигурации
-
Monitoring
- ✅ Real-time stats каждую секунду
- ✅ Перцентили (p50, p90, p99, p99.9, max)
- ✅ Ordering validation
- ✅ Финальный отчет
-
Testing
- ✅ 6 сценариев с разными паттернами нагрузки
- ✅ Message loss detection
- ✅ Ordering validation
- ✅ Latency measurements
-
Benchmarks
- ✅ Google Benchmark integration
- ✅ Queue performance
- ✅ Routing overhead
- ✅ Memory allocation patterns
- ✅ Scaling characteristics
-
Docker
- ✅ Multi-stage Dockerfile
- ✅ docker-compose.yml
- ✅ Все зависимости
- ✅ Оптимизационные флаги
-
Documentation
- ✅ README с инструкциями
- ✅ ARCHITECTURE с technical details
- ✅ Русские комментарии в коде
- ✅ Этот отчет
- Корректность: Zero message loss, perfect ordering
- Производительность: Lock-free design, оптимизации
- Измеримость: Comprehensive statistics и benchmarks
- Воспроизводимость: Docker environment, конфигурации
- Понятность: Подробная документация, комментарии
- Adaptive batching для амортизации overhead
- NUMA-aware thread placement
- Hardware performance counters integration
- Speculative execution optimizations
- Динамическая перенастройка роутинга
- Backpressure metrics и адаптация
- Persistent statistics to disk
- Web dashboard для мониторинга
- Unit tests с Google Test
- Fuzzing для edge cases
- Valgrind/AddressSanitizer integration
- Continuous benchmarking
Реализована полнофункциональная система маршрутизации сообщений, удовлетворяющая всем требованиям задания:
- ✅ Lock-free архитектура с SPSC/MPSC очередями
- ✅ Гарантии корректности (zero loss, perfect ordering)
- ✅ Подробная статистика и мониторинг
- ✅ 6 тестовых сценариев
- ✅ 4 типа бенчмарков с Google Benchmark
- ✅ Docker окружение для воспроизводимости
- ✅ Полная документация на русском языке
Проект демонстрирует применение принципов lock-free программирования для построения высокопроизводительных систем реального времени, аналогичных торговым системам.
Статус: Готово к review и тестированию Дата: 2025-11-11