feat(worker): 实现集群限流与自适应负载

保留平台模型 RPM、TPM 和并发策略语义,增加 PostgreSQL 集群级租约、饱和候选重选和多平台自动负载,避免突发任务固定等待首个平台。\n\n新增 Worker 实时负载采样、自适应 active/heavy 容量、心跳与管理端指标,并扩展本地 acceptance runner,覆盖三 Worker、同模型三平台 2/4/6 并发和 48 个带图视频突发任务。\n\n验证:go test ./...、go vet ./...、PostgreSQL 跨 Store 集成测试、gofmt、bash -n、ShellCheck 及本地集群 provider-burst 验收通过;48/48 成功,无越限、重复提交、重复计费、重复回调或终态资源泄漏。
This commit is contained in:
2026-08-03 00:13:46 +08:00
parent 9a01fd4657
commit c28bf74230
52 changed files with 3700 additions and 272 deletions
+126
View File
@@ -2575,6 +2575,30 @@
}
}
},
"/api/admin/runtime/workers": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"produces": [
"application/json"
],
"tags": [
"acceptance"
],
"summary": "获取集群 Worker 实时负载与领取容量",
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/store.WorkerClusterRuntime"
}
}
}
}
},
"/api/admin/system/acceptance/capacity-profiles": {
"get": {
"security": [
@@ -16347,6 +16371,108 @@
"$ref": "#/definitions/store.GatewayWalletAccount"
}
}
},
"store.WorkerClusterRuntime": {
"type": "object",
"properties": {
"capturedAt": {
"type": "string"
},
"queue": {
"$ref": "#/definitions/store.WorkerQueueRuntime"
},
"workers": {
"type": "array",
"items": {
"$ref": "#/definitions/store.WorkerInstanceRuntime"
}
}
}
},
"store.WorkerInstanceRuntime": {
"type": "object",
"properties": {
"activeLeases": {
"type": "integer"
},
"allocatedCapacity": {
"type": "integer"
},
"capacityLimit": {
"type": "integer"
},
"drainingAt": {
"type": "string"
},
"finalizingTasks": {
"type": "integer"
},
"hardCapacityLimit": {
"type": "integer"
},
"heartbeatAt": {
"type": "string"
},
"heavyCapacity": {
"type": "integer"
},
"instanceId": {
"type": "string"
},
"loadSampledAt": {
"type": "string"
},
"podName": {
"type": "string"
},
"podUid": {
"type": "string"
},
"preparingTasks": {
"type": "integer"
},
"pressureReason": {
"type": "string"
},
"pressureState": {
"type": "string"
},
"reportedActiveTasks": {
"type": "integer"
},
"revision": {
"type": "string"
},
"runningTasks": {
"type": "integer"
},
"safeCapacity": {
"type": "integer"
},
"site": {
"type": "string"
},
"status": {
"type": "string"
},
"waitingUpstreamTasks": {
"type": "integer"
}
}
},
"store.WorkerQueueRuntime": {
"type": "object",
"properties": {
"oldestWaitSeconds": {
"type": "number"
},
"queued": {
"type": "integer"
},
"running": {
"type": "integer"
}
}
}
},
"securityDefinitions": {
+81
View File
@@ -4196,6 +4196,73 @@ definitions:
primaryAccount:
$ref: '#/definitions/store.GatewayWalletAccount'
type: object
store.WorkerClusterRuntime:
properties:
capturedAt:
type: string
queue:
$ref: '#/definitions/store.WorkerQueueRuntime'
workers:
items:
$ref: '#/definitions/store.WorkerInstanceRuntime'
type: array
type: object
store.WorkerInstanceRuntime:
properties:
activeLeases:
type: integer
allocatedCapacity:
type: integer
capacityLimit:
type: integer
drainingAt:
type: string
finalizingTasks:
type: integer
hardCapacityLimit:
type: integer
heartbeatAt:
type: string
heavyCapacity:
type: integer
instanceId:
type: string
loadSampledAt:
type: string
podName:
type: string
podUid:
type: string
preparingTasks:
type: integer
pressureReason:
type: string
pressureState:
type: string
reportedActiveTasks:
type: integer
revision:
type: string
runningTasks:
type: integer
safeCapacity:
type: integer
site:
type: string
status:
type: string
waitingUpstreamTasks:
type: integer
type: object
store.WorkerQueueRuntime:
properties:
oldestWaitSeconds:
type: number
queued:
type: integer
running:
type: integer
type: object
info:
contact: {}
description: |-
@@ -5846,6 +5913,20 @@ paths:
summary: 更新 Runner 策略
tags:
- runtime
/api/admin/runtime/workers:
get:
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/store.WorkerClusterRuntime'
security:
- BearerAuth: []
summary: 获取集群 Worker 实时负载与领取容量
tags:
- acceptance
/api/admin/system/acceptance/capacity-profiles:
get:
produces: