Rate Limiting es una técnica utilizada en sistemas distribuidos para regular el número de solicitudes que un cliente o usuario puede enviar a un servicio o API dentro de un período de tiempo determinado. Su objetivo principal es proteger los recursos del sistema de sobrecargas, ataques de denegación de servicio (DoS/DDoS), y comportamientos abusivos o erróneos. Se implementa típicamente mediante algoritmos como Token Bucket, Leaky Bucket, Fixed Window Counter o Sliding Window Log, que rastrean el uso y determinan si una solicitud debe ser procesada o rechazada (a menudo con un código de estado HTTP 429 Too Many Requests).
En el mundo real, Rate Limiting es una característica fundamental en la mayoría de las APIs públicas y servicios web. Por ejemplo, AWS API Gateway permite configurar límites de tasa y ráfaga para las solicitudes a las APIs. Plataformas como Stripe y Twilio implementan Rate Limiting para sus APIs de pago y mensajería, respectivamente, para garantizar la equidad y la disponibilidad del servicio. Los Content Delivery Networks (CDNs) como Cloudflare y Akamai utilizan Rate Limiting para mitigar ataques DDoS y proteger los orígenes. A nivel de infraestructura, herramientas como NGINX y Envoy Proxy ofrecen módulos y filtros para aplicar Rate Limiting de manera eficiente en el borde de la red o en la malla de servicios (service mesh).
Para un Arquitecto de Sistemas, Rate Limiting es crucial para la resiliencia, seguridad y economía de los servicios. La elección del algoritmo de Rate Limiting (ej. Token Bucket para ráfagas, Leaky Bucket para suavizar el tráfico) impacta directamente en la experiencia del usuario y la protección del backend. Los trade-offs incluyen la granularidad (por IP, por usuario, por API key), la ventana de tiempo, y la acción a tomar ante un límite excedido (rechazar, retrasar, degradar el servicio). Una implementación inadecuada puede llevar a falsos positivos, bloqueando usuarios legítimos, o a una protección insuficiente, dejando el sistema vulnerable. Es vital considerar la distribución del Rate Limiting (centralizado vs. distribuido) y cómo se escala, especialmente en arquitecturas de microservicios, para evitar cuellos de botella y garantizar la consistencia en el conteo de solicitudes.