1.9 KiB
1.9 KiB
ADR-012 : Architecture Backend
Statut : Accepté Date : 2025-01-20
Contexte
RoadWave nécessite une architecture backend évolutive tout en gardant la simplicité opérationnelle pour un MVP. Le système doit supporter une croissance progressive de 0 à 10M utilisateurs.
Décision
Monolithe modulaire avec séparation claire en modules internes.
Alternatives considérées
| Architecture | Complexité | Coûts infra | Time to market | Évolutivité |
|---|---|---|---|---|
| Monolithe modulaire | Faible | Faible | Rapide | 0-1M users |
| Microservices | Élevée | Élevée | Lent | 1M+ users |
| Hybrid (Mono + Workers) | Moyenne | Moyenne | Moyen | 100K-5M users |
Justification
- Simplicité : 1 seul binaire Go, déploiement trivial
- Transactions : Communications inter-modules en mémoire (pas de latence réseau)
- Debugging : Stack traces complètes, profiling unifié
- Coûts : 1 serveur suffit pour 100K users (vs N services)
- Refactoring : Modules internes bien séparés facilitent migration vers microservices si nécessaire
Structure modulaire
internal/
├── auth/ # Validation JWT, intégration Zitadel
├── user/ # Profils, centres d'intérêt
├── content/ # CRUD contenus, métadonnées
├── geo/ # Recherche géospatiale, algorithme
├── streaming/ # Génération HLS, transcoding
├── moderation/ # Signalements, workflow
├── payment/ # Intégration Mangopay
└── analytics/ # Métriques écoute, jauges
Chaque module suit : handler.go → service.go → repository.go.
Conséquences
- Scaling horizontal : réplication complète du binaire (acceptable jusqu'à 1M users)
- Transition vers microservices possible en phase 2 (extraction progressive des modules)
- Importance de maintenir découplage fort entre modules (interfaces claires)