# # Limitadores de Tasa Básicos en el RateLimiter Universal de .NET: Arquitectura y Algoritmos
El componente universal de limitación de tasa de .NET incluye cuatro limitadores algorítmicos básicos: FixedWindowRateLimiter, SlidingWindowRateLimiter, TokenBucketRateLimiter y ConcurrencyLimiter. El primero implementa una ventana fija, el segundo una ventana deslizante, el tercero un cubo de tokens y el cuarto limita la concurrencia.
Las clases de limitadores de tasa heredan de ReplenishingRateLimiter, que define la lógica para reponer permisos mediante un temporizador. ConcurrencyLimiter hereda directamente de RateLimiter. Los constructores aceptan parámetros de configuración, que se almacenan en una copia de Options.
Todas implementan AttemptAcquireCore (síncrono), AcquireAsyncCore (asíncrono), Dispose/DisposeAsync. Los limitadores de tasa también agregan ReplenishInternal.
Manejo de Solicitudes de Permisos
Las solicitudes se dividen en solicitudes de prueba (permitCount = 0) y solicitudes reales (permitCount > 0). Los valores negativos generan ArgumentOutOfRangeException.
Algoritmo de procesamiento:
- Verificar que permitCount ≤ AutoReplenishment.MaxPermits.
- Para solicitudes de prueba: si availablePermits > 0 — éxito inmediato.
- Adquirir bloqueo en el deque de la cola.
- Si availablePermits ≥ permitCount — otorgar permisos, decrementar y liberar bloqueo.
- De lo contrario: rechazo síncrono o agregar a la cola (asíncrono).
El método asíncrono devuelve ValueTask<RateLimitLease>. En caso de desbordamiento de la cola — rechazo.
Estructura de la Cola para Solicitudes
La cola es un deque<RequestRegistration>, donde RequestRegistration hereda de TaskCompletionSource<RateLimitLease>.
Configuraciones de cola en Options:
- QueueLimit: suma máxima de permitCount en la cola.
- QueueProcessingOrder: OldestFirst (FIFO, predeterminado) o NewestFirst (LIFO).
Tamaño actual: _queueTotalPermits. Bloqueo en deque.
Al reponer permisos: Desencolar, CompleteTask con Lease exitoso, decrementar _queueTotalPermits.
Devolución de Leases y Estadísticas
Los métodos devuelven derivados de RateLimitLease:
- FixedWindowLease, SlidingWindowLease, TokenBucketLease (similares).
- ConcurrencyLease (diferente).
Contadores: _successfulAcquires, _failedAcquires (Interlocked.Increment).
RateLimiterStatistics proporciona:
- AvailablePermits.
- CurrentQueueLength.
- Contadores.
La propiedad IdleDuration rastrea el tiempo inactivo sin solicitudes.
Características de Cada Limitador
FixedWindowRateLimiter
Ventana fija: los permisos se reponen al inicio de la ventana (permitPeriod).
_availablePermits se restablece a MaxPermits.
SlidingWindowRateLimiter
Ventana deslizante: rastrea historial en SlidingWindowSize segmentos (segmentSize = permitPeriod / SlidingWindowSize).
Restaura en base a segmentos anteriores.
TokenBucketRateLimiter
Cubo de tokens: _tokens se reponen cada ReplenishmentPeriod, tasa = TokensPerPeriod.
Limita el gasto en base a refillAmount.
ConcurrencyLimiter
Limita _currentConcurrency ≤ PermitLimit.
La cola lanza tareas al completarse las activas (OnCompleted).
Puntos Clave
- Versatilidad: los limitadores básicos forman la base de la limitación de tasa de ASP.NET Core y son aplicables fuera de contextos web.
- Cola: soporta FIFO/LIFO, límite por suma total de permisos, ejecución asíncrona.
- Solicitudes de prueba: permitCount=0 para verificar sin consumir.
- Estadísticas: contadores atómicos + métricas en tiempo real.
- Reposición: impulsada por temporizador para todos ReplenishingRateLimiter.
— Editorial Team
Aún no hay comentarios.