Технические детали
aprs.ru состоит из пяти частей, каждая работает отдельным процессом под systemd:
- Коллектор (Python, asyncio) держит соединение с APRS-IS, разбирает пакеты всех форматов (несжатые и сжатые позиции, Mic-E, NMEA, объекты, items, погода, телеметрия, сообщения, бюллетени, статусы, маяки), отбрасывает дубликаты и пачками пишет их в базу. Задержка обработки видна на странице «Состояние сервиса».
- Процесс обслуживания удаляет устаревшие данные по срокам хранения, сжимает старую историю, раз в час пересчитывает префиксный индекс и почасовую статистику.
- Веб-интерфейс (PHP 8.5, Symfony) отдаёт страницы и API; состояния не хранит, сессии — в Redis.
- Карта (TypeScript, Leaflet) работает в браузере и получает обновления в реальном времени.
- Live-сервис (Python, WebSocket) рассылает браузерам новые позиции, погоду и телеметрию по подпискам.
Хранение
PostgreSQL с расширениями TimescaleDB (история разбита на месячные части и сжимается) и PostGIS (геопоиск, обратное геокодирование по базе GeoNames). Текущие позиции всех станций — в Redis, поэтому API отвечает за десятки миллисекунд.
Сроки хранения
| Сырые пакеты | 2 дня |
| Сообщения, маяки | 14 дней |
| Статусы | 30 дней |
| Бюллетени | показываются 24 часа |
| Треки, погода (не чаще раза в 10 мин), телеметрия | 2 года |
Подробнее — в журнале изменений и статистике.