Tickers with random jitter
Jitterbug provides functionality similar to time.Ticker
, but with a configurable random jitter.
Jitterbug has no external dependencies, has a stable API, and is production-ready.
go get -u github.com/lthibault/jitterbug/v2
Jitterbug is used by instantiating a jitterbug.Ticker
with an interval and a
jitterbug.Jitter
. The former specifies a baseline interval for the ticker,
to which a jitter is added by the latter.
package main
import (
"log"
"github.com/lthibault/jitterbug"
)
func main() {
t := jitterbug.New(
time.Millisecond * 300,
&jitterbug.Norm{ Stdev: time.Millisecond * 100 },
)
// jitterbug.Ticker behaves like time.Ticker
for tick := range t.C {
log.Println(tick)
}
}
Jitterbug is compatible with the univariate distributions from GoNum. For example:
t := jitterbug.New(
time.Millisecond * 300,
&jitterbug.Univariate{
Sampler: &distruv.Gamma{
// Tip: cast time.Duration as float64 when using gonum's distruv
Alpha: float64(time.Millisecond * 100),
Beta: float64(time.Millisecond * 200),
}
},
)
- GoNum, specifically the univariate distributions.
- Suture can use jitterbug for it's backoff durations.