# 轮询系统部署文档 ## 部署前准备 ### 1. 环境要求 | 组件 | 最低版本 | 推荐版本 | |------|----------|----------| | PostgreSQL | 14.0 | 14+ | | Redis | 6.0 | 6.0+ | | Go | 1.21 | 1.21+ | ### 2. 配置检查 确保以下环境变量已配置: ```bash # 数据库配置 JUNHONG_DATABASE_HOST JUNHONG_DATABASE_PORT JUNHONG_DATABASE_USER JUNHONG_DATABASE_PASSWORD JUNHONG_DATABASE_DBNAME # Redis 配置 JUNHONG_REDIS_ADDRESS JUNHONG_REDIS_PORT JUNHONG_REDIS_PASSWORD JUNHONG_REDIS_DB ``` ## 部署步骤 ### 步骤 1: 数据库迁移 ```bash # 检查迁移状态 make migrate-status # 执行迁移 make migrate-up # 验证迁移结果 psql $DATABASE_URL -c "SELECT tablename FROM pg_tables WHERE tablename LIKE 'tb_polling%' OR tablename LIKE 'tb_data_%';" ``` 应该看到以下表: - tb_polling_config - tb_polling_concurrency_config - tb_polling_alert_rule - tb_polling_alert_history - tb_data_cleanup_config - tb_data_cleanup_log - tb_polling_manual_trigger_log - tb_data_usage_record ### 步骤 2: 初始化配置 ```bash # 执行初始化脚本 psql $DATABASE_URL -f scripts/init_polling_config.sql # 验证初始化结果 psql $DATABASE_URL -c "SELECT config_name, priority, status FROM tb_polling_config ORDER BY priority;" ``` 应该看到 5 条默认配置: 1. 未实名卡轮询 (priority: 10) 2. 行业卡轮询 (priority: 15) 3. 已实名卡轮询 (priority: 20) 4. 已激活卡轮询 (priority: 30) 5. 默认轮询配置 (priority: 100) ### 步骤 3: 验证 Redis 连接 ```bash redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD ping ``` ### 步骤 4: 编译应用 ```bash # 编译 API 服务 go build -o bin/api cmd/api/main.go # 编译 Worker 服务 go build -o bin/worker cmd/worker/main.go ``` ### 步骤 5: 灰度发布 **阶段 1: 单节点测试** 1. 先在一台 Worker 上部署新版本 2. 观察日志和监控指标 30 分钟 3. 确认无异常后继续 ```bash # 启动单个 Worker ./bin/worker & # 检查日志 tail -f logs/worker.log | grep -i polling ``` **阶段 2: 滚动部署** 1. 逐步替换其他 Worker 节点 2. 每个节点间隔 5 分钟 3. 持续监控告警 ### 步骤 6: 验证部署 ```bash # 检查调度器状态 curl http://localhost:3000/api/admin/polling-stats/init-progress # 检查队列状态 curl http://localhost:3000/api/admin/polling-stats/queues # 检查配置列表 curl http://localhost:3000/api/admin/polling-configs ``` ## 配置调整 ### 调整并发数 ```bash # 查看当前并发配置 curl http://localhost:3000/api/admin/polling-concurrency # 调整实名检查并发数为 80 curl -X PUT http://localhost:3000/api/admin/polling-concurrency/realname \ -H "Content-Type: application/json" \ -d '{"max_concurrency": 80}' ``` ### 调整轮询间隔 通过管理后台或 API 修改 tb_polling_config 表中的间隔配置。 ## 回滚策略 ### 快速回滚 1. 停止所有 Worker 2. 回滚代码版本 3. 执行数据库回滚(如需) 4. 重启 Worker ```bash # 停止 Worker pkill -f "bin/worker" # 数据库回滚(如需) make migrate-down STEP=9 # 清理 Redis 轮询相关数据 redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD --scan --pattern "polling:*" | xargs redis-cli DEL # 重新部署旧版本 ./bin/worker-old & ``` ### 数据清理 如果需要完全清理轮询系统数据: ```sql -- 清理轮询配置 TRUNCATE TABLE tb_polling_config CASCADE; TRUNCATE TABLE tb_polling_concurrency_config CASCADE; TRUNCATE TABLE tb_polling_alert_rule CASCADE; TRUNCATE TABLE tb_polling_alert_history CASCADE; TRUNCATE TABLE tb_data_cleanup_config CASCADE; TRUNCATE TABLE tb_data_cleanup_log CASCADE; TRUNCATE TABLE tb_polling_manual_trigger_log CASCADE; TRUNCATE TABLE tb_data_usage_record CASCADE; ``` ```bash # 清理 Redis redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD KEYS "polling:*" | xargs redis-cli DEL ``` ## 常见问题 ### Q1: Worker 启动缓慢 A: 检查数据库和 Redis 连接。正常情况下 Worker 应在 10 秒内完成启动。 ### Q2: 队列积压严重 A: 增加并发数,或检查是否有 Gateway 接口响应慢的问题。 ### Q3: 任务重复执行 A: 检查 Redis 连接稳定性,确保分布式锁正常工作。 ### Q4: 迁移失败 A: 检查迁移日志,确认数据库权限。可能需要手动修复 schema_migrations 表。 ## 监控建议 部署后建议配置以下监控: 1. **队列长度**:polling:queue:* 的 ZCARD 2. **任务成功率**:统计 success/total 比率 3. **平均耗时**:关注 P95 和 P99 4. **并发使用率**:current/max 比率 5. **告警触发数**:tb_polling_alert_history 新增数