Junior — Middle
¿Cómo se implementa el mecanismo de limitación de la cantidad de solicitudes en un período de tiempo en el sistema?
sobes.tech AI
Respuesta de la IA
El mecanismo de limitación de la cantidad de solicitudes por unidad de tiempo (limitación de tasa) en Go a menudo se implementa mediante tokens o contadores con ventana de tiempo.
Ejemplo usando el paquete golang.org/x/time/rate:
import (
"golang.org/x/time/rate"
"net/http"
)
var limiter = rate.NewLimiter(1, 5) // 1 solicitud por segundo con un máximo de 5 tokens
func handler(w http.ResponseWriter, r *http.Request) {
if !limiter.Allow() {
http.Error(w, "Too Many Requests", http.StatusTooManyRequests)
return
}
// procesamiento de la solicitud
}
Aquí, rate.NewLimiter crea un limitador que permite 1 solicitud por segundo, pero puede acumular hasta 5 tokens, permitiendo picos cortos de solicitudes. Si hay demasiadas solicitudes, se rechazan con el error 429.
Otros enfoques incluyen la ventana fija, la ventana deslizante o el uso de Redis para limitación distribuida.