Documentation ¶
Index ¶
- func DynamicRateLimiterFactory(rps RPSKeyFunc) func(string) Limiter
- func PerMember(service string, globalRPS, instanceRPS float64, resolver membership.Resolver) float64
- type Collection
- type DynamicRateLimiter
- type Info
- type Limiter
- type MultiStageRateLimiter
- type Policy
- type RPSFunc
- type RPSKeyFunc
- type RateLimiter
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
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
RPSKeyFunc returns a float64 as the RPS for the given key
type RateLimiter ¶ added in v0.7.0
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