Архитектура системы и схема подсистем
RUSEON Core — это высокопроизводительный движок видеоинфраструктуры, написанный на языке Go. Система спроектирована для обеспечения максимальной пропускной способности, задержки стриминга менее 500 мс, предсказуемого потребления памяти и аппаратной отказоустойчивости.
Архитектурные принципы и гарантии
- Zero Transcoding (Без перекодирования): RUSEON Core никогда не декодирует видеопоток в несжатые пиксели YUV/RGB для стриминга. Сервер перепаковывает сжатые NAL-юниты непосредственно в оперативной памяти, снижая нагрузку на процессор более чем на 90% по сравнению с классическими VMS.
- Изоляция отказов подсистем: Задержка записи на диск или медленный мобильный клиент WebRTC не могут заблокировать приём RTSP от камеры. Кольцевой буфер независимо сбрасывает кадры только для зависшего подписчика.
- Безопасность памяти и детерминизм: Буферы пакетов ограничены пулами фиксированного размера, что исключает неконтролируемый рост кучи и фрагментацию памяти при круглосуточной работе.
- Устойчивость к сбоям питания: Видеоархив сохраняется исключительно в формате Fragmented MP4 (fMP4) со службой автоматического восстановления границ атомов при старте, что исключает появление битых файлов после внезапного отключения электричества.
Подсистемы архитектуры
| Подсистема | Зона ответственности | Исходные файлы | Подробный раздел |
|---|---|---|---|
| Кольцевой буфер | Хаб общей памяти, atomic.Pointer[CodecParams], предзаполнение KeyFrame, изоляция потребителей | internal/buffer/ring.go | Ring Buffer |
| Пайплайн стриминга | Приём RTSP, парсинг NAL-юнитов, извлечение SPS/PPS, ограничение частоты подключений | internal/stream/ | Stream Pipeline |
| Пайплайн записи | Сериализация боксов fMP4, системные вызовы sync_file_range и FADV_DONTNEED | internal/recorder/ | Recording Pipeline |
| LL-HLS Пайплайн | Динамическая генерация плейлистов, кеширование singleflight, lazy-жизненный цикл | internal/api/hls.go | HLS Pipeline |
| WebRTC Пайплайн | WHEP сигнализация, интеграция с Pion WebRTC, сбор ICE-кандидатов | internal/webrtc/ | WebRTC Pipeline |
| Архитектура хранилища | База данных BadgerDB v4, иерархическая структура директорий архива | pkg/storage/ | Storage Architecture |
| Модель конкурентности | Жизненный цикл горутин, владение каналами, исключение дедлоков | Кодовая база ядра | Concurrency Model |
| Внутренняя шина событий | Асинхронный pub/sub маршрутизатор, фильтрация топиков | internal/events/bus.go | Event Bus |
| Архитектурные решения (ADR) | Обоснование выбора Go, fMP4, BadgerDB, WHEP вместо WHIP | Журнал решений | Decisions Log |