

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 (experiencia autogestionada). 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 del [AWS mainframe.](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 el límite de velocidad para AWS Blu Age Runtime
<a name="ba-runtime-rate-limiting"></a>

AWS Blu Age Runtime incluye una función de limitación de velocidad integrada para proteger la aplicación Gapwalk de solicitudes excesivas y posibles abusos. 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
```