el_ratio

package module
v0.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 14, 2023 License: MIT Imports: 4 Imported by: 0

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

Directories

Path Synopsis
examples

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL