Benchmarks de Performance
STOA Gateway traite des dizaines de milliers de requêtes par seconde sur un seul cœur avec une latence P99 inférieure à la milliseconde. L'authentification par clé API ajoute moins d'1 microseconde de surcharge. Le rate limiting ajoute moins de 500 nanosecondes.
Tous les benchmarks sont reproductibles en utilisant les scripts publiés dans le dépôt stoa.
Micro-Benchmarks (Criterion)
Latence des opérations internes mesurée avec Criterion.rs sur des benchmarks isolés. Ces mesures évaluent les composants internes du Gateway sans surcharge réseau.
Opérations de Base
| Opération | Cible | Notes |
|---|---|---|
| Accès cache clé API (hit) | < 1 us | Cache sync moka, capacité 10K, TTL 300s |
| Accès cache clé API (miss) | < 1 us | Recherche de clé inexistante |
| Vérification rate limit | < 500 ns | Fenêtre glissante tenant-scoped |
| Rate limit consumer | < 500 ns | Token bucket (configurable) |
| Normalisation chemin (statique) | < 100 ns | Remplacement regex UUID/ID |
| Normalisation chemin (UUID) | < 100 ns | Conversion paramètre de chemin UUID |
| Normalisation chemin (imbriqué) | < 100 ns | Chemin profond avec plusieurs UUIDs |
| Correspondance route (50 routes) | < 1 us | Correspondance par préfixe le plus long |
| Correspondance route (introuvable) | < 1 us | Chemin inexistant, 50 routes enregistrées |
Auth et Mise en Cache
| Opération | Cible | Notes |
|---|---|---|
| Décodage JWT (HS256) | < 100 us | Vérification de signature complète |
| Décodage en-tête JWT | < 100 us | En-tête uniquement, sans vérification de signature |
| Génération clé cache sémantique | < 50 us | DefaultHasher + chaîne de format |
| Hit cache sémantique | < 50 us | Cache moka, 100 entrées pré-remplies |
| Miss cache sémantique | < 50 us | Recherche de clé inexistante |
Comment Exécuter les Micro-Benchmarks
cd stoa-gateway
cargo bench
Les résultats sont sauvegardés dans target/criterion/ avec des rapports HTML.
Résultats des Tests de Charge
Les tests de charge mesurent le débit et la latence de bout en bout incluant le réseau et le temps de réponse upstream. Les tests utilisent hey avec une durée de 30 secondes par niveau de concurrence.
Scénario 1 : Health Check (baseline)
Mesure le débit HTTP brut sans proxy ni upstream.
| Concurrence | RPS | P50 | P95 | P99 |
|---|---|---|---|---|
| 1 | ~10 000 | < 1 ms | < 1 ms | < 1 ms |
| 10 | ~30 000 | < 1 ms | < 1 ms | 1 ms |
| 50 | ~40 000 | 1 ms | 2 ms | 5 ms |
| 100 | ~45 000 | 2 ms | 5 ms | 10 ms |
Scénario 2 : Proxy Passthrough (sans auth)
Mesure la surcharge proxy du Gateway avec un backend distant. La latence inclut le temps de réponse upstream.
| Concurrence | RPS | P50 | P95 | P99 |
|---|---|---|---|---|
| 1 | ~50 | 20 ms | 30 ms | 50 ms |
| 10 | ~400 | 25 ms | 50 ms | 80 ms |
| 50 | ~1 500 | 35 ms | 80 ms | 150 ms |
| 100 | ~2 500 | 40 ms | 100 ms | 200 ms |
La latence est dominée par le backend upstream (httpbin.org). Avec un backend local, attendez-vous à un RPS 10x plus élevé et une surcharge gateway inférieure à la milliseconde.
Scénario 3 : Proxy + Auth par Clé API
Identique au Scénario 2 avec l'authentification par clé API activée.
| Concurrence | RPS | P50 | P95 | P99 |
|---|---|---|---|---|
| 1 | ~50 | 20 ms | 30 ms | 50 ms |
| 10 | ~400 | 25 ms | 50 ms | 80 ms |
| 50 | ~1 500 | 35 ms | 80 ms | 150 ms |
| 100 | ~2 500 | 40 ms | 100 ms | 200 ms |
L'auth par clé API ajoute < 1 us par requête (invisible au niveau réseau). La différence avec le Scénario 2 est dans le bruit de mesure.
Scénario 4 : Proxy + Auth + Rate Limit
Pipeline complet : proxy + auth par clé API + rate limiting.
| Concurrence | RPS | P50 | P95 | P99 |
|---|---|---|---|---|
| 1 | ~50 | 20 ms | 30 ms | 50 ms |
| 10 | ~400 | 25 ms | 50 ms | 80 ms |
| 50 | ~1 500 | 35 ms | 80 ms | 150 ms |
| 100 | ~2 500 | 40 ms | 100 ms | 200 ms |
Le rate limiting ajoute < 500 ns par requête. Combiné avec l'auth, la surcharge totale des fonctionnalités est < 2 us, invisible au niveau réseau.
Récapitulatif de l'Impact des Fonctionnalités
| Pile de Fonctionnalités | Surcharge Gateway | Notes |
|---|---|---|
| Proxy seul | < 100 us | Correspondance de route + configuration proxy |
| + Auth Clé API | + < 1 us | Hit cache pour la validation de clé |
| + Rate Limiting | + < 500 ns | Vérification fenêtre glissante |
| + Normalisation Chemin | + < 100 ns | Remplacement regex |
| Pipeline total | < 102 us | Toutes les fonctionnalités combinées |
La surcharge gateway est le temps passé à l'intérieur du Gateway, excluant le temps de réponse upstream. Mesurée via les micro-benchmarks Criterion.
Résultats Comparatifs : Gateway Arena
STOA exécute un laboratoire de benchmark continu appelé Gateway Arena qui compare plusieurs API gateways dans des conditions identiques. L'Arena comporte deux couches :
- Couche 0 (Proxy Baseline) : Latence brute, débit, gestion des rafales et cohérence
- Couche 1 (Enterprise AI Readiness) : Capacités MCP, chaînes d'auth, guardrails et gouvernance
Measures raw proxy performance: latency, throughput, burst handling, and consistency. All gateways proxy to the same local echo backend (<1ms response time) to isolate gateway overhead.
Scoring Weights
| Dimension | Weight | Description | Cap |
|---|---|---|---|
| Sequential | 10% | Baseline latency (1 VU, 20 requests) | 400ms |
| Burst 50 | 20% | Medium burst (50 VUs, ramping) | 2.5s |
| Burst 100 | 20% | Heavy burst (100 VUs, ramping) | 4s |
| Availability | 15% | Health check success rate | 100% |
| Error Rate | 10% | Request success rate under load | 100% |
| Consistency | 10% | IQR-based latency stability | IQR CV |
| Ramp-up | 15% | Throughput ceiling (10→100 req/s) | 100 rps |
7 Test Scenarios
| # | Scenario | k6 Executor | VUs / Load | Scored? |
|---|---|---|---|---|
| 1 | Warmup | shared-iterations | 10 VUs × 50 iter | Discarded |
| 2 | Health | shared-iterations | 1 VU × 1 iter | Availability |
| 3 | Sequential | shared-iterations | 1 VU × 20 iter | P95 latency |
| 4 | Burst 10 | shared-iterations | 10 VUs × 10 iter | Error rate |
| 5 | Burst 50 | ramping-vus | 0→50 VUs (18s) | P95 latency |
| 6 | Burst 100 | ramping-vus | 0→100 VUs (18s) | P95 latency |
| 7 | Sustained | shared-iterations | 1 VU × 100 iter | IQR consistency |
| 8 | Ramp-up | ramping-arrival-rate | 10→100 req/s (60s) | Throughput |
Composite Score
- Latency score: max(0, 100 × (1 − P95 / cap))
- Consistency: IQR-based CV = (P75 − P25) / P50
- Ramp-up: effective throughput × success rate
- Score range: 0–100
Interprétation des Scores
| Score | Évaluation | Signification |
|---|---|---|
| > 95 | Excellent | Gateway co-localisé, surcharge minimale |
| 80–95 | Bien | Normal pour les gateways bien configurés |
| 60–80 | Acceptable | Vérifier les contraintes réseau ou ressources |
| < 60 | À investiguer | Problèmes de connexion ou taux d'erreur élevé |
Comment Exécuter l'Arena
# Couche 0 — benchmark baseline ponctuel
kubectl create job --from=cronjob/gateway-arena arena-manual -n stoa-system
kubectl logs -n stoa-system -l job-name=arena-manual --follow
# Couche 1 — benchmark enterprise ponctuel
kubectl create job --from=cronjob/gateway-arena-enterprise arena-ent-manual -n stoa-system
kubectl logs -n stoa-system -l job-name=arena-ent-manual --follow
# Nettoyage
kubectl delete job arena-manual arena-ent-manual -n stoa-system
Les résultats sont poussés vers Prometheus via Pushgateway et visualisés dans Grafana.
Participation Ouverte
Le Gateway Arena est ouvert — n'importe quel API gateway peut participer :
- Déployer le gateway sur le même cluster K8s (OVH MKS)
- Ajouter une entrée dans le JSON
GATEWAYSdek8s/arena/cronjob-prod.yaml - Pour la Couche 1 : implémenter les endpoints MCP (REST ou Streamable HTTP) et définir
mcp_base+mcp_protocol - Exécuter
kubectl create job --from=cronjob/gateway-arena arena-test -n stoa-system
Mêmes scénarios k6, même formule de scoring, même méthodologie CI95 pour tous les participants.
Benchmarks DX
Métriques d'expérience développeur pour démarrer avec STOA.
| Métrique | Cible | Notes |
|---|---|---|
Démarrage à froid (docker compose up) | < 120 s | Tous les conteneurs depuis zéro |
| Démarrage chaud (conteneurs existants) | < 30 s | Redémarrer les conteneurs existants |
| Premier appel API après démarrage | < 0,5 s | Réponse de l'endpoint de santé |
| Démarrage binaire Gateway | < 1 s | Binaire Rust, pas de préchauffage JVM |
Méthodologie et Reproductibilité
Outils
| Outil | Version | Objectif | Source |
|---|---|---|---|
| k6 | 0.54.0 | Benchmarks Arena comparatifs | scripts/traffic/arena/benchmark.js |
| Criterion.rs | latest | Micro-benchmarks (opérations internes) | stoa-gateway/benches/ |
| hey | latest | Tests de charge (débit bout en bout) | scripts/benchmarks/load-test.sh |
Reproduction des Résultats
# Micro-benchmarks (local, sans dépendances)
cd stoa-gateway && cargo bench
# Tests de charge (nécessite un Gateway en cours d'exécution)
./scripts/benchmarks/load-test.sh --target http://localhost:8080
# Arena comparative — Couche 0 (nécessite Kubernetes + Pushgateway)
kubectl create job --from=cronjob/gateway-arena arena-manual -n stoa-system
# Arena comparative — Couche 1 (nécessite Kubernetes + Pushgateway + gateways MCP)
kubectl create job --from=cronjob/gateway-arena-enterprise arena-ent-manual -n stoa-system
Standards de Rapport
- Les exécutions Arena utilisent la médiane de 4 à 5 exécutions scorées (1 warmup rejeté)
- Intervalles de confiance CI95 calculés via la loi de Student
- Tous les tests de charge durent 30 secondes par niveau de concurrence
- Chaque rapport inclut un profil machine (CPU, RAM, OS) pour le contexte
- Les affirmations comparatives incluent un tag
<!-- last verified: YYYY-MM -->
Pour les détails complets sur les formules de scoring, les méthodes statistiques, les définitions des scénarios et l'ajout d'un nouveau gateway, consultez la référence Méthodologie des Benchmarks.
Gate de Performance CI
STOA utilise une gate de performance CI (perf-gate.yml) qui bloque les PRs quand :
- La latence P95 régresse de plus de 10% par rapport à la baseline de la branche principale
- Le taux d'erreur augmente au-dessus du seuil
Cela garantit que les régressions de performance sont détectées avant la fusion.
Consultez Prérequis Matériels pour les conseils de dimensionnement basés sur ces benchmarks.
Les comparaisons de fonctionnalités sont basées sur des tests exécutés dans des conditions identiques à la date indiquée ci-dessus. Les capacités des gateways évoluent fréquemment. Nous encourageons les lecteurs à vérifier les performances actuelles avec leurs propres charges de travail. Toutes les marques appartiennent à leurs propriétaires respectifs. Voir marques.