Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type LeakybuckerLimiter ¶
type LeakybuckerLimiter struct {
// contains filtered or unexported fields
}
LeakybuckerLimiter establece un limitador de procesamiento en base a un número de peticiones de proceso por unidad de tiempo definida, usando una versión simplificada del algoritmo leaky bucket.
ver: https://www.sciencedirect.com/topics/computer-science/leaky-bucket-algorithm
en esta versión, las peticiones de proceso no son descartadas si el bucket está lleno, solo se ponen en espera hasta que haya disponibilidad para procesarlas.
LeakybuckerLimiter esperará a que sea posible ejecutar el siguiente proceso dentro de la unidad de tiempo a través de su método Wait()
func NewLeakyBucketLimiter ¶
func NewLeakyBucketLimiter(rate int, perTime time.Duration) *LeakybuckerLimiter
NewLeakybuckerLimiter devuelve un nuevo limitador leaky bucket listo para usar. rate indica cuanto procesos ejecutar por unidad de tiempo pertime es la unidad de tiempo, generalment time.Second
Ej:
limiter := NewLeakybuckerLimiter(1, time.Second*2) // limitaremos a 1 proceso por cada 2 segundos
prev := time.Now()
for i := 0; i <= 9; i++ {
now := l.Now()
if i > 0 {
ellapsed := now.Sub(prev).Round(time.Millisecond * 2)
fmt.Println("round: %d delay: %s ", i, ellapsed) // al ejecutyar debería verse algo así como: "round: 1 delay: 2s"
}
prev = now
}
Ejemplo en un middleware:
var l = ratio.NewLeakybuckerLimiter(50, 500*time.Millisecond)
func Limiter(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
now := l.Now()
next.ServeHTTP(w, r)
})
}
func (*LeakybuckerLimiter) Wait ¶
func (l *LeakybuckerLimiter) Wait() time.Time
Wait espera a que sea posible ejecutar el siguiente proceso dentro de la unidad de tiempo definida parafraseando la definición de leaky bucket, va llenando el tarro con tokenes de ejecución a medida que se van usando dentro de la unidad de tioempo para que los procesos puedan ir tomando