内容提要
Vercel现已原生支持Celery异步任务队列,任务作为Vercel函数运行并随流量自动扩展。默认结果存于运行时缓存,可配置持久后端。通过pyproject.toml声明worker,使用vercel://代理,采用Fluid计算按活跃CPU计费,自动伸缩,按需付费。
延伸解读
原生集成与自动伸缩
Vercel 将 Celery 任务作为函数运行,并利用 Fluid 计算按活跃 CPU 计费,实现自动伸缩。这意味着任务负载会根据流量动态调整,无需手动管理服务器,且只在任务执行时产生费用。对于流量波动明显的应用,这种模式能有效控制成本,但需注意,空闲时可能没有常驻进程,任务调度可能受冷启动影响。
结果存储的默认限制
默认情况下,任务结果存储在运行时缓存中,适合小数据量和短时工作流。若需要持久化存储或更长的保留时间,必须配置额外的后端。开发者应评估自身场景:若任务结果重要或需长期访问,应尽早规划持久化方案,避免因缓存失效导致数据丢失。
配置与部署要点
通过 pyproject.toml 声明 worker 订阅者,并使用 vercel:// 代理自动接入 Vercel Queues。这种配置简化了部署流程,但需注意,broker 和结果后端是分离的:broker 由 Vercel 管理,而结果后端需自行配置。此外,示例代码展示了 FastAPI 集成,但实际应用中需确保 worker 的导入路径正确,并处理好任务 ID 的传递。
Q&A
Vercel上如何原生支持Celery异步任务队列?
Vercel现已原生支持Celery,任务作为Vercel函数运行,并随流量自动扩展。
在Vercel上使用Celery时,任务结果默认存储在哪里?
默认存储在运行时缓存(Runtime Cache)中,适合小数据量和较短工作流。
如何在Vercel上配置Celery worker?
在pyproject.toml中声明worker为订阅者,例如:[[tool.vercel.subscribers]] entrypoint = "worker:app"。
Vercel上的Celery使用什么broker?
使用vercel://代理,自动安装并设置默认broker_url为vercel://,用于Vercel Queues。
Vercel上Celery的计费方式是什么?
使用Fluid计算,按活跃CPU计费,自动伸缩,按需付费。
如果默认结果存储不满足需求,如何增强持久性?
可以配置持久化结果后端,以提供更强的持久性保证、更多存储或更长保留时间。