Merge pull request #1407 from DaydreamCoding/feat/cache-driven-rpm-buffer

feat(gateway): Cache-Driven RPM Buffer
This commit is contained in:
Wesley Liddick
2026-03-31 14:01:23 +08:00
committed by GitHub
3 changed files with 110 additions and 39 deletions
+29 -4
View File
@@ -1742,22 +1742,47 @@ func (a *Account) GetRPMStrategy() string {
}
// GetRPMStickyBuffer 获取 RPM 粘性缓冲数量
// tiered 模式下的黄区大小,默认为 base_rpm 的 20%(至少 1
// Cache-driven: buffer = concurrency + maxSessions(覆盖幽灵窗口 + 稳态会话需求
// floor = baseRPM / 5(向后兼容 maxSessions=0 且 concurrency=0 场景)
func (a *Account) GetRPMStickyBuffer() int {
if a.Extra == nil {
return 0
}
// 手动 override 最高优先级
if v, ok := a.Extra["rpm_sticky_buffer"]; ok {
val := parseExtraInt(v)
if val > 0 {
return val
}
}
base := a.GetBaseRPM()
buffer := base / 5
if buffer < 1 && base > 0 {
buffer = 1
if base <= 0 {
return 0
}
// Cache-driven buffer = concurrency + maxSessions
conc := a.Concurrency
if conc < 0 {
conc = 0
}
sess := a.GetMaxSessions()
if sess < 0 {
sess = 0
}
buffer := conc + sess
// floor: 向后兼容
floor := base / 5
if floor < 1 {
floor = 1
}
if buffer < floor {
buffer = floor
}
return buffer
}