All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 6m35s
实现功能: - 实名状态检查轮询(可配置间隔) - 卡流量检查轮询(支持跨月流量追踪) - 套餐检查与超额自动停机 - 分布式并发控制(Redis 信号量) - 手动触发轮询(单卡/批量/条件筛选) - 数据清理配置与执行 - 告警规则与历史记录 - 实时监控统计(队列/性能/并发) 性能优化: - Redis 缓存卡信息,减少 DB 查询 - Pipeline 批量写入 Redis - 异步流量记录写入 - 渐进式初始化(10万卡/批) 压测工具(scripts/benchmark/): - Mock Gateway 模拟上游服务 - 测试卡生成器 - 配置初始化脚本 - 实时监控脚本 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
4.6 KiB
4.6 KiB
轮询系统部署文档
部署前准备
1. 环境要求
| 组件 | 最低版本 | 推荐版本 |
|---|---|---|
| PostgreSQL | 14.0 | 14+ |
| Redis | 6.0 | 6.0+ |
| Go | 1.21 | 1.21+ |
2. 配置检查
确保以下环境变量已配置:
# 数据库配置
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: 数据库迁移
# 检查迁移状态
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: 初始化配置
# 执行初始化脚本
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 条默认配置:
- 未实名卡轮询 (priority: 10)
- 行业卡轮询 (priority: 15)
- 已实名卡轮询 (priority: 20)
- 已激活卡轮询 (priority: 30)
- 默认轮询配置 (priority: 100)
步骤 3: 验证 Redis 连接
redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD ping
步骤 4: 编译应用
# 编译 API 服务
go build -o bin/api cmd/api/main.go
# 编译 Worker 服务
go build -o bin/worker cmd/worker/main.go
步骤 5: 灰度发布
阶段 1: 单节点测试
- 先在一台 Worker 上部署新版本
- 观察日志和监控指标 30 分钟
- 确认无异常后继续
# 启动单个 Worker
./bin/worker &
# 检查日志
tail -f logs/worker.log | grep -i polling
阶段 2: 滚动部署
- 逐步替换其他 Worker 节点
- 每个节点间隔 5 分钟
- 持续监控告警
步骤 6: 验证部署
# 检查调度器状态
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
配置调整
调整并发数
# 查看当前并发配置
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 表中的间隔配置。
回滚策略
快速回滚
- 停止所有 Worker
- 回滚代码版本
- 执行数据库回滚(如需)
- 重启 Worker
# 停止 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 &
数据清理
如果需要完全清理轮询系统数据:
-- 清理轮询配置
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;
# 清理 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 表。
监控建议
部署后建议配置以下监控:
- 队列长度:polling:queue:* 的 ZCARD
- 任务成功率:统计 success/total 比率
- 平均耗时:关注 P95 和 P99
- 并发使用率:current/max 比率
- 告警触发数:tb_polling_alert_history 新增数