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