DEMARRAGE.md 8,2 ko
Newer Older
# Guide de Démarrage - Simulation Réseau de Files d'Attente

## Projet Universitaire
**Cours**: Modélisation Incertitude et Simulation 2025-2026
**Sujet**: Simulation d'une base de données distribuée avec files d'attente

---

## 🚀 Démarrage Rapide

### Prérequis
- **Python 3.10+** avec pip
- **Node.js 18+** avec npm
- Terminal bash/zsh

### Installation

1. **Cloner le projet** (si applicable)
```bash
cd /Users/hamaba/Documents/projet-reseau-de-files-d-attentes
```

2. **Installer les dépendances**

**Backend (Python):**
```bash
cd apps/backend
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
```

**Frontend (React):**
```bash
# Depuis la racine du projet
npm install
```

### Lancement de l'Application

**Option 1: Lancement Manuel (2 terminaux)**

**Terminal 1 - Backend:**
```bash
cd apps/backend
source venv/bin/activate
uvicorn src.main:app --reload --host 0.0.0.0 --port 8000
```

**Terminal 2 - Frontend:**
```bash
# Depuis la racine
npm run dev
```

**Option 2: Test d'Intégration**
```bash
# Vérifier que tout fonctionne
./test-integration.sh
```

### Accès à l'Application

- **Frontend (Interface Web)**: http://localhost:5173
- **Backend API**: http://localhost:8000
- **Documentation API (Swagger)**: http://localhost:8000/docs
- **Documentation API (ReDoc)**: http://localhost:8000/redoc

---

## 📋 Utilisation

### 1. Interface Web

1. Ouvrir http://localhost:5173 dans votre navigateur
2. **Configuration**:
   - Sélectionner un scénario prédéfini (Scenario 1-5) OU
   - Configurer manuellement les paramètres (λ, μc, p, serveurs)
3. **Exécution**:
   - Cliquer sur "Démarrer la simulation"
   - Observer l'indicateur de statut
4. **Résultats**:
   - Onglet **Métriques**: Tableaux détaillés (simulation + analytique)
   - Onglet **Visualisations**: Diagrammes et graphiques
   - Onglet **Comparaison**: Table comparative + charts
5. **Export**:
   - Boutons "Exporter JSON" ou "Exporter CSV" en haut à droite

### 2. API REST (Tests CLI)

**Lister les scénarios:**
```bash
curl http://localhost:8000/api/scenarios/ | python3 -m json.tool
```

**Exécuter un scénario:**
```bash
curl -X POST http://localhost:8000/api/scenarios/scenario_1/run | python3 -m json.tool
```

**Récupérer les résultats:**
```bash
# Remplacer SESSION_ID par l'ID retourné ci-dessus
curl http://localhost:8000/api/simulation/results/SESSION_ID | python3 -m json.tool
```

**Analyse analytique (Jackson):**
```bash
curl http://localhost:8000/api/analytics/compare/SESSION_ID | python3 -m json.tool
```

### 3. Script de Test Python

```bash
cd apps/backend
source venv/bin/activate
python test_api.py
```

---

## 📊 Les 5 Scénarios

### Scenario 1: Single Fast Server (Test d'Instabilité)
- **But**: Tester l'instabilité avec un seul serveur rapide
- **Config**: λ=0.008, μc=0.1, p=0.5, 1 serveur (μ=1/120)

### Scenario 2: Fast + Slow Server
- **But**: Équilibrer avec 2 serveurs de vitesses différentes
- **Config**: 1 serveur rapide (120ms) + 1 lent (240ms)

### Scenario 3: Three Slow Servers
- **But**: Plusieurs serveurs lents
- **Config**: 3 serveurs à 240ms chacun

### Scenario 4: Fast + Medium Server
- **But**: Comparer avec Scenario 3
- **Config**: 1 rapide (120ms) + 1 moyen (190ms)

### Scenario 5: Parameter Sensitivity
- **But**: Étude de sensibilité (variations de λ et p)
- **Config**: Plusieurs variations disponibles via `/api/scenarios/scenario_5/variations`

---

## 🧪 Tests

### Tests Backend (Unitaires)
```bash
cd apps/backend
source venv/bin/activate
pytest tests/ -v
```

**21 tests** couvrant:
- Génération aléatoire exponentielle
- Simulation discrète
- Analyse analytique (Jackson)
- Little's Law
- Conservation probabilités

### Tests d'Intégration
```bash
./test-integration.sh
```

**8 tests** validant:
- Backend health
- Endpoints API
- Exécution simulation
- Analyse Jackson
- Frontend accessible
- CORS configuré

---

## 🏗️ Architecture

### Backend (Python + FastAPI)
```
apps/backend/src/
├── core/                 # Moteur de simulation
│   ├── simulation.py     # Event-driven simulator
│   ├── queues.py         # M/M/1 queues
│   ├── events.py         # Event types
│   ├── router.py         # Probabilistic routing
│   └── scenarios.py      # 5 scénarios prédéfinis
├── analytics/            # Théorème de Jackson
│   ├── jackson.py        # Analyse analytique
│   └── comparison.py     # Comparaison sim vs analytique
├── api/                  # Endpoints REST
│   ├── simulation.py     # Contrôle simulation
│   ├── scenarios.py      # Scénarios prédéfinis
│   └── analytics.py      # Analyses Jackson
└── models/               # Pydantic models
    ├── config.py         # Configuration
    └── results.py        # Résultats
```

### Frontend (React + TypeScript)
```
apps/web/src/
├── components/
│   ├── Dashboard.tsx           # Layout principal
│   ├── simulation/             # Contrôles simulation
│   │   ├── ScenarioSelector.tsx
│   │   ├── ParameterPanel.tsx
│   │   └── SimulationControl.tsx
│   ├── results/                # Affichage résultats
│   │   ├── ResultsDisplay.tsx
│   │   ├── MetricsCard.tsx
│   │   ├── ComparisonTable.tsx
│   │   └── ExportButton.tsx
│   └── visualization/          # Charts et diagrammes
│       ├── NetworkDiagram.tsx  # D3.js topology
│       ├── UtilizationChart.tsx # Chart.js ρ
│       └── MetricsComparisonChart.tsx # L, W
├── services/
│   └── api.ts                  # API client (axios)
├── store/
│   └── simulationStore.ts      # Zustand state
└── types/
    └── simulation.ts           # TypeScript types
```

---

## 📈 Métriques Calculées

### Simulation (Événementielle)
- **ρ**: Utilisation de chaque file
- **W**: Temps moyen dans le système
- **Wq**: Temps moyen d'attente
- **Ws**: Temps moyen de service
- Compteurs: arrivées, départs

### Analytique (Jackson)
- **λeff**: Taux d'arrivée effectif pour chaque file
- **ρ = λ/μ**: Utilisation (condition stabilité: ρ < 1)
- **L = ρ/(1-ρ)**: Nombre moyen de clients (M/M/1)
- **W = L/λ**: Temps moyen (Little's Law)
- **Wq = W - 1/μ**: Temps d'attente moyen

### Comparaison
- Différence en % pour chaque métrique
- Code couleur: <5% (vert), 5-10% (jaune), >10% (rouge)

---

## 🐛 Dépannage

### Backend ne démarre pas
```bash
# Vérifier le port 8000
lsof -ti:8000 | xargs kill -9

# Relancer
cd apps/backend
source venv/bin/activate
uvicorn src.main:app --reload
```

### Frontend ne démarre pas
```bash
# Vérifier le port 5173
lsof -ti:5173 | xargs kill -9

# Relancer
npm run dev
```

### CORS Errors
Vérifier que l'origine est autorisée dans `apps/backend/src/main.py`:
```python
allow_origins=["http://localhost:5173", "http://localhost:3000"]
```

### Tests échouent
```bash
# Backend
cd apps/backend
source venv/bin/activate
pip install -r requirements.txt
pytest tests/ -v

# Frontend
npm run build
```

---

## 📝 Notes pour le Rapport

### Livrables Générés
- ✅ Code source complet (Git)
- ✅ Simulation fonctionnelle (5 scénarios)
- ✅ Validation analytique (Jackson)
- ✅ Visualisations interactives
- ✅ Export résultats (JSON/CSV)
- ✅ Tests automatisés (21 tests)

### Captures d'Écran Suggérées
1. Dashboard avec configuration
2. Diagramme topologie réseau
3. Graphiques utilisation (ρ)
4. Table comparaison analytique vs simulation
5. Résultats pour chaque scénario (1-5)

### Analyse à Inclure
- Scenario 1: Pourquoi instable (ρ > 1)
- Comparaison scénarios 3 vs 4
- Validation Jackson (différences %)
- Impact paramètres (λ, p) sur performance

---

## 📚 Références Théoriques

- **Jackson's Theorem**: Réseaux ouverts, M/M/1 en série/parallèle
- **Little's Law**: L = λW
- **M/M/1 Queue**: L = ρ/(1-ρ), W = 1/(μ-λ)
- **Simulation Discrète**: Event-driven, file de priorité

---

## 👥 Contact

Pour toute question sur l'implémentation:
1. Consulter `/docs` (Swagger) pour l'API
2. Vérifier les logs: Backend stdout, Frontend console
3. Exécuter `./test-integration.sh` pour diagnostic

---

**Projet complet et fonctionnel! 🎓**