(doc) : ajout et modification de docs après arbitrage

This commit is contained in:
jpgiannetti
2026-01-31 21:09:59 +01:00
parent f99fb3c614
commit 841028d1b2
24 changed files with 3081 additions and 301 deletions

View File

@@ -10,16 +10,26 @@ Requêtes géolocalisées intensives (contenus à proximité), données utilisat
## Décision
- **PostgreSQL + PostGIS** : Données persistantes et requêtes géospatiales
- **PgBouncer** : Connection pooling pour PostgreSQL
- **Redis Cluster** : Cache géolocalisation et sessions
## Architecture
```
Requête → Redis Cache → [HIT] → Réponse
[MISS]
PostGIS → Cache → Réponse
```mermaid
flowchart LR
A[Requête API]
B[Redis Cache]
C[PgBouncer]
D[PostgreSQL + PostGIS]
E[Réponse]
A --> B
B -->|HIT| E
B -->|MISS| C
C --> D
D --> C
C --> B
B --> E
```
## Alternatives considérées
@@ -39,6 +49,13 @@ Requête → Redis Cache → [HIT] → Réponse
- ACID, fiabilité éprouvée
- Écosystème mature
### PgBouncer
- **Connection pooling** : Réduit l'overhead de création de connexions PostgreSQL
- **Mode transaction** : Connexion réutilisée entre transactions (optimal pour API stateless)
- **Performance** : Permet de gérer 1000+ connexions concurrentes avec ~100 connexions réelles à PostgreSQL
- **Scaling** : Essentiel pour supporter la montée en charge sans surcharger PostgreSQL
- **Port** : :6432 (vs :5432 pour PostgreSQL direct)
### Redis
- Cache géo natif (`GEORADIUS`) : 100K+ requêtes/sec
- Sessions utilisateurs
@@ -61,6 +78,44 @@ LIMIT 20;
- Index GIST sur colonnes géométriques
- Réplication read replicas pour scaling lecture
### Configuration PgBouncer
**Mode recommandé** : `transaction`
- Connexion libérée après chaque transaction
- Optimal pour API stateless (Go + Fiber)
- Maximise la réutilisation des connexions
**Pool sizing** :
- `default_pool_size` : 20 (connexions par base)
- `max_client_conn` : 1000 (connexions clients max)
- `reserve_pool_size` : 5 (connexions de secours)
**Configuration type** (`pgbouncer.ini`) :
```ini
[databases]
roadwave = host=localhost port=5432 dbname=roadwave
zitadel = host=localhost port=5432 dbname=zitadel
[pgbouncer]
listen_port = 6432
listen_addr = *
auth_type = scram-sha-256
pool_mode = transaction
default_pool_size = 20
max_client_conn = 1000
reserve_pool_size = 5
server_idle_timeout = 600
```
**Connexion application Go** :
```go
// Avant (PostgreSQL direct)
// dsn := "postgres://user:pass@localhost:5432/roadwave"
// Après (via PgBouncer)
dsn := "postgres://user:pass@localhost:6432/roadwave"
```
## Documentation technique détaillée
- [Diagramme de séquence cache géospatial](../architecture/sequences/cache-geospatial.md)