后台任务和定时任务
“Vibe coding”课程第 17 课,共 26 课。免费,有动画和小测验。
用户不用干等
本课例子:你在运营学校媒体的网站,带邮件订阅。有些活很慢:给一千个订阅者发邮件、压缩视频、生成报告。如果用户点完按钮就得等着,他会盯着转圈好几分钟。解决办法:后台任务。服务器马上回复“已收到”,活稍后再干。任务排成队列,就像图里的卡片,由 worker(执行任务的程序)一个个处理。
Cron:定闹钟干活
Cron 就是按时间表运行任务,像闹钟一样。图里的“每天 9:00”:服务器到点自己醒来,发出提醒“今天交稿”。时间表用一串短代码写,比如 0 9 * * *:第 0 分钟、第 9 点,星号表示“任何日期、任何月份、星期几都行”。陷阱:时间常按 UTC(世界标准时间)算,而不是你本地时间。去文档里确认。
在哪里跑
Cloudflare:Cron Triggers 按时间表运行 Worker。Vercel:Cron Jobs 到点调用你的 API 地址。GitHub Actions(GitHub 里的自动化)能按时间表跑脚本,但不保证准到分钟。Inngest:专做多步骤流程的服务,比如“注册后,三天后提醒”。项目已经放在哪,就用哪家的。额度看服务官网。
失败了?重试
任务可能失败:邮件服务挂了一分钟,网络闪断了一下。好的系统不会放弃,而是隔一会儿重试(retry),就是图里那个“重试”箭头。在 Inngest 里每一步都会自动重试,已完成的步骤不会重跑。让智能体“加上带间隔的重试,如果一直失败就写进日志”。日志就是服务器记录发生了什么的流水账。
绝不扣两次钱
如果那一步其实已经成功,重试就很危险。例子:订阅费已经扣了,但回复在路上丢了。盲目重试会再扣一次。你需要幂等性:同一步做多少次,结果都和做一次一样。做法:每个操作有唯一编号,服务器先查“这个做过了吗?”。图里的 webhook 也可能来两次,规则一样。
自测一下
- 为什么群发一千封邮件要做成后台任务?
正确答案: 这样用户不用等全部发完. 服务器马上回复“已收到”,邮件之后从队列里发出。干活的仍然是服务器。 - Cron 是什么?
正确答案: 按时间表运行任务. Cron 像闹钟:“每天 9:00”。出错后再来叫 retry,记录事件的叫日志(log)。 - 支付步骤的幂等性是什么意思?
正确答案: 重复这一步也不会再扣一次钱. 出错在所难免。幂等意味着重试是安全的:服务器看到操作编号,就不会做第二次。
← API:接入别人的服务 应用安全 →