

AWS El servicio de modernización de mainframes (experiencia en entornos de ejecución gestionados) ya no está abierto a nuevos clientes. Para obtener prestaciones similares a las del Servicio de modernización de AWS mainframe (experiencia en entornos de ejecución gestionados), explore el Servicio de modernización de AWS mainframe (Self-ManagedExperience). Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte Cambio en la disponibilidad de la [modernización de AWS mainframes](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html).

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Configurar la limitación de velocidad para AWS Transform for mainframe Runtime
<a name="ba-runtime-rate-limiting"></a>

AWS Transform for mainframe Runtime incluye una función de limitación de velocidad integrada para proteger la aplicación Gapwalk de solicitudes excesivas y posibles usos indebidos. El sistema de limitación de velocidad utiliza el algoritmo Token Bucket para proporcionar tanto la capacidad de ráfaga como una limitación de velocidad sostenida.

**Topics**
+ [Descripción general de los límites de velocidad](#ba-runtime-rate-limiting-overview)
+ [Propiedades de configuración](#ba-runtime-rate-limiting-config)
+ [Habilite la limitación de velocidad](#ba-runtime-rate-limiting-enable)
+ [Identificación del cliente](#ba-runtime-rate-limiting-client-id)
+ [Cabeceras de límite de velocidad](#ba-runtime-rate-limiting-headers)
+ [Administración de la memoria](#ba-runtime-rate-limiting-memory)

## Descripción general de los límites de velocidad
<a name="ba-runtime-rate-limiting-overview"></a>

El sistema de limitación de velocidad ofrece las siguientes funciones:

**Algoritmo Token Bucket**  
+ Permite el tráfico en ráfagas hasta la capacidad de ráfaga configurada
+ Recarga los tokens a un ritmo constante en función de las solicitudes por minuto
+ Proporciona una limitación de velocidad fluida sin bloquear los picos de tráfico legítimos

**Identificación del cliente**  
+ Identifica a los clientes por dirección IP con soporte de proxy
+ Soportes X-Forwarded-For y X-Real-IP encabezados
+ Maneja escenarios de equilibrio de carga y proxy inverso

**Automatic Memory Management**  
+ Limpia automáticamente los intervalos de límite de velocidad vencidos
+ Intervalos de limpieza y tiempos de caducidad configurables
+ Evita las pérdidas de memoria en aplicaciones de ejecución prolongada

**Integración de HTTP**  
+ Devuelve HTTP 429 (demasiadas solicitudes) cuando se superan los límites
+ Incluye encabezados de límite de velocidad estándar en las respuestas
+ Proporciona información útil para los clientes

## Propiedades de configuración
<a name="ba-runtime-rate-limiting-config"></a>

Configura la limitación de velocidad en tu `application-main.yaml` archivo:

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

### Descripciones de propiedades
<a name="ba-runtime-rate-limiting-config-properties"></a>

**enabled**  
Interruptor maestro para activar o desactivar la funcionalidad de limitación de velocidad. Valor predeterminado: `false`

**requestsPerMinute**  
Número de solicitudes permitidas por minuto para limitar la velocidad de forma sostenida. Esto representa la tasa de recarga del token. Valor predeterminado: `1000`

**Capacidad de ráfaga**  
Número máximo de solicitudes permitidas en una ráfaga antes de que se aplique el límite de velocidad. Debe ser mayor que `requestsPerMinute` para permitir picos de tráfico. Valor predeterminado: `1500`

**Incluya encabezados**  
Si se deben incluir encabezados de límite de velocidad estándar (`X-RateLimit-Limit`,`X-RateLimit-Remaining`,`X-RateLimit-Reset`) en las respuestas HTTP. Valor predeterminado: `true`

**cleanupIntervalMinutes**  
Intervalo en minutos entre la limpieza automática de los intervalos de límite de velocidad vencidos. Ayuda a evitar pérdidas de memoria. Valor predeterminado: `5`

**bucketExpiryHours**  
Tiempo en horas tras el cual los intervalos de límite de velocidad no utilizados se consideran vencidos y aptos para ser limpiados. Valor predeterminado: `1`

**errorMessage**  
Se devuelve un mensaje de error personalizado en la respuesta de JSON cuando se supera el límite de velocidad. Valor predeterminado: `"Too many requests. Try again later."`

**Consejos de la lista blanca**  
Lista de direcciones IP separadas por comas que eluden por completo la limitación de velocidad. Útil para controles de estado o sistemas confiables. Valor predeterminado: `empty`

**perEndpointLimiting**  
Si se deben aplicar límites de velocidad separados por punto final en lugar de solo por cliente. Actualmente no está implementado. Valor predeterminado: `false`

## Habilite la limitación de velocidad
<a name="ba-runtime-rate-limiting-enable"></a>

Para activar la limitación de velocidad con la configuración predeterminada:

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

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

El sistema de limitación de velocidad identifica a los clientes según el siguiente orden de prioridad:

1. **X-Forwarded-For encabezado** (primera IP si está separada por comas)

1. **X-Real-IP encabezado**

1. **Dirección remota** de la solicitud HTTP

Esto garantiza la correcta identificación del cliente cuando la aplicación está inactiva:
+ Equilibradores de carga
+ Proxies inversos
+ CDNs
+ Puertas de enlace API

### Ejemplo de identificación de 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
```

## Cabeceras de límite de velocidad
<a name="ba-runtime-rate-limiting-headers"></a>

Cuando `includeHeaders` está habilitada, se agregan los siguientes encabezados a las respuestas HTTP:

**Límite X RateLimit**  
El límite máximo de tarifa para el cliente (solicitudes por minuto)

**X- RateLimit -Restante**  
El número de solicitudes que quedan en la ventana de límite de velocidad actual

**X- RateLimit -Restablecer**  
Hora a la que se restablece la ventana de límite de velocidad (marca de tiempo de Unix)

### Ejemplos de encabezados de respuesta
<a name="ba-runtime-rate-limiting-headers-example"></a>

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

### Se ha superado el límite de velocidad de respuesta
<a name="ba-runtime-rate-limiting-headers-exceeded"></a>

Cuando se supera el límite de velocidad, el sistema devuelve:

**Estado HTTP**  
429 Demasiadas solicitudes

**Contenido-Tipo**  
application/json

**Retry-After**  
Número de segundos de espera antes de volver a intentarlo

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

## Administración de la memoria
<a name="ba-runtime-rate-limiting-memory"></a>

El sistema de limitación de velocidad gestiona automáticamente la memoria para evitar fugas en aplicaciones de larga duración:

**Limpieza automática**  
+ Se ejecuta cada minuto `cleanupIntervalMinutes`
+ Elimina los cubos que no se hayan utilizado durante horas `bucketExpiryHours`
+ Registra la actividad de limpieza para su supervisión

**Eficiencia de la memoria**  
+ Utiliza estructuras de datos simultáneas para garantizar la seguridad de los subprocesos
+ Creación de cubos diferidos (solo cuando es necesario)
+ Implementación eficiente de un depósito de fichas

### Supervisión de la actividad de limpieza
<a name="ba-runtime-rate-limiting-memory-monitoring"></a>

Compruebe los registros para ver los mensajes de limpieza:

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