perf(queue): 按策略动态扩缩异步 Worker

将 River 执行容量按平台模型与用户组的有效并发策略动态调整,并为长任务续租、并发租约原子抢占和限流退避补充保护。\n\n统一平台模型限流继承语义,兼容历史 platformLimits/modelLimits,并为三个迁移图像模型建立独立并发租约。补充管理端显式继承/覆盖配置、指标、单元测试及隔离 PostgreSQL 验收。\n\n验证:go test ./... -count=1;pnpm lint;pnpm test;pnpm build;隔离 PostgreSQL 并发原子性/续租测试;128 任务与三分钟长任务动态 Worker 验收。
This commit is contained in:
2026-07-24 12:26:56 +08:00
parent 290b8c1854
commit 6c5daf29ca
37 changed files with 2365 additions and 205 deletions
@@ -0,0 +1,58 @@
ALTER TABLE platform_models
ADD COLUMN IF NOT EXISTS rate_limit_policy_mode text;
-- Historical server-main imports wrote {"rules": []} as a placeholder. It
-- means "no override", not an explicit unlimited policy.
UPDATE integration_platforms
SET rate_limit_policy = '{}'::jsonb,
updated_at = now()
WHERE rate_limit_policy = '{"rules":[]}'::jsonb;
UPDATE platform_models
SET rate_limit_policy = '{}'::jsonb,
updated_at = now()
WHERE rate_limit_policy = '{"rules":[]}'::jsonb;
UPDATE platform_models model
SET runtime_policy_set_id = NULL,
runtime_policy_override = '{}'::jsonb
FROM base_model_catalog base
WHERE model.base_model_id = base.id
AND model.runtime_policy_set_id IS NOT DISTINCT FROM base.runtime_policy_set_id
AND model.runtime_policy_override IS NOT DISTINCT FROM base.runtime_policy_override;
UPDATE platform_models model
SET rate_limit_policy_mode = CASE
WHEN model.runtime_policy_override ? 'rateLimitPolicy' THEN 'override'
WHEN model.rate_limit_policy <> '{}'::jsonb
AND (
base.id IS NULL
OR model.rate_limit_policy IS DISTINCT FROM base.default_rate_limit_policy
)
THEN 'override'
ELSE 'inherit'
END
FROM (
SELECT platform_model.id AS platform_model_id, catalog.id, catalog.default_rate_limit_policy
FROM platform_models platform_model
LEFT JOIN base_model_catalog catalog ON catalog.id = platform_model.base_model_id
) base
WHERE model.id = base.platform_model_id
AND model.rate_limit_policy_mode IS NULL;
UPDATE platform_models
SET rate_limit_policy_mode = 'inherit'
WHERE rate_limit_policy_mode IS NULL;
ALTER TABLE platform_models
ALTER COLUMN rate_limit_policy_mode SET DEFAULT 'inherit';
ALTER TABLE platform_models
ADD CONSTRAINT platform_models_rate_limit_policy_mode_check
CHECK (
COALESCE(rate_limit_policy_mode, '') IN ('inherit', 'override')
)
NOT VALID;
ALTER TABLE platform_models
VALIDATE CONSTRAINT platform_models_rate_limit_policy_mode_check;
@@ -0,0 +1,44 @@
-- The three migrated image identities previously relied on a global
-- user-group limit. Give every upstream binding its own canonical concurrency
-- lease so raising the service group no longer removes provider protection.
WITH limits(invocation_name, policy) AS (
VALUES
(
'gemini-3-pro-image',
'{"rules":[{"metric":"concurrent","limit":10,"leaseTtlSeconds":600}]}'::jsonb
),
(
'gemini-3.1-flash-image',
'{"rules":[{"metric":"concurrent","limit":10,"leaseTtlSeconds":600}]}'::jsonb
),
(
'gpt-image-2',
'{"rules":[{"metric":"concurrent","limit":5,"leaseTtlSeconds":300}]}'::jsonb
)
),
updated_base_models AS (
UPDATE base_model_catalog base_model
SET default_rate_limit_policy = limits.policy,
metadata = COALESCE(base_model.metadata, '{}'::jsonb) || jsonb_build_object(
'rateLimitSource', 'image-gateway-migration',
'rateLimitUpdatedAt', '2026-07-24'
),
updated_at = now()
FROM limits
WHERE base_model.invocation_name = limits.invocation_name
RETURNING base_model.id
)
UPDATE platform_models platform_model
SET rate_limit_policy = '{}'::jsonb,
rate_limit_policy_mode = 'inherit',
updated_at = now()
FROM updated_base_models base_model
WHERE platform_model.base_model_id = base_model.id
AND (
platform_model.rate_limit_policy = '{}'::jsonb
OR platform_model.rate_limit_policy = '{"rules":[]}'::jsonb
OR platform_model.rate_limit_policy ? 'platformLimits'
OR platform_model.rate_limit_policy ? 'modelLimits'
OR platform_model.rate_limit_policy ? 'platform_limits'
OR platform_model.rate_limit_policy ? 'model_limits'
);