quotas

package
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Mar 17, 2023 License: MIT Imports: 7 Imported by: 8

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func DynamicRateLimiterFactory added in v0.24.0

func DynamicRateLimiterFactory(rps RPSKeyFunc) func(string) Limiter

DynamicRateLimiterFactory creates a factory function for creating DynamicRateLimiters

func PerMember added in v0.24.0

func PerMember(service string, globalRPS, instanceRPS float64, resolver membership.Resolver) float64

PerMember allows creating per instance RPS based on globalRPS averaged by member count for a given service. If member count can not be retrieved or globalRPS is not provided it falls back to instanceRPS.

Types

type Collection added in v0.24.0

type Collection struct {
	// contains filtered or unexported fields
}

Collection stores a map of limiters by key

func NewCollection added in v0.24.0

func NewCollection(factory func(string) Limiter) *Collection

NewCollection create a new limiter collection. Given factory is called to create new individual limiter.

func (*Collection) For added in v0.24.0

func (c *Collection) For(key string) Limiter

For retrieves limiter by a given key. If limiter for such key does not exists, it creates new one with via factory.

type DynamicRateLimiter added in v0.7.0

type DynamicRateLimiter struct {
	// contains filtered or unexported fields
}

DynamicRateLimiter implements a dynamic config wrapper around the rate limiter

func NewDynamicRateLimiter added in v0.7.0

func NewDynamicRateLimiter(rps RPSFunc) *DynamicRateLimiter

NewDynamicRateLimiter returns a rate limiter which handles dynamic config

func (*DynamicRateLimiter) Allow added in v0.7.0

func (d *DynamicRateLimiter) Allow() bool

Allow immediately returns with true or false indicating if a rate limit token is available or not

func (*DynamicRateLimiter) Reserve added in v0.7.0

func (d *DynamicRateLimiter) Reserve() *rate.Reservation

Reserve reserves a rate limit token

func (*DynamicRateLimiter) Wait added in v0.7.0

func (d *DynamicRateLimiter) Wait(ctx context.Context) error

Wait waits up till deadline for a rate limit token

type Info added in v0.7.0

type Info struct {
	Domain string
}

Info corresponds to information required to determine rate limits

type Limiter added in v0.7.0

type Limiter interface {
	// Allow attempts to allow a request to go through. The method returns
	// immediately with a true or false indicating if the request can make
	// progress
	Allow() bool

	// Wait waits till the deadline for a rate limit token to allow the request
	// to go through.
	Wait(ctx context.Context) error

	// Reserve reserves a rate limit token
	Reserve() *rate.Reservation
}

Limiter corresponds to basic rate limiting functionality.

type MultiStageRateLimiter added in v0.7.0

type MultiStageRateLimiter struct {
	// contains filtered or unexported fields
}

MultiStageRateLimiter indicates a domain specific rate limit policy

func NewMultiStageRateLimiter added in v0.7.0

func NewMultiStageRateLimiter(global Limiter, domainLimiters *Collection) *MultiStageRateLimiter

NewMultiStageRateLimiter returns a new domain quota rate limiter. This is about an order of magnitude slower than

func (*MultiStageRateLimiter) Allow added in v0.7.0

func (d *MultiStageRateLimiter) Allow(info Info) bool

Allow attempts to allow a request to go through. The method returns immediately with a true or false indicating if the request can make progress

type Policy

type Policy interface {
	// Allow attempts to allow a request to go through. The method returns
	// immediately with a true or false indicating if the request can make
	// progress
	Allow(info Info) bool
}

Policy corresponds to a quota policy. A policy allows implementing layered and more complex rate limiting functionality.

type RPSFunc added in v0.7.0

type RPSFunc func() float64

RPSFunc returns a float64 as the RPS

func PerMemberDynamic added in v0.24.0

func PerMemberDynamic(service string, globalRPS, instanceRPS RPSFunc, resolver membership.Resolver) RPSFunc

PerMemberDynamic is a dynamic variant (using RPSFunc) of PerMember

type RPSKeyFunc added in v0.7.0

type RPSKeyFunc func(key string) float64

RPSKeyFunc returns a float64 as the RPS for the given key

type RateLimiter added in v0.7.0

type RateLimiter struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

RateLimiter is a wrapper around the golang rate limiter handling dynamic configuration updates of the max dispatch per second. This has comparable performance to the token bucket rate limiter. BenchmarkSimpleRateLimiter-4 10000000 114 ns/op (tokenbucket) BenchmarkRateLimiter-4 10000000 148 ns/op (this)

func NewRateLimiter added in v0.7.0

func NewRateLimiter(maxDispatchPerSecond *float64, ttl time.Duration, minBurst int) *RateLimiter

NewRateLimiter returns a new rate limiter that can handle dynamic configuration updates

func NewSimpleRateLimiter

func NewSimpleRateLimiter(rps int) *RateLimiter

NewSimpleRateLimiter returns a new rate limiter backed by the golang rate limiter

func (*RateLimiter) Allow added in v0.7.0

func (rl *RateLimiter) Allow() bool

Allow immediately returns with true or false indicating if a rate limit token is available or not

func (*RateLimiter) Limit added in v0.7.0

func (rl *RateLimiter) Limit() float64

Limit returns the current rate per second limit for this ratelimiter

func (*RateLimiter) Reserve added in v0.7.0

func (rl *RateLimiter) Reserve() *rate.Reservation

Reserve reserves a rate limit token

func (*RateLimiter) UpdateMaxDispatch added in v0.7.0

func (rl *RateLimiter) UpdateMaxDispatch(maxDispatchPerSecond *float64)

UpdateMaxDispatch updates the max dispatch rate of the rate limiter

func (*RateLimiter) Wait added in v0.7.0

func (rl *RateLimiter) Wait(ctx context.Context) error

Wait waits up till deadline for a rate limit token

Jump to

Keyboard shortcuts

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