51 lines
1.9 KiB
Markdown
51 lines
1.9 KiB
Markdown
# 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)
|