Skip to content

扩展到 500+ 项目配置指南

概述

本文档说明如何配置 Worker 以支持 500+ 个项目的每日完整同步。

配置参数

Cron 频率

[triggers]
crons = ["0 */2 * * *"]  # 每 2 小时整点运行一次

批处理大小

const MAX_PROJECTS_PER_RUN = 50;  // 每次处理 50 个项目

性能计算

时间规划

参数
项目总数 500
每次处理数量 50
需要运行次数 500 ÷ 50 = 10 次
Cron 频率 每 2 小时
完成一轮时间 10 次 × 2 小时 = 20 小时
每天运行次数 12 次
每天处理容量 12 × 50 = 600 个项目

执行时间估算

每个项目的处理时间:

  • GitHub API 调用:~1-2 秒
  • 数据库写入:~0.1 秒
  • 总计:~1.5-2.5 秒/项目

50 个项目的总执行时间:

  • 预期时间:50 × 2 秒 = 100 秒(理想情况)
  • 实际并发处理:约 20-25 秒(因为代码使用 Promise.all 等优化)
  • Cloudflare 限制:30 秒
  • 结论:在安全范围内 ✅

GitHub API Rate Limit

限制说明

  • 认证请求:5000 次/小时
  • 每个项目:~5-10 个 API 调用(stars, forks, commits, contributors 等)
  • 50 个项目:~250-500 个 API 调用
  • 每 2 小时运行一次:远低于 5000 次/小时限制 ✅

监控建议

定期检查 API 使用情况:

curl -H "Authorization: token YOUR_GITHUB_TOKEN" \
  https://api.github.com/rate_limit

返回示例:

{
  "resources": {
    "core": {
      "limit": 5000,
      "remaining": 4750,
      "reset": 1728000000
    }
  }
}

部署步骤

1. 更新代码

确保以下文件已更新:

  • wrangler.toml:cron = "0 */2 * * *"
  • src/worker.ts:MAX_PROJECTS_PER_RUN = 50

2. 部署到 Cloudflare

cd tools/ai-oss-rank-worker
wrangler deploy

3. 重置游标(可选)

如果想立即开始新的同步周期:

wrangler d1 execute ai-oss-rank --command \
  "UPDATE sync_state SET value = '0' WHERE key = 'full-sync'"

4. 验证部署

检查 Cloudflare Dashboard:

  1. 进入 Workers & Pages
  2. 选择 ai-oss-rank-worker
  3. 进入 Triggers 标签
  4. 确认 cron 显示:0 */2 * * *

监控和日志

实时日志

wrangler tail

预期输出:

[CRON] Starting incremental sync at cursor 0/500
[CRON] Processed 50 projects (50 success, 0 failures)
[CRON] Next cursor: 50

查看同步状态

wrangler d1 execute ai-oss-rank --command \
  "SELECT key, value, updated_at FROM sync_state WHERE key = 'full-sync'"

输出示例:

┌───────────┬───────┬─────────────────────────┐
│ key       │ value │ updated_at              │
├───────────┼───────┼─────────────────────────┤
│ full-sync │ 150   │ 2025-10-07T06:00:51.123Z│
└───────────┴───────┴─────────────────────────┘

计算进度

# 当前进度百分比
echo "scale=2; (cursor / 500) * 100" | bc

故障排查

问题:Cron 未运行

检查项

  1. Cron 是否启用?

在 Cloudflare Dashboard 的 Triggers 页面检查

  1. Worker 是否部署成功?
wrangler deployments list
  1. 查看错误日志:
wrangler tail --status error

问题:处理速度慢

可能原因

  1. GitHub API 限流:检查 rate limit
  2. 数据库写入慢:检查 D1 性能
  3. 网络延迟:GitHub API 响应慢

解决方案

  • 减少 MAX_PROJECTS_PER_RUN 到 30-40
  • 增加 cron 频率到每小时一次(需要调整批大小)

问题:某些项目失败

查看失败日志:

wrangler tail | grep "failures"

常见失败原因:

  • 404 错误:仓库不存在或已删除
  • 403 错误:私有仓库或无权限
  • Rate limit:API 调用过多

性能优化建议

当前配置(推荐)

  • Cron0 */2 * * *(每 2 小时)
  • 批大小:50 个项目
  • 完成时间:20 小时

激进配置(更快同步)

如果需要更频繁的更新:

crons = ["0 * * * *"]  # 每小时运行
const MAX_PROJECTS_PER_RUN = 50;

结果:

  • 每天 24 次运行
  • 24 × 50 = 1200 个项目/天
  • 500 个项目在 10 小时内完成

权衡

  • ✅ 更快的同步速度
  • ❌ 更高的 API 使用率
  • ❌ 更多的 Worker 调用(可能增加成本)

保守配置(减少资源消耗)

如果遇到 rate limit 问题:

crons = ["0 */3 * * *"]  # 每 3 小时运行
const MAX_PROJECTS_PER_RUN = 70;

结果:

  • 每天 8 次运行
  • 8 × 70 = 560 个项目/天
  • 500 个项目在 21 小时内完成

成本估算

Cloudflare Workers

  • 免费额度:100,000 次请求/天
  • 当前使用:12 次/天(cron)+ API 调用
  • 结论:完全在免费额度内 ✅

Cloudflare D1

  • 免费额度:5GB 存储,500 万次读取/天
  • 当前使用:~1000 次写入/天,~500 行数据
  • 结论:完全在免费额度内 ✅

GitHub API

  • 免费额度:5000 次请求/小时
  • 当前使用:~250-500 次/2 小时 = ~125-250 次/小时
  • 结论:远低于限制 ✅

总结

配置优化后:

500 个项目在 20 小时内完成同步
每天至少同步一次所有项目
在 Cloudflare 和 GitHub 限制内
无需额外成本

下一步:部署并监控第一个完整周期!