

AWS Le service de modernisation du mainframe (expérience de l'environnement d'exécution géré) n'est plus ouvert aux nouveaux clients. Pour des fonctionnalités similaires au service de modernisation AWS du mainframe (expérience de l'environnement d'exécution géré), explorez le service de modernisation AWS du mainframe (expérience autogérée). Les clients existants peuvent continuer à utiliser le service normalement. Pour plus d'informations, consultez la section [Modification de la disponibilité de la modernisation du AWS mainframe](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html).

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Configurer la limitation du débit pour AWS Transform for mainframe Runtime
<a name="ba-runtime-rate-limiting"></a>

AWS Transform for mainframe Runtime inclut une fonctionnalité intégrée de limitation de débit pour protéger les applications Gapwalk contre les demandes excessives et les abus potentiels. Le système de limitation de débit utilise l'algorithme Token Bucket pour fournir à la fois une capacité de rafale et une limitation de débit soutenue.

**Topics**
+ [Vue d'ensemble des limites de débit](#ba-runtime-rate-limiting-overview)
+ [Propriétés de configuration](#ba-runtime-rate-limiting-config)
+ [Activer la limitation du débit](#ba-runtime-rate-limiting-enable)
+ [Identification du client](#ba-runtime-rate-limiting-client-id)
+ [En-têtes de limite de débit](#ba-runtime-rate-limiting-headers)
+ [Gestion de mémoire](#ba-runtime-rate-limiting-memory)

## Vue d'ensemble des limites de débit
<a name="ba-runtime-rate-limiting-overview"></a>

Le système de limitation de débit fournit les fonctionnalités suivantes :

**Algorithme Token Bucket**  
+ Autorise le trafic en rafale jusqu'à la capacité de rafale configurée
+ Recharge les jetons à un rythme constant en fonction des demandes par minute
+ Permet de limiter le débit en douceur sans bloquer les pics de trafic légitimes

**Identification du client**  
+ Identifie les clients par adresse IP avec support proxy
+ Supports X-Forwarded-For et X-Real-IP en-têtes
+ Gère les scénarios d'équilibrage de charge et de proxy inverse

**Automatic Memory Management**  
+ Nettoie automatiquement les compartiments de limites de débit expirés
+ Intervalles de nettoyage et délais d'expiration configurables
+ Empêche les fuites de mémoire dans les applications de longue durée

**Intégration HTTP**  
+ Renvoie HTTP 429 (trop de demandes) lorsque les limites sont dépassées
+ Inclut les en-têtes de limite de débit standard dans les réponses
+ Fournit des informations sur les réessais aux clients

## Propriétés de configuration
<a name="ba-runtime-rate-limiting-config"></a>

Configurez la limitation de débit dans votre `application-main.yaml` fichier :

```
gapwalk:
  ratelimiting:
    enabled: true                                        # Enable/disable rate limiting
    requestsPerMinute: 1000                              # Sustained rate limit per minute
    burstCapacity: 1500                                  # Maximum burst requests allowed
    includeHeaders: true                                 # Include X-RateLimit-* headers
    cleanupIntervalMinutes: 5                            # Cleanup interval for expired buckets
    bucketExpiryHours: 1                                 # Hours after which unused buckets expire
    errorMessage: "Too many requests. Try again later."  # Custom error message
    whitelistIps: ""                                     # Comma-separated IPs to bypass limiting
    perEndpointLimiting: false                           # Apply limits per endpoint (not implemented)
```

### Descriptions des propriétés
<a name="ba-runtime-rate-limiting-config-properties"></a>

**activé**  
Interrupteur principal pour activer ou désactiver la fonctionnalité de limitation de débit. Valeur par défaut : `false`

**requestsPerMinute**  
Nombre de demandes autorisées par minute pour une limitation durable du débit. Cela représente le taux de recharge des jetons. Valeur par défaut : `1000`

**Capacité d'éclatement**  
Nombre maximum de demandes autorisées par rafale avant que la limite de débit ne s'applique. Devrait être supérieur `requestsPerMinute` à celui prévu pour permettre des pics de trafic. Valeur par défaut : `1500`

**Inclure les en-têtes**  
S'il faut inclure les en-têtes de limite de débit standard (`X-RateLimit-Limit`,`X-RateLimit-Remaining`,`X-RateLimit-Reset`) dans les réponses HTTP. Valeur par défaut : `true`

**cleanupIntervalMinutes**  
Intervalle en minutes entre le nettoyage automatique des compartiments de limites de débit expirés. Aide à prévenir les fuites de mémoire. Valeur par défaut : `5`

**bucketExpiryHours**  
Durée en heures après laquelle les compartiments de limite de débit non utilisés sont considérés comme expirés et éligibles au nettoyage. Valeur par défaut : `1`

**errorMessage**  
Message d'erreur personnalisé renvoyé dans la réponse JSON lorsque la limite de débit est dépassée. Valeur par défaut : `"Too many requests. Try again later."`

**Conseils sur les listes blanches**  
Liste d'adresses IP séparées par des virgules qui contournent totalement la limitation de débit. Utile pour les bilans de santé ou les systèmes fiables. Valeur par défaut : `empty`

**perEndpointLimiting**  
S'il faut appliquer des limites de débit distinctes par point de terminaison plutôt que par client uniquement. Non implémenté actuellement. Valeur par défaut : `false`

## Activer la limitation du débit
<a name="ba-runtime-rate-limiting-enable"></a>

Pour activer la limitation du débit avec les paramètres par défaut :

```
gapwalk:
  ratelimiting:
    enabled: true
```

## Identification du client
<a name="ba-runtime-rate-limiting-client-id"></a>

Le système de limitation du débit identifie les clients selon l'ordre de priorité suivant :

1. **X-Forwarded-For en-tête** (première adresse IP si elle est séparée par des virgules)

1. **X-Real-IP en-tête**

1. **Adresse distante** depuis la requête HTTP

Cela garantit une identification correcte du client lorsque l'application est en retard :
+ Équilibreurs de charge
+ Proxies inverses
+ CDNs
+ Passerelles API

### Exemple d'identification du client
<a name="ba-runtime-rate-limiting-client-id-example"></a>

```
# Direct connection
Client IP: 192.168.1.100

# Behind load balancer with X-Forwarded-For
X-Forwarded-For: 203.0.113.45, 192.168.1.100
Client IP: 203.0.113.45 (first IP used)

# Behind reverse proxy with X-Real-IP
X-Real-IP: 203.0.113.45
Client IP: 203.0.113.45
```

## En-têtes de limite de débit
<a name="ba-runtime-rate-limiting-headers"></a>

Lorsque cette option `includeHeaders` est activée, les en-têtes suivants sont ajoutés aux réponses HTTP :

**Limite X RateLimit -**  
Le plafond tarifaire pour le client (demandes par minute)

**X- RateLimit -Restant**  
Le nombre de demandes restantes dans la fenêtre de limite de débit actuelle

**X- RateLimit -Réinitialiser**  
Heure à laquelle la fenêtre de limite de débit est réinitialisée (horodatage Unix)

### Exemples d'en-têtes de réponse
<a name="ba-runtime-rate-limiting-headers-example"></a>

```
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 847
X-RateLimit-Reset: 1640995200
```

### Réponse dépassée la limite de débit
<a name="ba-runtime-rate-limiting-headers-exceeded"></a>

Lorsque la limite de débit est dépassée, le système renvoie :

**État du protocole HTTP**  
429 Trop de demandes

**Content-Type**  
application/json

**Réessayer-après**  
Nombre de secondes à attendre avant de réessayer

```
{
  "error": "Rate limit exceeded",
  "message": "Too many requests. Try again later.",
  "retryAfter": 60,
  "timestamp": 1640995140000
}
```

## Gestion de mémoire
<a name="ba-runtime-rate-limiting-memory"></a>

Le système de limitation de débit gère automatiquement la mémoire pour éviter les fuites dans les applications de longue durée :

**Nettoyage automatique**  
+ Fonctionne toutes les `cleanupIntervalMinutes` minutes
+ Supprime les seaux inutilisés pendant des heures `bucketExpiryHours`
+ Enregistre les activités de nettoyage à des fins de surveillance

**Efficacité de la mémoire**  
+ Utilise des structures de données concurrentes pour la sécurité des threads
+ Création d'un bucket Lazy (uniquement en cas de besoin)
+ Implémentation efficace d'un token bucket

### Surveillance de l'activité de nettoyage
<a name="ba-runtime-rate-limiting-memory-monitoring"></a>

Vérifiez les journaux pour détecter les messages de nettoyage :

```
INFO  RateLimitingService - Cleaned up 15 expired rate limiting buckets
```