Files
junhong_cmp_fiber/migrations/000254_add_carrier_scheduler_system_config.up.sql
邹进 dae44bed30 feat: 按运营商账户调度的迁移、配置与账户队列 Lua
- 迁移 000251~000254:运营商账户调度参数、请求检查场景(预置 8 个)、卡轮询失败告警表,以及调度模式、步骤、退避、告警等受控系统配置(默认 legacy,行为不变);并发配置表注释标记废弃
- 受控系统配置注册与 JSON 结构校验:步骤只能是 4 种检查类型且不重复、退避序列递增
- yaml 增加 NSQ 地址、msg_timeout、租约、续期间隔、分发间隔、默认执行上限与 max_in_flight;引入 go-nsq
- 测试环境 docker-compose 增加 nsqlookupd 与 nsqd,Worker 注入 NSQ 地址
- 账户队列 Redis 结构与 Lua:领取(执行上限、优先占比、按限流组剩余 QPS 估算)、抢执行权、续期、收尾、请求检查(合并、冷却、执行中打优先标记)、移出、发布失败释放
2026-10-25 18:28:42 +09:00

32 lines
3.9 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 按运营商账户调度的受控系统配置(add-carrier-polling-scheduler),module = polling。
-- 配置的权威定义(类型、取值范围、默认值、JSON 结构校验)在代码注册表中;本迁移只落库初始值。
-- 已存在同名 Key 时不覆盖(ON CONFLICT DO NOTHING),避免覆盖运营已修改的值。
--
-- 1. polling.scheduler.mode:legacy 旧分片调度(默认)/ carrier 按运营商账户调度;全局整体切换,不按账户灰度。
-- 2. polling.scheduler.step_order:卡任务步骤顺序,只能是 card_status / carddata / realname / package 且不重复。
-- 3. polling.scheduler.step_timeout_seconds:各检查类型单步超时(秒)。
-- 4. polling.scheduler.task_timeout_margin_seconds:卡任务总超时 = 各步骤超时之和 + 余量。
-- 5. polling.scheduler.skip_package_after_flow:同轮流量步骤已触发停复机评估时跳过套餐步骤。
-- 6. polling.failure.backoff_seconds:失败退避序列(秒,递增),可按检查类型覆盖 default;最长不超过该类型正常间隔。
-- 7. polling.failure.alert_fail_count:连续失败告警阈值,可按检查类型覆盖 default。
-- 8. polling.failure.alert_fail_duration_seconds:持续失败时长告警阈值(秒)。
-- 9. polling.failure.immediate_alert_categories:首次出现即告警的错误类别。
-- 10. polling.failure.account_alert_window_seconds / account_alert_threshold:账户级告警窗口与阈值。
-- 同时把 tb_polling_concurrency_config 表注释标记为废弃(新调度按账户执行上限与限流取代全局并发配置),不删表。
INSERT INTO tb_system_config (config_key, config_value, value_type, module, description, is_readonly, is_sensitive, creator, updater, created_at, updated_at) VALUES
('polling.scheduler.mode', 'legacy', 'string', 'polling', '卡轮询调度模式:legacy 旧分片调度,carrier 按运营商账户调度(整体切换)', FALSE, FALSE, 0, 0, NOW(), NOW()),
('polling.scheduler.step_order', '["card_status","carddata","realname","package"]', 'json', 'polling', '卡任务步骤顺序', FALSE, FALSE, 0, 0, NOW(), NOW()),
('polling.scheduler.step_timeout_seconds', '{"card_status":15,"carddata":15,"realname":15,"package":20}', 'json', 'polling', '各检查类型单步超时(秒)', FALSE, FALSE, 0, 0, NOW(), NOW()),
('polling.scheduler.task_timeout_margin_seconds', '10', 'int', 'polling', '卡任务总超时余量(秒):总超时 = 各步骤超时之和 + 余量', FALSE, FALSE, 0, 0, NOW(), NOW()),
('polling.scheduler.skip_package_after_flow', 'true', 'bool', 'polling', '同轮流量步骤已触发停复机评估时跳过套餐步骤', FALSE, FALSE, 0, 0, NOW(), NOW()),
('polling.failure.backoff_seconds', '{"default":[60,300,900,1800,3600]}', 'json', 'polling', '失败退避序列(秒,递增),可按检查类型覆盖 default', FALSE, FALSE, 0, 0, NOW(), NOW()),
('polling.failure.alert_fail_count', '{"default":5}', 'json', 'polling', '连续失败告警阈值,可按检查类型覆盖 default', FALSE, FALSE, 0, 0, NOW(), NOW()),
('polling.failure.alert_fail_duration_seconds', '21600', 'int', 'polling', '持续失败时长告警阈值(秒)', FALSE, FALSE, 0, 0, NOW(), NOW()),
('polling.failure.immediate_alert_categories', '["account_config"]', 'json', 'polling', '首次出现即告警的错误类别', FALSE, FALSE, 0, 0, NOW(), NOW()),
('polling.failure.account_alert_window_seconds', '600', 'int', 'polling', '账户级告警统计窗口(秒)', FALSE, FALSE, 0, 0, NOW(), NOW()),
('polling.failure.account_alert_threshold', '50', 'int', 'polling', '账户级告警阈值:窗口内同账户新增失败告警数', FALSE, FALSE, 0, 0, NOW(), NOW())
ON CONFLICT (config_key) DO NOTHING;
COMMENT ON TABLE tb_polling_concurrency_config IS '已废弃:按运营商账户调度后由账户执行上限与网关限流取代,仅旧分片调度使用';