

AWS Il servizio di modernizzazione del mainframe (esperienza Managed Runtime Environment) non è più aperto a nuovi clienti. Per funzionalità simili a AWS Mainframe Modernization Service (esperienza Managed Runtime Environment), esplora AWS Mainframe Modernization Service (Self-Managed Experience). I clienti esistenti possono continuare a utilizzare il servizio normalmente. [Per ulteriori informazioni, consulta AWS Modifica della disponibilità di Mainframe Modernization.](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Configurare la limitazione della velocità per AWS Transform for mainframe Runtime
<a name="ba-runtime-rate-limiting"></a>

AWS Transform for mainframe Runtime include funzionalità integrate di limitazione della velocità per proteggere l'applicazione gapwalk da richieste eccessive e potenziali abusi. Il sistema di limitazione della velocità utilizza l'algoritmo Token Bucket per fornire sia una capacità di burst che una limitazione sostenuta della velocità.

**Topics**
+ [Panoramica sulla limitazione della velocità](#ba-runtime-rate-limiting-overview)
+ [Proprietà della configurazione](#ba-runtime-rate-limiting-config)
+ [Abilita la limitazione della velocità](#ba-runtime-rate-limiting-enable)
+ [Identificazione del cliente](#ba-runtime-rate-limiting-client-id)
+ [Intestazioni relative ai limiti di velocità](#ba-runtime-rate-limiting-headers)
+ [Gestione della memoria](#ba-runtime-rate-limiting-memory)

## Panoramica sulla limitazione della velocità
<a name="ba-runtime-rate-limiting-overview"></a>

Il sistema di limitazione della velocità offre le seguenti funzionalità:

**Algoritmo Token Bucket**  
+ Consente il traffico burst fino alla capacità di burst configurata
+ Ricarica i token a una velocità costante in base alle richieste al minuto
+ Fornisce una limitazione fluida della velocità senza bloccare i picchi di traffico legittimi

**Identificazione del cliente**  
+ Identifica i client in base all'indirizzo IP con supporto proxy
+ Supporti X-Forwarded-For e X-Real-IP intestazioni
+ Gestisce scenari di bilanciamento del carico e proxy inverso

**Gestione automatica della memoria**  
+ Pulisce automaticamente i periodi con limiti di velocità scaduti
+ Intervalli di pulizia e tempi di scadenza configurabili
+ Previene le perdite di memoria nelle applicazioni a esecuzione prolungata

**Integrazione HTTP**  
+ Restituisce HTTP 429 (Troppe richieste) quando i limiti vengono superati
+ Include le intestazioni dei limiti di velocità standard nelle risposte
+ Fornisce ai clienti informazioni da riprovare

## Proprietà della configurazione
<a name="ba-runtime-rate-limiting-config"></a>

Configura la limitazione della velocità nel tuo file: `application-main.yaml`

```
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)
```

### Descrizioni delle proprietà
<a name="ba-runtime-rate-limiting-config-properties"></a>

**abilitato**  
Switch principale per abilitare o disabilitare la funzionalità di limitazione della velocità. Impostazione predefinita: `false`

**requestsPerMinute**  
Numero di richieste consentite al minuto per la limitazione sostenuta della velocità. Rappresenta la frequenza di ricarica del token. Impostazione predefinita: `1000`

**Burst Capacity**  
Numero massimo di richieste consentite in un burst prima dell'applicazione del limite di velocità. Dovrebbe essere superiore `requestsPerMinute` a quello necessario per consentire picchi di traffico. Impostazione predefinita: `1500`

**Includi le intestazioni**  
Se includere le intestazioni dei limiti di velocità standard (`X-RateLimit-Limit`,`X-RateLimit-Remaining`,`X-RateLimit-Reset`) nelle risposte HTTP. Impostazione predefinita: `true`

**cleanupIntervalMinutes**  
Intervallo in minuti tra la pulizia automatica dei periodi limite di velocità scaduti. Aiuta a prevenire perdite di memoria. Impostazione predefinita: `5`

**bucketExpiryHours**  
Tempo in ore dopo il quale i periodi limite di velocità non utilizzati vengono considerati scaduti e idonei alla pulizia. Impostazione predefinita: `1`

**errorMessage**  
Messaggio di errore personalizzato restituito nella risposta JSON quando viene superato il limite di velocità. Impostazione predefinita: `"Too many requests. Try again later."`

**Suggerimenti sulla lista bianca**  
Elenco separato da virgole di indirizzi IP che aggirano completamente la limitazione della velocità. Utile per controlli sanitari o sistemi affidabili. Impostazione predefinita: `empty`

**perEndpointLimiting**  
Se applicare limiti di velocità separati per endpoint anziché solo per client. Attualmente non implementato. Impostazione predefinita: `false`

## Abilita la limitazione della velocità
<a name="ba-runtime-rate-limiting-enable"></a>

Per abilitare la limitazione della velocità con le impostazioni predefinite:

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

## Identificazione del cliente
<a name="ba-runtime-rate-limiting-client-id"></a>

Il sistema di limitazione della velocità identifica i client utilizzando il seguente ordine di priorità:

1. **X-Forwarded-For intestazione** (primo IP se separato da virgole)

1. **X-Real-IP intestazione**

1. **Indirizzo remoto** dalla richiesta HTTP

Ciò garantisce una corretta identificazione del client quando l'applicazione è responsabile:
+ Sistemi di load balancer
+ Proxy inversi
+ CDNs
+ Gateway API

### Esempio di identificazione del cliente
<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
```

## Intestazioni relative ai limiti di velocità
<a name="ba-runtime-rate-limiting-headers"></a>

Quando `includeHeaders` è abilitata, le seguenti intestazioni vengono aggiunte alle risposte HTTP:

**X- RateLimit -Limite**  
Il limite di velocità per il cliente (richieste al minuto)

**X- RateLimit -Rimanente**  
Il numero di richieste rimanenti nella finestra del limite di velocità corrente

**X- RateLimit -Ripristina**  
L'ora in cui viene ripristinata la finestra del limite di velocità (timestamp Unix)

### Esempi di intestazioni di risposta
<a name="ba-runtime-rate-limiting-headers-example"></a>

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

### Il limite di frequenza ha superato la risposta
<a name="ba-runtime-rate-limiting-headers-exceeded"></a>

Quando viene superato il limite di velocità, il sistema restituisce:

**Stato HTTP**  
429 Troppe richieste

**Content-Type**  
application/json

**Riprova dopo**  
Numero di secondi di attesa prima di riprovare

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

## Gestione della memoria
<a name="ba-runtime-rate-limiting-memory"></a>

Il sistema di limitazione della velocità gestisce automaticamente la memoria per prevenire perdite nelle applicazioni con esecuzione prolungata:

**Pulizia automatica**  
+ Funziona ogni minuto `cleanupIntervalMinutes`
+ Rimuove i secchi inutilizzati da ore `bucketExpiryHours`
+ Registra l'attività di pulizia per il monitoraggio

**Efficienza della memoria**  
+ Utilizza strutture di dati simultanee per la sicurezza dei thread
+ Creazione di Lazy Bucket (solo quando necessario)
+ Implementazione efficiente del token bucket

### Monitoraggio dell'attività di pulizia
<a name="ba-runtime-rate-limiting-memory-monitoring"></a>

Controlla i registri per i messaggi di pulizia:

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