flexway
FRENParler à un expert

Trafic

Refuser proprement plutôt que tomber.

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

  • Contrôler les pics, prévenir les abusLivré · depuis v0.1.0
  • Quotas par application, équipe, utilisateur ou projetTenant et agent construits ; utilisateur et cas d'usage cadrés ; manquent application, équipe, projet, centre de coûtsEn partie · suite en 1.8
  • Limiter requêtes et tokensRequêtes par seconde par appelant, tokens par jour et par mois ; manque un débit en tokens par minute contre les picsEn partie · suite en 1.8
Toutes les attentes du marché
Trafic et latenceTrafic et latence
Le trafic d'un coup d'œil : requêtes, erreurs 5xx et 4xx, latence p95 et refus 429, face à la période précédente.Capture réelle, données de démonstration · v1.6.3

Ce que ça résout

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.

Problème 2

Un amont lent fait tomber tout le reste

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

La passerelle meurt sous la charge

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.

Fonctionnement

Chaque étape est une décision lisible dans la trace et dans la console.

Votre infrastructureflexwayPasserelle API, IA et agentsChaîne de décision unifiée429au-delà du débit : 42901 Charge02 Appelant03 Débit04 Quota05 AmontApplicationsAgentsPartenairesServicesModèlesVotre infrastructureflexwayPasserelle API, IA et agentsChaîne de décision unifiée42901 Chargeplafond en vol, délestage avant l'identité02 Appelantidentité et classe de débit03 Débitseau à jetons par appelant04 Quotatenant, jour et mois05 Amontdélai, cloisonnement, coupe-circuit ; dégradation annoncéeApplicationsAgentsPartenairesServicesModèles

Trafic - Schéma du domaine : qui appelle, les étapes de décision, ce qui est appelé, et le cas de refus.

  • Applications
  • Agents
  • Partenaires
  1. Charge
  2. Appelant
  3. Débit
  4. Quota
  5. Amont
  • Services
  • Modèles

au-delà du débit : 429

Applications
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.
Agents
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.
Partenaires
Les entreprises partenaires qui consomment vos API : identifiées par certificat client ou clé d'API, sous un quota par tenant.
Charge
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é.
Appelant
Flexway identifie l'appelant et sa classe de débit, déclarée par méthode ou par opération.
Débit
Un seau à jetons par appelant limite son débit ; au-delà : 429 avec Retry-After et les en-têtes RateLimit.
Quota
Le quota du tenant, au jour et au mois, s'applique sur toutes ses routes ; au-delà : 429 quota_exceeded.
Amont
Vers l'amont : délai par opération, cloisonnement, coupe-circuit ; toute dégradation est annoncée, jamais silencieuse.
Services
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.
Modèles
Vos modèles internes, appelés par la surface compatible OpenAI ; une requête sensible y est épinglée.
  • Ligne : un trajet
  • Correspondance : décision partagée
  • Requête
  • Refus
  • Votre infrastructure
  1. Chargeplafond en vol, délestage avant l'identité
  2. Appelantidentité et classe de débit
  3. Débitseau à jetons par appelant
  4. Quotatenant, jour et mois
  5. Amontdélai, cloisonnement, coupe-circuit ; dégradation annoncée

En détail

L'essentiel de chaque sujet, avec son statut dans la version publiée ; dépliez une carte pour le texte complet.

Débit par appelant

Livré · v0.1.0

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.

  • Seau à jetons par appelant
  • Classes par méthode, surcharge par opération
  • 429 avec Retry-After et RateLimit
Voir le détailMasquer le détail - Débit par appelant

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.

Tous les points

  • Seau à jetons par appelant
  • Classes par méthode, surcharge par opération
  • 429 avec Retry-After et RateLimit

Fonctionnalités et statut

  • Débit par appelant (seau à jetons)Livré · v0.1.0
  • 429 avec Retry-After et en-têtes RateLimitLivré · v0.1.0
  • Classes de débit par méthode, surcharge par opérationLivré · v0.1.0
Lire dans la documentation : Débit, quotas et 429

Quotas par tenant, au jour et au mois

Livré · v0.1.0

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.

  • Fenêtres jour et mois
  • Compteurs partagés entre répliques
Voir le détailMasquer le détail - Quotas par tenant, au jour et au mois

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.

Tous les points

  • Fenêtres jour et mois
  • Compteurs partagés entre répliques

Fonctionnalités et statut

  • Quota par tenant au jour et au moisLivré · v0.1.0
Lire dans la documentation : Poser des quotas

Délestage plutôt que panne

Livré · v0.2.0

Sous saturation, la passerelle refuse l'excédent avec un 503 explicite plutôt que d'accumuler une file sans fin.

  • Délestage adaptatif
  • Plafond global de requêtes en vol
Voir le détailMasquer le détail - Délestage plutôt que panne

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.

Tous les points

  • Délestage adaptatif
  • Plafond global de requêtes en vol

Fonctionnalités et statut

  • Délestage adaptatif sous saturationLivré · v0.1.0
  • Plafond global de requêtes en vol : une réplique surchargée déleste au lieu d'être tuéeLivré · v0.2.0
Lire dans la documentation : Contrôle du trafic et quotas

Délais, reprises et coupe-circuits

Livré · v0.1.0

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.

  • Budget de délai par opération
  • Reprises idempotentes seulement
  • Cloisonnement et coupe-circuit
Voir le détailMasquer le détail - Délais, reprises et coupe-circuits

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.

Tous les points

  • Budget de délai par opération
  • Reprises idempotentes seulement
  • Cloisonnement et coupe-circuit
  • Dégradation annoncée

Fonctionnalités et statut

  • Budget de délai par opérationLivré · v0.1.0
  • Plafond de requêtes en vol par amont (cloisonnement)Livré · v0.1.0
  • Reprises limitées aux méthodes idempotentesLivré · v0.1.0
  • Coupe-circuit avec demi-ouvertureLivré · v0.1.0
  • Dégradation annoncée (en-tête et trace), jamais silencieuseLivré · v0.1.0
Lire dans la documentation : Reprises et idempotence

Arrêt gracieux

Livré · v0.1.0

À 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.

  • Flux en cours drainés
  • Déploiement sans coupure
Voir le détailMasquer le détail - Arrêt gracieux

À 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.

Tous les points

  • Flux en cours drainés
  • Déploiement sans coupure

Fonctionnalités et statut

  • Arrêt gracieux : les flux en cours sont drainésLivré · v0.1.0
Lire dans la documentation : Observer

Configuration

L'exemple rate-limits, tel qu'il est livré avec Flexway v1.6.3.

examples/rate-limits/flexway.yaml
# 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]
examples/resilience/flexway.yaml
# 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: 20s

Fonctionnalités

Ce 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 RateLimitLivré · v0.1.0
Classes de débit par méthode, surcharge par opérationLivré · v0.1.0
Quota par tenant au jour et au moisLivré · v0.1.0
Délestage adaptatif sous saturationLivré · v0.1.0
Budget de délai par opérationLivré · v0.1.0
Plafond de requêtes en vol par amont (cloisonnement)Livré · v0.1.0
Reprises limitées aux méthodes idempotentesLivré · v0.1.0
Coupe-circuit avec demi-ouvertureLivré · v0.1.0
Dégradation annoncée (en-tête et trace), jamais silencieuseLivré · v0.1.0
Arrêt gracieux : les flux en cours sont drainésLivré · v0.1.0
Plafond global de requêtes en vol : une réplique surchargée déleste au lieu d'être tuéeLivré · v0.2.0
Trafic par opération, amont et tenantLivré · 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éeLivré · v1.3.0

Toutes les fonctionnalités

Les autres attentes de ce domaine

  • Refuser, mettre en attente ou router ailleurs au dépassementRefus 429 et bascule du plafond souple pour le tenant ; manquent les actions graduées pour chaque niveau de budgetEn partie · suite en 1.8
  • Relier chaque appel à application, utilisateur, cas d'usageTenant, agent, client ; sujet haché dans l'audit ; cas d'usage cadré ; application et centre de coûtsEn partie · suite en 1.8
  • Encadrer l'IA des IDE et de la CI/CDTout client passe par la même identité, quota et audit ; manque l'attribution par application (le client) avec son budgetEn partie · suite en 1.8
  • Suivre les appels IA d'une fonctionnalitéCas d'usage déclaré au contrat ; une session se suit par la traceEn partie · suite en 1.8

Les autres domaines

Parlons de votre passerelle

Flexwiz 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.