-- 轮询系统初始化配置脚本 -- 设计目标: 支持一亿张卡规模 -- 执行: psql -U user -d database -f scripts/init_polling_config.sql -- ======================================== -- 1. 轮询配置初始化 -- 设计原则: -- - 未实名卡:5分钟检查一次(避免过于频繁) -- - 已实名卡:每天检查一次(状态稳定) -- - 激活卡流量:每小时检查一次 -- ======================================== -- 删除已有配置(如果存在) DELETE FROM tb_polling_config; -- 优先级 10: 未实名卡(中频检查,每5分钟) -- 预估:1000万未实名卡 × 12次/小时 = 1.2亿次/小时 INSERT INTO tb_polling_config (config_name, card_condition, card_category, carrier_id, priority, realname_check_interval, carddata_check_interval, package_check_interval, status, description) VALUES ('未实名卡轮询', 'not_real_name', NULL, NULL, 10, 300, NULL, NULL, 1, '未实名卡每5分钟检查一次实名状态(一亿卡规模优化)'); -- 优先级 15: 行业卡(无需实名检查) INSERT INTO tb_polling_config (config_name, card_condition, card_category, carrier_id, priority, realname_check_interval, carddata_check_interval, package_check_interval, status, description) VALUES ('行业卡轮询', NULL, 'industry', NULL, 15, NULL, 3600, 3600, 1, '行业卡无需实名检查,每小时检查流量和套餐'); -- 优先级 20: 已实名卡(低频检查,每天一次) -- 预估:3000万已实名卡 × 1次/天 = 很少 INSERT INTO tb_polling_config (config_name, card_condition, card_category, carrier_id, priority, realname_check_interval, carddata_check_interval, package_check_interval, status, description) VALUES ('已实名卡轮询', 'real_name', NULL, NULL, 20, 86400, NULL, NULL, 1, '已实名卡每天检查一次实名状态(状态稳定,无需频繁检查)'); -- 优先级 30: 已激活卡(流量和套餐检查,每小时) -- 预估:6000万激活卡 × 1次/小时 = 6000万次/小时 INSERT INTO tb_polling_config (config_name, card_condition, card_category, carrier_id, priority, realname_check_interval, carddata_check_interval, package_check_interval, status, description) VALUES ('已激活卡轮询', 'activated', NULL, NULL, 30, NULL, 3600, 3600, 1, '已激活卡每小时检查流量和套餐(一亿卡规模优化)'); -- 优先级 100: 默认配置(兜底,保守策略) INSERT INTO tb_polling_config (config_name, card_condition, card_category, carrier_id, priority, realname_check_interval, carddata_check_interval, package_check_interval, status, description) VALUES ('默认轮询配置', NULL, NULL, NULL, 100, 86400, 86400, 86400, 1, '默认配置,每天检查一次(未匹配其他配置的卡)'); -- ======================================== -- 2. 并发控制配置初始化 -- 设计目标:支持 5 万 QPS 吞吐 -- 单 Worker 建议:500-1000 并发 -- 多 Worker 部署:8-16 个 Worker -- ======================================== -- 删除已有配置(如果存在) DELETE FROM tb_polling_concurrency_config; -- 实名检查并发数(单 Worker) INSERT INTO tb_polling_concurrency_config (task_type, max_concurrency, description) VALUES ('realname', 500, '实名检查任务最大并发数(单 Worker,可部署多个 Worker 水平扩展)'); -- 卡流量检查并发数(单 Worker) INSERT INTO tb_polling_concurrency_config (task_type, max_concurrency, description) VALUES ('carddata', 1000, '流量检查任务最大并发数(单 Worker,流量检查占比最大)'); -- 套餐检查并发数(单 Worker) INSERT INTO tb_polling_concurrency_config (task_type, max_concurrency, description) VALUES ('package', 500, '套餐检查任务最大并发数(单 Worker)'); -- 停复机操作并发数(单 Worker) INSERT INTO tb_polling_concurrency_config (task_type, max_concurrency, description) VALUES ('stop_start', 100, '停复机操作最大并发数(需要谨慎控制)'); -- ======================================== -- 3. 数据清理配置初始化 -- 一亿卡规模每天产生大量数据,需要及时清理 -- ======================================== -- 删除已有配置(如果存在) DELETE FROM tb_data_cleanup_config; -- 流量历史记录清理配置(保留较短时间) INSERT INTO tb_data_cleanup_config (table_name, retention_days, enabled, batch_size, description) VALUES ('tb_data_usage_record', 30, 1, 50000, '保留30天流量历史,每批删除5万条(一亿卡每天产生大量数据)'); -- 操作日志清理配置 INSERT INTO tb_data_cleanup_config (table_name, retention_days, enabled, batch_size, description) VALUES ('tb_account_operation_log', 90, 1, 50000, '保留90天操作日志,每批删除5万条'); -- 告警历史清理配置 INSERT INTO tb_data_cleanup_config (table_name, retention_days, enabled, batch_size, description) VALUES ('tb_polling_alert_history', 14, 1, 50000, '保留14天告警历史,每批删除5万条'); -- 手动触发日志清理配置 INSERT INTO tb_data_cleanup_config (table_name, retention_days, enabled, batch_size, description) VALUES ('tb_polling_manual_trigger_log', 30, 1, 50000, '保留30天手动触发日志,每批删除5万条'); -- 数据清理日志清理配置 INSERT INTO tb_data_cleanup_config (table_name, retention_days, enabled, batch_size, description) VALUES ('tb_data_cleanup_log', 60, 1, 10000, '保留60天数据清理日志'); -- ======================================== -- 4. 告警规则初始化(一亿卡规模) -- ======================================== -- 删除已有规则(如果存在) DELETE FROM tb_polling_alert_rule; -- 队列积压告警(阈值调高,适应大规模) INSERT INTO tb_polling_alert_rule (rule_name, task_type, metric_type, operator, threshold, alert_level, cooldown_minutes, status, notify_channels, description) VALUES ('实名检查队列积压', 'polling:realname', 'queue_size', '>', 500000, 'warning', 10, 1, 'log', '实名检查队列超过50万时告警'), ('流量检查队列积压', 'polling:carddata', 'queue_size', '>', 1000000, 'warning', 10, 1, 'log', '流量检查队列超过100万时告警'), ('实名检查队列严重积压', 'polling:realname', 'queue_size', '>', 2000000, 'critical', 5, 1, 'log', '实名检查队列超过200万时严重告警'); -- 失败率告警 INSERT INTO tb_polling_alert_rule (rule_name, task_type, metric_type, operator, threshold, alert_level, cooldown_minutes, status, notify_channels, description) VALUES ('实名检查失败率过高', 'polling:realname', 'failure_rate', '>', 20, 'warning', 10, 1, 'log', '实名检查失败率超过20%时告警'), ('流量检查失败率过高', 'polling:carddata', 'failure_rate', '>', 20, 'warning', 10, 1, 'log', '流量检查失败率超过20%时告警'); -- ======================================== -- 初始化完成 -- ======================================== -- 验证初始化结果 SELECT '轮询配置初始化完成' AS message, COUNT(*) AS count FROM tb_polling_config; SELECT '并发控制配置初始化完成' AS message, COUNT(*) AS count FROM tb_polling_concurrency_config; SELECT '数据清理配置初始化完成' AS message, COUNT(*) AS count FROM tb_data_cleanup_config; SELECT '告警规则初始化完成' AS message, COUNT(*) AS count FROM tb_polling_alert_rule; -- ======================================== -- 容量规划参考(一亿卡) -- ======================================== -- -- 检查次数估算(按上述配置): -- - 未实名卡(10%):1000万 × 12次/小时 = 1.2亿次/小时 -- - 已实名卡(30%):3000万 × 1次/天 ≈ 125万次/小时 -- - 激活卡流量(60%):6000万 × 1次/小时 = 6000万次/小时 -- - 激活卡套餐(60%):6000万 × 1次/小时 = 6000万次/小时 -- 总计:约 2.4 亿次/小时 = 6.7万次/秒 -- -- 推荐部署: -- - Worker 数量:16 个(每个处理约 4000 QPS) -- - Redis 内存:16GB+(缓存 + 队列) -- - 数据库连接池:每 Worker 50 连接 -- - Asynq 队列:critical/default/low 三个队列 -- -- 初始化时间估算: -- - 1000 万卡:约 50 秒(10万/批,500ms间隔) -- - 1 亿卡:约 500 秒 ≈ 8 分钟