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:
@@ -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'
|
||||
);
|
||||
Reference in New Issue
Block a user