Files
wiki/tasks/flightradar24/docs/RTL-SDR_TZ.md
2026-04-19 00:10:01 +03:00

220 lines
9.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ТЗ: Приём, хранение и обработка данных с RTL-SDR для FR24 / noisemap
## 1. Цель
Построить локальный контур приёма ADS-B данных с RTL-SDR, их предобработки, хранения в PostgreSQL/PostGIS и дальнейшего использования для:
- восстановления данных после сбоев без потерь,
- формирования сущностей рейсов и треков,
- расчёта производных шумовых данных,
- визуализации на карте в рамках проекта FR24 / noisemap.
## 2. Целевой контур
Система разворачивается на одной VM в PVE.
### Ограничения VM
- CPU: до 6 vCPU
- RAM: 1012 GB
- SSD: 80100 GB max
### Аппаратный вход
- RTL-SDR подключён к физической машине по USB
- PVE-хост пробрасывает USB в VM
### Развёртывание
- Docker Compose
- каждый компонент в отдельном контейнере
## 3. Архитектура
### Компоненты внутри VM
- postgres + postgis
- capture
- preprocess
- api/viewer
- optional: monitoring
### Принцип
- одна VM
- одна PostgreSQL база
- сырьё и обработанные данные живут в одной БД, но логически разделены
- сырьё хранится с небольшим retention и используется для догоняющей обработки
## 4. Режимы работы
### 4.1 Live mode
- система принимает поток в реальном времени
- записи сохраняются в сырьевой слой
- данные сразу уходят в предобработку
### 4.2 Recovery mode
- если обработка отстала или упала,
- но сырьё ещё доступно,
- система автоматически догоняет пропущенный диапазон
### 4.3 Overlap mode
- при догоняющей обработке допускается небольшой перекрывающийся участок
- это нужно, чтобы не терять данные на границах и компенсировать сбои
## 5. Хранение данных
### 5.1 Retention
- сырьё хранится 3 дня
- после этого raw-слой чистится автоматически
- 3 дня — минимальный гарантированный горизонт для восстановления
### 5.2 База
- PostgreSQL
- PostGIS обязателен
### 5.3 Принцип хранения
- raw-данные отделены от core-данных
- core-данные очищены и оптимизированы под запросы карты и расчётов
- схема должна быть компактной, без лишних таблиц и тяжёлой нормализации
## 6. Объекты хранения
Минимальный набор сущностей:
### `captures`
Сессии приёма.
Хранят:
- старт и конец сессии
- источник приёма
- статус
- покрытый диапазон времени
- признаки сбоя / восстановления
### `raw_packets`
Сырой поток.
Хранят:
- timestamp
- payload/packet data
- signal metadata при наличии
- привязку к capture/session
### `aircraft`
Справочник бортов.
Хранят:
- ICAO24
- callsign
- тип/категорию при наличии
- оператор/авиакомпанию при наличии
### `flights`
Сущность рейса.
Хранят:
- flight id / number
- aircraft
- время начала и конца
- маршрут / аэропорты при наличии
- состояние заполненности
### `track_points`
Точки трека.
Хранят:
- время
- координаты
- высоту
- скорость
- курс
- принадлежность к flight/track
### `tracks`
Сводка трека.
Хранят:
- bbox
- длительность
- min/max altitude
- количество точек
- краткое описание маршрута
### `processing_state`
Состояние пайплайна.
Хранят:
- последний успешный checkpoint
- обработанный диапазон
- отставание
- состояние recovery
### `noise_results`
Производные данные для карты.
Хранят:
- расчётные зоны/радиусы
- интенсивность/плотность
- геометрию для визуализации
- привязку к рейсу/треку/времени
## 7. Основные требования к обработке
### 7.1 Приём
- принимать ADS-B поток от RTL-SDR
- сохранять сырьё до обработки
- не терять данные при временном сбое downstream
### 7.2 Предобработка
- нормализовать записи
- выделять рейсы
- строить треки
- обновлять state обработки
### 7.3 Восстановление
- после сбоя искать недостающий диапазон
- добирать пропущенные записи из raw-слоя
- допускается overlap
### 7.4 Оптимизация
- обработка должна быть лёгкой по CPU и памяти
- БД и схема должны быть компактными
- лишних промежуточных слоёв не заводить
## 8. Карта и визуализация
Система должна поддерживать данные, нужные для:
- отображения треков рейсов
- отображения шумовых зон
- анализа плотности пролётов
- фильтрации по времени
- отрисовки результатов на карте
## 9. Требования к инфраструктуре
- запуск через Docker Compose
- отдельные контейнеры для ключевых частей
- автозапуск после ребута VM
- возможность мониторить состояние приёма и БД
- логирование по каждому компоненту отдельно
## 10. Критерии приёмки
Система считается готовой, если:
- RTL-SDR отдаёт поток в VM через USB passthrough
- raw-данные сохраняются в PostgreSQL
- raw retention работает на 3 дня
- при сбое система может догнать пропущенный диапазон
- в БД присутствуют рейсы, треки и точки треков
- PostGIS используется для геоданных
- данные доступны для визуализации на карте
- контейнеры поднимаются через Docker Compose
## 11. Открытые вопросы, которые ещё стоит уточнить позже
- точный формат сырьевых пакетов
- нужен ли отдельный UI мониторинга
- нужен ли архив beyond 3 days
- какие индексы и партиционирование делать на старте
- где именно будет жить API noisemap после переноса
## 12. Итерация 2 — обязательный список улучшений
Следующая итерация ТЗ должна включать:
- мониторинг отвалившегося RTL-SDR и автоперезапуск capture
- healthcheck контейнеров и БД
- политика ротации логов и объёма диска
- схема индексов и партиционирования raw/track tables
- unique key / dedup стратегия для overlapping recovery
- экспорт/импорт исторических данных при миграции
- резервное копирование PostgreSQL и восстановление
- уведомления о деградации приёма или заполнении диска
- контракт между ingest-слоем и noisemap UI, если они остаются раздельными
## 13. Анализ: ничего ли не упущено
Дополнительно стоит проверить перед реализацией:
- нужен ли отдельный UI мониторинга
- где живёт API после переноса
- как именно партиционируются `raw_packets` и `track_points`
- нужен ли отдельный архив после 3 дней
- какую политику дедупликации выбрать для overlap на границах
- как восстанавливать БД после полного падения VM
---
Подготовлено на основе текущей архитектуры FR24/noisemap и согласованных ограничений VM.