limiter

package
v0.6.1 Latest Latest
Warning

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

Go to latest
Published: Jul 31, 2023 License: Apache-2.0 Imports: 6 Imported by: 0

Documentation

Index

Constants

View Source
const TypeLimiter iface.ItemType = "limiter_config"

TypeLimiter serves as itemKey in ConfigValueImpl

Variables

View Source
var NewLimiterConfig = util.JsonInitializer(func() iface.ConfigValueItem {
	return &LimiterConfig{}
})

NewLimiterConfig decodes json bytes into a newly allocated LimiterConfig object

Functions

func CopyDefaultLimitConfig

func CopyDefaultLimitConfig() iface.ConfigValueItem

CopyDefaultLimitConfig copies the default limiter configuration and returns a new instance of it

func NewLimiterWrapper

func NewLimiterWrapper(conLimit ConcurrencyLimiter, qpsLimit RateLimiter) limit.Updater

NewLimiterWrapper wraps the given ConcurrencyLimiter and RateLimiter into a limit.Updater.

Types

type ConcurrencyLimiter

type ConcurrencyLimiter interface {
	// Acquire reports if next access to the protected resource is allowed.
	Acquire(ctx context.Context) bool

	// Release claims a previous taken access has released the resource.
	Release(ctx context.Context)

	// Status returns the total quota and occupied.
	Status(ctx context.Context) (limit, occupied int)
}

ConcurrencyLimiter limits the number of concurrent access towards the protected resource. The implementation of ConcurrencyLimiter should be concurrent safe.

func NewConcurrencyLimiter deprecated

func NewConcurrencyLimiter(lim int) ConcurrencyLimiter

Deprecated: Use NewConnectionLimiter instead.

func NewConnectionLimiter

func NewConnectionLimiter(lim int) ConcurrencyLimiter

NewConnectionLimiter returns a new ConnectionLimiter with the given limit.

type DummyConcurrencyLimiter

type DummyConcurrencyLimiter struct{}

DummyConcurrencyLimiter implements ConcurrencyLimiter but without actual limitation.

func (*DummyConcurrencyLimiter) Acquire

func (dcl *DummyConcurrencyLimiter) Acquire(ctx context.Context) bool

Acquire .

func (*DummyConcurrencyLimiter) Release

func (dcl *DummyConcurrencyLimiter) Release(ctx context.Context)

Release .

func (*DummyConcurrencyLimiter) Status

func (dcl *DummyConcurrencyLimiter) Status(ctx context.Context) (limit, occupied int)

Status .

type DummyRateLimiter

type DummyRateLimiter struct{}

DummyRateLimiter implements RateLimiter but without actual limitation.

func (*DummyRateLimiter) Acquire

func (drl *DummyRateLimiter) Acquire(ctx context.Context) bool

Acquire .

func (*DummyRateLimiter) Status

func (drl *DummyRateLimiter) Status(ctx context.Context) (max, current int, interval time.Duration)

Status .

type LimitReporter

type LimitReporter interface {
	ConnOverloadReport()
	QPSOverloadReport()
}

LimitReporter is the interface define to report(metric or print log) when limit happen

type LimiterConfig

type LimiterConfig struct {
	ConnectionLimit int64 `json:"connection_limit"`
	QPSLimit        int64 `json:"qps_limit"`
}

LimiterConfig represents the configuration for kitex server limiter zero value means no limit.

func (*LimiterConfig) DeepCopy

func (l *LimiterConfig) DeepCopy() iface.ConfigValueItem

DeepCopy makes a deep copy of LimiterConfig struct and returns a new instance of iface.ConfigValueItem

func (*LimiterConfig) EqualsTo

func (l *LimiterConfig) EqualsTo(item iface.ConfigValueItem) bool

EqualsTo determines if the LimiterConfig is equal to the given ConfigValueItem.

type RateLimiter

type RateLimiter interface {
	// Acquire reports if next access to the protected resource is allowed.
	Acquire(ctx context.Context) bool

	// Status returns the rate limit.
	Status(ctx context.Context) (max, current int, interval time.Duration)
}

RateLimiter limits the access rate towards the protected resource.

func NewQPSLimiter

func NewQPSLimiter(interval time.Duration, limit int) RateLimiter

NewQPSLimiter creates qpsLimiter.

type Updatable

type Updatable interface {
	UpdateLimit(limit int)
}

Updatable is a kind of limiters that support changing the limit dynamically. Note that `UpdateLimit` does not guarantee to be concurrent-safe.

Jump to

Keyboard shortcuts

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