feat(routing): 完善平台满载避让与故障轮转
为未配置并发上限的平台增加基于运行和等待任务数的软负载,并按非满载、有效优先级、缓存亲和与负载稳定排序。\n\n平台模型 RPM、TPM 和并发额度竞争失败时只轮转候选,不触发冷却、禁用或降级;用户组额度保持不可绕过。补齐异步冷却排队恢复、满载原因、选择原因与低基数指标。\n\n验证:go test ./...;go vet ./...;PostgreSQL 原子额度、准入队列、Worker 容量回收及故障策略 HTTP acceptance。
This commit is contained in:
@@ -126,6 +126,8 @@ func attemptMetrics(candidate store.RuntimeModelCandidate, attemptNo int, simula
|
||||
"currentPriority": candidate.PlatformPriority,
|
||||
"loadRatio": candidate.LoadRatio,
|
||||
"loadAvoided": candidate.LoadAvoided,
|
||||
"fullReasons": candidate.FullReasons,
|
||||
"selectionReason": candidate.SelectionReason,
|
||||
"simulated": simulated,
|
||||
}
|
||||
if candidate.ResponseProtocol != "" {
|
||||
@@ -138,25 +140,25 @@ func attemptMetrics(candidate store.RuntimeModelCandidate, attemptNo int, simula
|
||||
metrics["responseConverted"] = true
|
||||
}
|
||||
}
|
||||
if candidate.LoadLimited {
|
||||
metrics["loadMetrics"] = map[string]any{
|
||||
"rpm": map[string]any{
|
||||
"current": candidate.LoadMetrics.RPMCurrent,
|
||||
"limit": candidate.LoadMetrics.RPMLimit,
|
||||
"ratio": candidate.LoadMetrics.RPMRatio,
|
||||
},
|
||||
"tpm": map[string]any{
|
||||
"current": candidate.LoadMetrics.TPMCurrent,
|
||||
"limit": candidate.LoadMetrics.TPMLimit,
|
||||
"ratio": candidate.LoadMetrics.TPMRatio,
|
||||
},
|
||||
"concurrent": map[string]any{
|
||||
"current": candidate.LoadMetrics.ConcurrentCurrent,
|
||||
"limit": candidate.LoadMetrics.ConcurrentLimit,
|
||||
"ratio": candidate.LoadMetrics.ConcurrentRatio,
|
||||
},
|
||||
"queued": candidate.LoadMetrics.QueuedCount,
|
||||
}
|
||||
metrics["loadMetrics"] = map[string]any{
|
||||
"rpm": map[string]any{
|
||||
"current": candidate.LoadMetrics.RPMCurrent,
|
||||
"limit": candidate.LoadMetrics.RPMLimit,
|
||||
"ratio": candidate.LoadMetrics.RPMRatio,
|
||||
},
|
||||
"tpm": map[string]any{
|
||||
"current": candidate.LoadMetrics.TPMCurrent,
|
||||
"limit": candidate.LoadMetrics.TPMLimit,
|
||||
"ratio": candidate.LoadMetrics.TPMRatio,
|
||||
},
|
||||
"concurrent": map[string]any{
|
||||
"current": candidate.LoadMetrics.ConcurrentCurrent,
|
||||
"limit": candidate.LoadMetrics.ConcurrentLimit,
|
||||
"ratio": candidate.LoadMetrics.ConcurrentRatio,
|
||||
"softCurrent": candidate.LoadMetrics.SoftCurrent,
|
||||
"softRatio": candidate.LoadMetrics.SoftRatio,
|
||||
},
|
||||
"queued": candidate.LoadMetrics.QueuedCount,
|
||||
}
|
||||
if candidate.CacheAffinity.Key != "" {
|
||||
metrics["cacheAffinityKey"] = candidate.CacheAffinity.Key
|
||||
|
||||
Reference in New Issue
Block a user