Платформа аэрокосмической аналитики реального времени, предназначенная для моделирования и трекинга орбитальных траекторий спутников на основе открытых баллистических данных.
🌐 Сайт сервиса: orbitx-web.com
Система спроектирована как модульный вертикальный монолит с разделением внутренних слоев каждого бизнес-модуля по принципам Луковой архитектуры (Onion Architecture).
- Изоляция домена: Математические модели, константы и алгоритмы расчета баллистики полностью инкапсулированы внутри доменного слоя и изолированы от внешних фреймворков, баз данных и инфраструктурных слоев.
- Вертикальные слайсы: Кодовая база разбита на независимые функциональные модули (
SatelliteData,SGP4Data), что исключает связность кода и обеспечивает прозрачный путь миграции на распределенные системы в случае роста проекта.
Платформа обрабатывает параллельные вычислительные циклы баллистических координат в реальном времени, используя паттерны низкоуровневого управления ресурсами среды выполнения .NET:
- Стратегия Id-Only Caching: Для оптимизации дисковой подсистемы PostgreSQL и исключения холостых операций ввода-вывода (I/O) приложение кэширует легковесные коллекции идентификаторов сущностей в
IMemoryCache. Пагинация и фильтрация каталога по 41 категории рассчитываются непосредственно в оперативной памяти сервера (ОЗУ). - Параллельные асинхронные вычисления: Фоновый воркер пересчета координат изолирует тяжелые математические расчеты ядра SGP4 от основного потока приложения с помощью асинхронных долгоживущих задач (
Task.Run). Состояние разделяемой памяти защищено с помощью потокобезопасных коллекций (ConcurrentDictionary), что предотвращает гонки потоков (Race Conditions) при конкурентном доступе пользователей к трансляциям. - Детерминированная очистка ресурсов: Реализован жесткий контроль жизненного цикла дуплексных соединений поверх SignalR (WebSockets). Через сквозные цепочки
CancellationTokenфоновый воркер мгновенно фиксирует разрыв клиентской сессии, принудительно гасит вычислительную задачу для этого спутника и зачищает память от «зомби-соединений», предотвращая утечки памяти (Memory Leaks). - Изоляция сбоев (High Availability): Внедрена структурная отказоустойчивость. При кратковременном падении СУБД система локализует инфраструктурный сбой, переключается на производительное логирование через Source Generators (
[LoggerMessage]) и бесперебойно стримит координаты клиентам из прогретого кэша оперативной памяти.
Архитектура развернута на базе тройной Docker-топологии с обеспечением жестких границ изоляции окружений:
- Разделение контуров: Изолированные compose-файлы поддерживают независимые контексты для локальной разработки (Local Dev), закрытого контура тестирования на VPS (Staging) и боевого сервера (Production).
- Безопасность данных: Контейнер СУБД PostgreSQL полностью скрыт внутри изолированной Docker-сети overlay без публикации портов во внешний мир. Доступ к данным ограничен шифрованными SSH-туннелями с пробросом локальных портов.
- Шлюзование трафика: Прокси-сервер Nginx выступает в роли ingress-контроллера, обеспечивая терминацию SSL/TLS сертификатов и безопасное обратное проксирование WebSocket-соединений (
wss://).
- Бэкенд: .NET, ASP.NET Core, Entity Framework Core, PostgreSQL, SignalR (WebSockets).
- Математическое ядро: Баллистическая модель вычислений SGP4 (Simplified General Perturbations 4).
- Фронтенд: Vue 3, TypeScript, Vite, Leaflet.js (картография).
- Среда рантайма: Docker, Docker Compose, Nginx Reverse Proxy, Linux (Ubuntu LTS), Fail2ban.
- Для развертывания презентационной/тестовой песочницы сервиса, введите следующие команды в
cmd/powerShell/любой другой консоли:
git clone https://github.com/TembulatC/OrbitX-Open.git
- Перейдите в папку созданную командой выше(если вы до этого ее ни разу не создавали)
- Затем переименуйте
.env.exampleв.env. Вписывайте нужные вам данные. - Затем введите следующие команды:
cd "Полный путь до вашей папки\OrbitX-Open"
docker-compose up -d --build
После этих действий ваша песочница развернется на вашем ПК(обязательно установите и запустите Docker Desktop для этого)
Сайт откроется и будет доступен для просмотра по адресу: http://localhost:8081
- Что бы открыть swagger для управления данными и добавленим их в БД для просмотра траекторий спутников(БД изначально пустое при развертывании сервиса) необходимо перейти по адресу:
http://localhost:{порт(см. ниже)}/swagger/index.html - Нужный порт для адреса выше можно получить выполнив команду в корне папки OrbitX-Open:
docker port orbitx-local
- Зайдя в swagger выбирайте метод
/api/v1/AddSatelliteDataи вводите туда любую нужную вам категорию спутника с маленькой буквы (напримерkuiper, (см. категории на сайтеhttps://celestrak.org/NORAD/elements/index.php?FORMAT=csvнажимая на маленькие синие документики рядом с названием категорий. Там откроется страница и в её URL-адресе можно посмотреть название категории) и нажимаетеExecute. - Заходите на сам сайт на порту
8081. Переходите на каталог спутников и из выпадающего списка категорий спутников выбираете ту которую вы недавно добавили и из предоставленных спутников нажимаете кнопкуЗапустить