Problème 1
Un client bavard prive les autres
Un appelant, un script ou un agent en boucle consomme tout le débit.
Réponse de Flexway : Seau à jetons par appelant, jamais par pod ; au-delà, 429 avec Retry-After et en-têtes RateLimit.
Trafic
Débit par appelant, quotas par tenant au jour et au mois, délestage sous saturation, délais par opération, reprises limitées et coupe-circuits : chaque excès reçoit une réponse claire, l'amont reste protégé.
14 livrées sur les 14 présentées · depuis v0.1.0
Ce que vous attendez de ce domaine


Problème 1
Un appelant, un script ou un agent en boucle consomme tout le débit.
Réponse de Flexway : Seau à jetons par appelant, jamais par pod ; au-delà, 429 avec Retry-After et en-têtes RateLimit.
Problème 2
Les requêtes s'accumulent derrière un service qui ne répond plus.
Réponse de Flexway : Plafond de requêtes en vol par amont, coupe-circuit avec demi-ouverture, délai par opération.
Problème 3
Une réplique saturée est tuée et entraîne les autres.
Réponse de Flexway : Délestage adaptatif et plafond global : une réplique surchargée refuse l'excédent au lieu d'être tuée.
Chaque étape est une décision lisible dans la trace et dans la console.
Trafic - Schéma du domaine : qui appelle, les étapes de décision, ce qui est appelé, et le cas de refus.
au-delà du débit : 429
Les applications qui appellent vos API : chaque requête passe par Flexway, qui vérifie le contrat et l'identité avant d'atteindre vos systèmes.
Trajets qui passent ici
Les agents IA : ils appellent des outils MCP et des modèles par Flexway, sous la même identité, le même quota et le même audit qu'une API.
Trajets qui passent ici
Les entreprises partenaires qui consomment vos API : identifiées par certificat client ou clé d'API, sous un quota par tenant.
Trajets qui passent ici
Au-delà du plafond de requêtes en vol : 503, avant le routage ; sous saturation, le délestage refuse d'abord le non-critique, avant l'identité.
Trajets qui passent ici
Flexway identifie l'appelant et sa classe de débit, déclarée par méthode ou par opération.
Trajets qui passent ici
Un seau à jetons par appelant limite son débit ; au-delà : 429 avec Retry-After et les en-têtes RateLimit.
Trajets qui passent ici
Le quota du tenant, au jour et au mois, s'applique sur toutes ses routes ; au-delà : 429 quota_exceeded.
Trajets qui passent ici
Vers l'amont : délai par opération, cloisonnement, coupe-circuit ; toute dégradation est annoncée, jamais silencieuse.
Trajets qui passent ici
Vos services REST et gRPC : ils ne reçoivent que les requêtes que Flexway a laissées passer, sous délai et coupe-circuit.
Trajets qui passent ici
Vos modèles internes, appelés par la surface compatible OpenAI ; une requête sensible y est épinglée.
Trajets qui passent ici
L'essentiel de chaque sujet, avec son statut dans la version publiée ; dépliez une carte pour le texte complet.
Le débit se compte par appelant vérifié, jamais par réplique, et un dépassement répond 429 avec Retry-After et les en-têtes RateLimit.
Le débit se compte par appelant vérifié - le tenant et le sujet de l'identité - et jamais par réplique ni par adresse de pod : deux répliques ne doublent pas le débit autorisé d'un client. Des classes de débit se déclarent par méthode, et une opération peut avoir la sienne.
Au-delà, la réponse est un 429 conforme à RFC 9457, avec Retry-After et les en-têtes RateLimit : un client bien écrit sait quand revenir.
Chaque tenant a un quota au jour ou au mois, avec des compteurs partagés entre répliques et réconciliés sans appel bloquant.
Au-delà du débit instantané, chaque tenant a un quota sur une fenêtre longue, au jour ou au mois. Entre répliques, les compteurs sont partagés et réconciliés en arrière-plan, sans appel bloquant sur le chemin de la requête.
Sous saturation, la passerelle refuse l'excédent avec un 503 explicite plutôt que d'accumuler une file sans fin.
Sous saturation, la passerelle déleste : elle refuse l'excédent avec un 503 explicite au lieu d'accumuler une file sans fin. Un plafond global de requêtes en vol protège chaque réplique : surchargée, elle refuse plutôt que d'être tuée par manque de mémoire.
Chaque opération a son budget de délai, les reprises sont réservées aux méthodes idempotentes et un coupe-circuit laisse un amont malade se rétablir.
Chaque opération a son budget de délai, jamais un délai global. Les reprises sont limitées aux méthodes idempotentes. Un plafond de requêtes en vol par amont cloisonne les services entre eux, et un coupe-circuit à demi-ouverture laisse un amont malade se rétablir.
Une dégradation est toujours annoncée, dans un en-tête et dans la trace, jamais silencieuse.
À l'arrêt d'une réplique, requêtes et flux en cours sont drainés : un déploiement ne coupe ni un appel ni un flux.
À l'arrêt d'une réplique, les requêtes et les flux en cours sont drainés avant la fermeture : un déploiement ne coupe ni un appel, ni un flux SSE ou WebSocket.
L'exemple rate-limits, tel qu'il est livré avec Flexway v1.6.3.
# A token bucket per caller - the token's subject, else the client's address, read from
# X-Forwarded-For only behind a declared edge.
version: 1
contracts:
openapi: ./openapi.yaml
upstreams:
default:
url: http://search.internal:8080
server:
trusted_proxies: [10.0.0.0/8] # the edge; nobody else chooses their address
policies:
definitions:
per-caller:
type: rate-limit
config:
key: caller
classes:
read: { rps: 50, burst: 100 }
write: { rps: 10, burst: 20 }
expensive: { rps: 1, burst: 5 }
chains:
global: [per-caller]# Layered budgets, connection pools, a bulkhead and a circuit breaker per upstream. Retries are
# built in: once, for an idempotent method or an Idempotency-Key, within a retry budget.
version: 1
contracts:
openapi: ./openapi.yaml
upstreams:
default:
url: http://billing.internal:8080
timeout: 3s # total budget of an exchange with this upstream
pool: { max_idle: 100, max_conns: 200, idle_timeout: 90s }
max_in_flight: 500 # bulkhead: past it, 503 at once
circuit_breaker: { failure_ratio: 0.5, min_requests: 20, window: 10s, cooldown: 5s }
exports:
url: http://exports.internal:8080
max_in_flight: 20 # a slow upstream uses up its own slots, never everyone's
server:
timeouts:
connect: 2s
read: 60s # silence between two bytes - what governs a stream
total: 30s
limits:
max_body: 2MiB # a body read for validation; past it, 413
shutdown:
drain: 20sCe qui est livré dans la version publiée v1.6.3, et ce qui vient ; une fonctionnalité n'est jamais présentée comme livrée avant sa version.
| Fonctionnalité | Statut |
|---|---|
| Débit par appelant (seau à jetons) | Livré · v0.1.0 |
| 429 avec Retry-After et en-têtes RateLimit | Livré · v0.1.0 |
| Classes de débit par méthode, surcharge par opération | Livré · v0.1.0 |
| Quota par tenant au jour et au mois | Livré · v0.1.0 |
| Délestage adaptatif sous saturation | Livré · v0.1.0 |
| Budget de délai par opération | Livré · v0.1.0 |
| Plafond de requêtes en vol par amont (cloisonnement) | Livré · v0.1.0 |
| Reprises limitées aux méthodes idempotentes | Livré · v0.1.0 |
| Coupe-circuit avec demi-ouverture | Livré · v0.1.0 |
| Dégradation annoncée (en-tête et trace), jamais silencieuse | Livré · v0.1.0 |
| Arrêt gracieux : les flux en cours sont drainés | Livré · v0.1.0 |
| Plafond global de requêtes en vol : une réplique surchargée déleste au lieu d'être tuée | Livré · v0.2.0 |
| Trafic par opération, amont et tenant | Livré · v0.1.0 |
| Objectifs de niveau de service par opération : budget d'erreur restant, burn rate sur plusieurs fenêtres, règle d'alerte intégrée | Livré · v1.3.0 |
Les autres attentes de ce domaine
429 et bascule du plafond souple pour le tenant ; manquent les actions graduées pour chaque niveau de budgetEn partie · suite en 1.8Flexwiz est une jeune entreprise : vous parlez directement avec la personne qui la fonde. Dites-nous ce que vous voulez faire passer par Flexway. Nous parlons de votre infrastructure et de vos exigences de souveraineté numérique.
La prise de rendez-vous en ligne arrive bientôt ; d'ici là, un e-mail suffit.