Documentation ¶
Overview ¶
Package quotas is a generated GoMock package.
Package quotas is a generated GoMock package.
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 MockLimiter
- type MockLimiterFactory
- type MockLimiterFactoryMockRecorder
- type MockLimiterMockRecorder
- 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 MockLimiter ¶ added in v1.2.7
type MockLimiter struct {
// contains filtered or unexported fields
}
MockLimiter is a mock of Limiter interface.
func NewMockLimiter ¶ added in v1.2.7
func NewMockLimiter(ctrl *gomock.Controller) *MockLimiter
NewMockLimiter creates a new mock instance.
func (*MockLimiter) Allow ¶ added in v1.2.7
func (m *MockLimiter) Allow() bool
Allow mocks base method.
func (*MockLimiter) EXPECT ¶ added in v1.2.7
func (m *MockLimiter) EXPECT() *MockLimiterMockRecorder
EXPECT returns an object that allows the caller to indicate expected use.
func (*MockLimiter) Reserve ¶ added in v1.2.7
func (m *MockLimiter) Reserve() *rate.Reservation
Reserve mocks base method.
type MockLimiterFactory ¶ added in v1.2.7
type MockLimiterFactory struct {
// contains filtered or unexported fields
}
MockLimiterFactory is a mock of LimiterFactory interface.
func NewMockLimiterFactory ¶ added in v1.2.7
func NewMockLimiterFactory(ctrl *gomock.Controller) *MockLimiterFactory
NewMockLimiterFactory creates a new mock instance.
func (*MockLimiterFactory) EXPECT ¶ added in v1.2.7
func (m *MockLimiterFactory) EXPECT() *MockLimiterFactoryMockRecorder
EXPECT returns an object that allows the caller to indicate expected use.
func (*MockLimiterFactory) GetLimiter ¶ added in v1.2.7
func (m *MockLimiterFactory) GetLimiter(arg0 string) Limiter
GetLimiter mocks base method.
type MockLimiterFactoryMockRecorder ¶ added in v1.2.7
type MockLimiterFactoryMockRecorder struct {
// contains filtered or unexported fields
}
MockLimiterFactoryMockRecorder is the mock recorder for MockLimiterFactory.
func (*MockLimiterFactoryMockRecorder) GetLimiter ¶ added in v1.2.7
func (mr *MockLimiterFactoryMockRecorder) GetLimiter(arg0 interface{}) *gomock.Call
GetLimiter indicates an expected call of GetLimiter.
type MockLimiterMockRecorder ¶ added in v1.2.7
type MockLimiterMockRecorder struct {
// contains filtered or unexported fields
}
MockLimiterMockRecorder is the mock recorder for MockLimiter.
func (*MockLimiterMockRecorder) Allow ¶ added in v1.2.7
func (mr *MockLimiterMockRecorder) Allow() *gomock.Call
Allow indicates an expected call of Allow.
func (*MockLimiterMockRecorder) Reserve ¶ added in v1.2.7
func (mr *MockLimiterMockRecorder) Reserve() *gomock.Call
Reserve indicates an expected call of Reserve.
func (*MockLimiterMockRecorder) Wait ¶ added in v1.2.7
func (mr *MockLimiterMockRecorder) Wait(arg0 interface{}) *gomock.Call
Wait indicates an expected call of Wait.
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
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package global contains a global-load-balance-aware ratelimiter (when complete).
|
Package global contains a global-load-balance-aware ratelimiter (when complete). |
algorithm
Package algorithm contains a running-weighted-average calculator for ratelimits, and some associated types to prevent accidental confusion between the various floats/ints/etc involved.
|
Package algorithm contains a running-weighted-average calculator for ratelimits, and some associated types to prevent accidental confusion between the various floats/ints/etc involved. |