Documentation ¶
Index ¶
- func PerMember(service string, globalRPS, instanceRPS float64, resolver membership.Resolver) float64
- type Collection
- type DynamicRateLimiter
- type Info
- type Limiter
- type LimiterFactory
- func NewFallbackDynamicRateLimiterFactory(primary dynamicconfig.IntPropertyFnWithDomainFilter, ...) LimiterFactory
- func NewPerMemberDynamicRateLimiterFactory(service string, globalRPS dynamicconfig.IntPropertyFnWithDomainFilter, ...) LimiterFactory
- func NewSimpleDynamicRateLimiterFactory(rps dynamicconfig.IntPropertyFnWithDomainFilter) LimiterFactory
- type MultiStageRateLimiter
- type Policy
- type RPSFunc
- type RPSKeyFunc
- type RateLimiter
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
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 LimiterFactory) *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, checks for updates to the dynamic config and updates the rate limiter accordingly
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 LimiterFactory ¶ added in v1.2.6
type LimiterFactory interface { // GetLimiter returns a new Limiter for the given domain GetLimiter(domain string) Limiter }
LimiterFactory is used to create a Limiter for a given domain
func NewFallbackDynamicRateLimiterFactory ¶ added in v1.2.6
func NewFallbackDynamicRateLimiterFactory( primary dynamicconfig.IntPropertyFnWithDomainFilter, secondary dynamicconfig.IntPropertyFn, ) LimiterFactory
LimiterFactory is used to create a Limiter for a given domain the created Limiter will use the primary dynamic config if it is set otherwise it will use the secondary dynamic config
func NewPerMemberDynamicRateLimiterFactory ¶ added in v1.2.6
func NewPerMemberDynamicRateLimiterFactory( service string, globalRPS dynamicconfig.IntPropertyFnWithDomainFilter, instanceRPS dynamicconfig.IntPropertyFnWithDomainFilter, resolver membership.Resolver, ) LimiterFactory
NewPerMemberDynamicRateLimiterFactory creates a new LimiterFactory which creates a new DynamicRateLimiter for each domain, the RPS for the DynamicRateLimiter is given by the globalRPS and averaged by member count for a given service. instanceRPS is used as a fallback if globalRPS is not provided.
func NewSimpleDynamicRateLimiterFactory ¶ added in v1.2.6
func NewSimpleDynamicRateLimiterFactory(rps dynamicconfig.IntPropertyFnWithDomainFilter) LimiterFactory
NewSimpleDynamicRateLimiterFactory creates a new LimiterFactory which creates a new DynamicRateLimiter for each domain, the RPS for the DynamicRateLimiter is given by the dynamic config
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 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