mirror of
https://github.com/go-kratos/kratos.git
synced 2025-01-10 00:29:01 +02:00
optimize bbr
This commit is contained in:
parent
a191f4ffad
commit
63510f80e0
@ -17,10 +17,10 @@ import (
|
||||
|
||||
var (
|
||||
cpu int64
|
||||
decay = 0.75
|
||||
decay = 0.95
|
||||
defaultConf = &Config{
|
||||
Window: time.Second * 5,
|
||||
WinBucket: 50,
|
||||
Window: time.Second * 10,
|
||||
WinBucket: 100,
|
||||
CPUThreshold: 800,
|
||||
}
|
||||
)
|
||||
@ -31,6 +31,7 @@ func init() {
|
||||
go cpuproc()
|
||||
}
|
||||
|
||||
// cpu = cpuᵗ⁻¹ * decay + cpuᵗ * (1 - decay)
|
||||
func cpuproc() {
|
||||
ticker := time.NewTicker(time.Millisecond * 250)
|
||||
defer func() {
|
||||
@ -136,7 +137,11 @@ func (l *BBR) shouldDrop() bool {
|
||||
}
|
||||
return false
|
||||
}
|
||||
return inFlight > 1 && inFlight > maxInflight
|
||||
drop := inFlight > 1 && inFlight > maxInflight
|
||||
if drop {
|
||||
atomic.StoreInt64(&l.prevDrop, time.Now().Unix())
|
||||
}
|
||||
return drop
|
||||
}
|
||||
|
||||
// Stat tasks a snapshot of the bbr limiter.
|
||||
@ -158,7 +163,6 @@ func (l *BBR) Allow(ctx context.Context, opts ...limit.AllowOption) (func(info l
|
||||
opt.Apply(&allowOpts)
|
||||
}
|
||||
if l.shouldDrop() {
|
||||
atomic.StoreInt64(&l.prevDrop, time.Now().Unix())
|
||||
return nil, ecode.LimitExceed
|
||||
}
|
||||
atomic.AddInt64(&l.inFlight, 1)
|
||||
|
@ -145,7 +145,13 @@ func TestBBRShouldDrop(t *testing.T) {
|
||||
bbr.inFlight = 80
|
||||
assert.Equal(t, true, bbr.shouldDrop())
|
||||
|
||||
// cpu < 800, inflight > maxQps, cold duration
|
||||
cpu = 700
|
||||
bbr.inFlight = 80
|
||||
assert.Equal(t, true, bbr.shouldDrop())
|
||||
|
||||
// cpu < 800, inflight > maxQps
|
||||
time.Sleep(2 * time.Second)
|
||||
cpu = 700
|
||||
bbr.inFlight = 80
|
||||
assert.Equal(t, false, bbr.shouldDrop())
|
||||
|
Loading…
Reference in New Issue
Block a user