Aller au contenu principal

ADR-034 : Stratégie de Migration Python vers Rust

Metadata

ChampValeur
StatutAccepté
Date2026-02-06
LinearN/A (Stratégique)
AssociéADR-024 (Modes Unifiés du Gateway)

Contexte

Le MCP Gateway est actuellement implémenté en Python (FastAPI). Bien que Python excelle dans le développement rapide, Rust offre :

  • Performance — Latence plus faible, débit plus élevé
  • Sécurité mémoire — Pas de pauses GC, performances prévisibles
  • OPA natif — Bibliothèque regorus pour l'évaluation de politique embarquée
  • Binaire unique — Déploiement simplifié

Le Problème

« Comment migrer de Python vers Rust sans perturber la production ? »

Décision

Implémenter une migration par phases avec validation shadow, ciblant le T4 2026 pour un déploiement Rust complet.

Phases de Migration

Python Rust Migration Timeline
Phased migration with shadow validation. No disruption to production.
Q1 2026
Python Production100% Python
Python mcp-gateway handles all production traffic. Baseline metrics established.
Scope: Baseline metricsValidation: Performance benchmarks recorded
Q2 2026
Rust Edge-MCPCanary
Q3 2026
Rust MajorityMajority
Q4 2026
Rust Complete100% Rust
Python
Rust
Both (shadow)
Shadow Mirror Validation
During Phase 2, both implementations run in parallel. Python serves traffic; Rust shadows and compares.
📨 Incoming Request
Load Balancer
🐍 Python
PRIMARY
Response returned to client
mirror
Rust
SHADOW
Response compared, not returned
Response body diff
Latency delta
Error rate
Rollback Plan
1. Route 100% to Python
2. Investigate shadow logs
3. Patch Rust & redeploy
4. 48h re-validation
5. Resume migration
Feature Parity & Performance Targets
Tracking Python feature coverage in Rust and expected performance improvements.
Feature
Python
Rust
MCP SSE Transport
Tool Registry
OPA Policy Evaluation
Keycloak JWT
OpenTelemetry
Semantic Cache
Error Snapshots
K8s CRD Watcher
Performance Targets
Metric
Python
Rust
Gain
P50 latency
15ms
5ms
3x
P99 latency
80ms
20ms
4x
RPS per pod
1,000
5,000
5x
Memory
512MB
64MB
8x
Cold start
3s
100ms
30x

Détails des Phases

PhaseCalendrierPérimètreValidation
1T1 2026Python en productionMétriques de référence
2T2 2026Mode Rust edge-mcpMirror shadow
3T3 2026Rust proxy + sidecarDéploiement canary
4T4 2026Mode Rust shadowMigration complète

Validation Shadow Mirror

Durant la Phase 2, les deux implémentations s'exécutent en parallèle :

Voir l'onglet interactif Shadow Validation ci-dessus pour le flux de requêtes complet et les métriques de comparaison.

Checklist de Parité Fonctionnelle

FonctionnalitéPythonRustStatut
Transport MCP SSE🔄En cours
Registre d'outils📋Planifié
Évaluation de politique OPA✅ (sidecar)✅ (regorus)Terminé
Cache sémantique📋Planifié
Snapshots d'erreurs📋Planifié
Watcher CRD K8s📋Planifié
OpenTelemetry🔄API en cours de stabilisation
JWT Keycloak📋Planifié

Structure d'Implémentation Rust

stoa-gateway/
├── src/
│ ├── main.rs # Entry point, --mode flag
│ ├── modes/
│ │ ├── mod.rs # Mode trait
│ │ ├── edge_mcp.rs # MCP protocol
│ │ ├── sidecar.rs # Behind existing gateway
│ │ ├── proxy.rs # Inline enforcement
│ │ └── shadow.rs # Traffic observation
│ ├── auth/
│ │ └── oidc.rs # Keycloak JWT validation
│ ├── policy/
│ │ └── opa.rs # regorus integration
│ └── observability/
│ └── metrics.rs # Prometheus
├── Cargo.toml
└── Dockerfile

Plan de Rollback

En cas de problème avec l'implémentation Rust :

  1. Immédiat — Router 100% vers Python via le load balancer
  2. Investigation — Comparer les logs shadow
  3. Correction — Patcher Rust, redéployer en shadow
  4. Validation — 48h de validation shadow
  5. Reprise — Transfert progressif du trafic

Objectifs de Performance

MétriquePythonObjectif RustAmélioration
Latence P5015ms5ms3x
Latence P9980ms20ms4x
RPS par pod100050005x
Mémoire512 Mo64 Mo8x
Démarrage à froid3s100ms30x

Conséquences

Positives

  • Performance — Réduction significative de la latence
  • Coût — Moins de pods nécessaires pour le même débit
  • Fiabilité — Sécurité mémoire, pas de pauses GC
  • OPA natif — regorus élimine le sidecar

Négatives

  • Vélocité de développement — Rust plus lent à écrire
  • Double maintenance — Deux codebases pendant la migration
  • Compétences équipe — Courbe d'apprentissage Rust

Atténuations

DéfiAtténuation
VélocitéPython pour les expériences, Rust pour les fonctionnalités stables
Double maintenanceGel des fonctionnalités Python après la Phase 2
CompétencesFormation Rust interne, code reviews

Références