Aller au contenu

Composants du système

API d'ingestion

Localisation : services/ingestion/

Responsabilités : - Point d'entrée HTTP REST pour la télémétrie et les commandes. - Validation Pydantic des payloads entrants. - Publication sur Pub/Sub avec gestion d'erreurs. - Point d'entrée Health Check.

Technologie : FastAPI (Python 3.11), serveur ASGI uvicorn.

Fichiers clés : - src/ingestion/api/v1/endpoints/telemetry.py - Endpoint télémétrie. - src/ingestion/api/v1/endpoints/orders.py - Endpoint commandes. - src/ingestion/services/ - Logique métier et éditeurs Pub/Sub.

Gestionnaire d'état (State Manager)

Localisation : services/state_manager/

Responsabilités : - Consommer les événements Pub/Sub (télémétrie, commandes, décisions). - Maintenir la cohérence de l'état via des transactions Firestore. - Fournir les snapshots pour l'optimisation. - Implémenter les politiques métier (disponibilité, affectation de mission).

Technologie : Java 21, Spring Boot 4, SDK Google Cloud Firestore.

Architecture : Hexagonale (Ports et Adaptateurs). - Couche Domaine : Logique métier et politiques. - Couche Application : Cas d'utilisation et DTOs. - Couche Infrastructure : Adaptateurs Firestore, listeners Pub/Sub, contrôleurs REST.

Fichiers clés : - domain/service/MissionAssignmentPolicy.java - Logique de validation des missions. - domain/service/OptimizationSnapshotService.java - Génération des snapshots. - infrastructure/adapter/in/messaging/pubsub/ - Listeners d'événements. - infrastructure/adapter/out/persistence/firestore/ - Adaptateurs de base de données.

Gestion de la concurrence : - Transactions Firestore pour les écritures atomiques. - Verrouillage optimiste avec retry automatique. - Validation à l'écriture (first-write-wins). - Ordonnancement temporel pour la télémétrie. - Idempotence pour l'ingestion de commandes.

Optimiseur de trajectoire (Path Optimizer)

Localisation : services/path_optimizer/

Responsabilités : - Récupérer le snapshot d'état. - Construire et résoudre le problème VRP. - Publier les affectations de mission sur le topic decisions.

Technologie : Python 3.11, Google OR-Tools, calcul distance Haversine.

Fichiers clés : - main.py - Point d'entrée et orchestration. - services/builder.py - Construction du modèle VRP. - services/solver.py - Configuration du solveur OR-Tools. - services/extractor.py - Parsing de solution et classification des points. - clients/state_manager.py - Client HTTP pour le snapshot. - clients/publisher.py - Éditeur Pub/Sub pour les décisions.

Modèle d'exécution : Job Cloud Run sans état déclenché par Cloud Scheduler (Intervalle de 10s).

Simulateur

Localisation : services/simulators/

Responsabilités : - Générer des données de télémétrie synthétiques (mouvements drones). - Générer des commandes de livraison fictives. - Consommer les affectations de mission (en cours). - Exécuter les missions en publiant la télémétrie le long du trajet.

Technologie : Python 3.11, asyncio pour la simulation concurrente.

Statut : Génération de télémétrie et commandes implémentée, consommation de missions en cours.

Visualiseur Frontend

Localisation : services/visualizer/

Responsabilités : - Affichage de la carte des drones en temps réel. - Serveur WebSocket pour le streaming de télémétrie. - Visualisation des trajets de mission. - Dashboard de métriques (batterie, missions actives).

Technologie : TypeScript, SolidJS, Vite, Leaflet, runtime Bun.

Statut : Travaux en cours.