云队列指南
云队列提供了一种在云引擎之外调度云函数的能力,它基于云引擎已有的「云函数」这个概念实现了重试、去重、结果查询、延时任务、定时任务等功能,是对云函数功能的一个补充。尚未运行的任务会以一种可靠的方式暂存在云队列,即使你的云引擎因部署、过载、崩溃而重启,任务也不会丢失,云队列会等待你的云引擎实例恢复正常后继续运行它们。
目前云队列还是一个实验性功能,可以免费使用,在正式上线后将会是一项单独计费的功能,因为云队列被设计用于应对突发流量,所以收费的指标将会与「每小时入队任务数量(对应队列的处理能力)」和「队列内剩余任务峰值(对应队列空间的占用)」相关,按实际用量计费,不需要预估容量。
云队列实际上运行在云引擎之外,它通过 HTTP 接受入队等操作,同时也通过 HTTP 来调用云引擎容器中的云函数来完成实际的任务执行,我们的 SDK 会封装这些细节。云队列的入队接口(Cloud.enqueue
)目前仅限在云引擎内使用 masterKey 权限调用(后续可能会开放客户端调用);结果查询接口(Cloud.getTaskInfo
)则允许客户端直接使用 uniqueId 调用。
功能和使用场景
云队列提供的功能包括:
- 重试 任务在执行失败后会默认进行一次重试,可以通过选项来配置重试次数(
attempts
)和重试间隔(backoff
),重试时 uniqueId 不会改变。 - 去重 可以为任务提供唯一 ID(
uniqueId
,如不提供则会随机 生成),在任务存在于队列期间(包括已完成的),云队列不会接受有 uniqued 的任务。 - 结果查询 任务在完成后会继续被保留在队列中一段时间(可通过
keepResult
配置),客户端可以使用 uniqueId 来进行高性能的结果查询。 - 延时任务 可以通过
delay
来延迟执行一个任务。 - 定时任务 现在定时任务是云队列的一个子功能,你可以在控制台上创建和管理任意数量的定时任务,可以使用 CORN 表达式 或设置间隔时间。
- 并发控制 云队列会将入队的任务暂存起来,以 1 个并发的速度逐步地执行,避免云引擎实例过载(后续我们会引入更智能的并发调节算法)。
- 优先级 可以为特定任务设置优先级(
priority
),在队列拥堵时,高优先级的任务会优先执行。
你可以在 leanengine-nodejs-demos 中找到一些有关云队列的示例:
- queue-delay-retry 延时和重试云函数
- queue-result-query 结果查询
- crawler 抓取一个站点下所有网页的爬虫(去重和控制并发)