Enlaces rápidos:
Introducción:
¡Hola, entusiastas del código abierto y aficionados a Go! Regresé con una descripción general rápida de mi proyecto de código abierto, ThrottleX, un limitador de velocidad distribuido para API. Todavía soy bastante nuevo en este mundo del código abierto, ¡así que tus consejos siempre son bienvenidos! ?
ThrottleX está diseñado para ayudarlo a administrar el tráfico API de manera efectiva, manteniendo su sistema fluido y justo. Ya sea para prevenir abusos o manejar cargas elevadas, ThrottleX lo tiene cubierto. Exploremos algunos de los algoritmos de limitación de velocidad que hacen que ThrottleX sea poderoso. ?
ThrottleX viene con tres algoritmos principales para ayudarte a administrar el tráfico de tu API:
Cómo funciona: Imagínese dividir el tiempo en intervalos fijos. Durante cada intervalo, permite una cantidad fija de solicitudes, digamos, 100 solicitudes por minuto. Una vez que se cierra la ventana, el contador se reinicia.
Caso de uso: Excelente para patrones de tráfico predecibles, pero tenga cuidado con el "problema de límites", donde muchas solicitudes cerca del final de la ventana pueden sobrepasar el límite de velocidad previsto.
Cómo funciona: Es como un promedio móvil: en lugar de restablecerse por completo al final de cada ventana, el límite de tasa se "desliza" a lo largo del tiempo, lo que proporciona un control más fluido.
Caso de uso: Perfecto para evitar picos y distribuir solicitudes de manera más uniforme.
Cómo funciona: imagina un cubo que se llena de tokens a un ritmo constante. Las solicitudes consumen tokens y, si el depósito está vacío, las solicitudes se bloquean hasta que se vuelve a llenar.
Caso de uso: Ideal para permitir ráfagas repentinas de tráfico si se ahorran tokens.
Aquí hay un ejemplo sencillo utilizando el limitador de velocidad de ventana fija:
package main import ( "github.com/neelp03/throttlex/ratelimiter" "github.com/neelp03/throttlex/store" "time" "fmt" ) func main() { // Initialize an in-memory store and a Fixed Window rate limiter memStore := store.NewMemoryStore() limiter, err := ratelimiter.NewFixedWindowLimiter(memStore, 10, time.Minute) if err != nil { fmt.Println("Failed to create limiter:", err) return } // Simulate API requests key := "user1" for i := 0; iSalida esperada:
Request 1 allowed Request 2 allowed ... (up to 10 allowed) Request 11 blocked Request 12 blocked ... (up to 15 blocked)¿Qué sigue para ThrottleX? ?
¡Estén atentos a estas futuras actualizaciones que harán que ThrottleX sea aún más poderoso!
Todavía soy nuevo en el código abierto y me encantaría que fueras parte de este viaje. Las contribuciones siempre son bienvenidas, ya sean correcciones de errores, sugerencias o mejoras de documentación.
Consulta el repositorio: ThrottleX GitHub Repo y dale una estrella si lo encuentras útil. No dudes en abrir incidencias o realizar solicitudes: ¡todo ayuda!
Pensamientos finales
ThrottleX es mi intento de hacer que la limitación de velocidad API sea más accesible y eficiente. ¡Hagámoslo divertido (y menos doloroso)! ?
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3