处理分布式长时间运行任务的 pubsub 订阅者

Handling of pubsub subscribers for distributed longrunning tasks

我正在评估使用 pubsub 执行长时间的 运行 任务,例如视频转码,其中特定的转码可能需要 2-10 分钟。 pubsub 是这种任务分配的好方法吗?例如,假设我有五台服务器:

- publisher1
- publisher2
- publisher3
- publisher4
- publisher5

和一个名为 "videos" 的主题。是否可以将消息平均分布到这五台服务器上?什么时候添加或删除服务器?执行此操作的好方法是什么,或者 pubsub 不是执行此类操作的正确工具?

这听起来确实像是发布订阅的合理用例。具体来说,如果您使用拉式订阅者,您可以将流量控制设置配置为最多向您的服务器发送一条未完成的消息,并将最大确认延长期(在 java 中)配置为您处理的合理上限时间。这个 api 在这里描述 http://googleapis.github.io/google-cloud-java/google-cloud-clients/apidocs/index.html?com/google/cloud/pubsub/v1/package-summary.html

如果您对所有作业使用相同的订阅者 ID,默认情况下这应该会有效地在您的服务器之间进行负载平衡。如果添加了服务器并且存在积压,它将收到一个新条目。如果服务器被删除,它将不再发送消息。如果它在处理或崩溃时被删除,它正在处理的消息将被重新发送到另一台服务器。

然而,一个问题是 pubsub 对每条消息有 10MB 的限制。您可能会考虑将数据本身放入 google 云存储桶中。上传完成后,云存储可以将文件位置发布到 pubsub 主题。 https://cloud.google.com/storage/docs/pubsub-notifications