Cloud Tasks 和 Pub/Sub 都可以用于 实现消息传送和异步集成。不过,尽管这两种服务以 类似的方式运行,但并不完全相同。本指南可帮助您为自己的应用场景选择合适的产品。
主要区别
Pub/Sub 和 Cloud Tasks 的主要区别在于它们是使用 隐式 调用还是 显式 调用。
Pub/Sub 可将事件发布方与事件订阅方分离开来。 发布方无需了解订阅方的任何信息。因此,Pub/Sub 除了能保证传送消息之外,还使发布方无法控制消息的传送。这支持隐式 调用:发布方只需发布事件即可触发订阅方执行。
相比之下,Cloud Tasks 的目标是显式 调用。发布方保留对执行的完全控制权。特别是,发布方可指定要将每条消息传送到哪个端点。
此外,Cloud Tasks 还提供 Pub/Sub 发布方无法使用的队列和任务管理工具,包括:
- 具体传送时间安排
- 传送速率控制
- 精确的可配置重试
- 访问和管理队列中的各个任务
- 创建任务时避免重复
详细的功能比较
| 功能 | Cloud Tasks | Pub/Sub |
|---|---|---|
| 使用 Webhook 推送 | 是 | 是 |
| 保证至少传送一次 | 是 | 是 |
| 可配置的重试 | 是 | 是 |
| 创建任务/消息时避免重复 | 是 | 否 |
| 按计划传送 | 是 | 否 |
| 按顺序传送 | 否,系统会尽力保留排队任务的顺序 | 是,使用排序键 |
| 明确的速率控制 | 是 | 拉取订阅方客户端可以实现 流控制 |
| 使用 API 拉取 | 否 | 是 |
| 批量插入 | 是 | 是 |
| 每条消息有多个处理者/订阅者 | 否 | 是 |
| 任务/消息保留时间 | 31 天 | 最长 31 天 |
| 任务/消息的最大大小 | 1MB | 10MB |
| 最高传送速率 | 500 QPS/队列 | 无上限,受区域吞吐量配额的限制 |
| 地理位置 | 单区域 | 全球 |
| 推送处理者/订阅者处理时长上限 | 30 分钟 (HTTP) 10 分钟(App Engine 标准环境 - 自动扩缩) 24 小时(App Engine 标准环境 - 手动或基本扩缩) 60 分钟(App Engine 柔性环境) |
对于推送操作为 10 分钟 |
| 队列/订阅数量 | 每个区域中每个项目 1,000 个,该配额可申请增加 | 每个项目 10,000 个 |
可配置的重试差异
Cloud Tasks 可精确控制任务重试,包括对尝试次数和时长的严格限制。Pub/Sub 侧重于可靠传送,使用指数退避算法和死信队列 (DLQ) 来管理未确认消息的重试。
| 功能 | Cloud Tasks | Pub/Sub |
|---|---|---|
| 应用场景重点 | 确保最终执行特定任务 | 确保将消息传送到分离的订阅方 |
| 主要控制 | 队列级和任务级重试配置 | 订阅级重试政策和 DLQ |
| 停止重试 | 尝试次数上限、重试时长上限 | 消息确认、消息过期或 DLQ 传送 |
| 尝试次数上限 | 可显式配置 | 通过 DLQ 传送尝试次数上限间接配置 |
| 退避算法微调 | 最短/最长退避时间、加倍次数上限 | 指数退避算法政策的最短/最长退避时间 |
| 无限重试 | 如果已配置,则可以,但受任务保留时间上限的限制 | 未确认消息的默认设置,直到过期,可通过 DLQ 缓解 |