我正在评估使用pubsub执行长时间运行的任务,例如视频转码,其中一个特定的转码可能需要2-10分钟。pubsub是这样一个任务分配的好方法吗?例如,假设我有五台服务器:
- publisher1
- publisher2
- publisher3
- publisher4
- publisher5
还有一个叫做“视频”的话题。是否有可能在这五台服务器上平均分布消息?服务器何时添加或删除呢?有什么好的方法可以做到这一点,或者pubsub不是这样做的合适工具?
最佳答案
这听起来确实是pubsub的合理用例。具体来说,如果使用拉订阅服务器,可以将流控制设置配置为至多有一条消息到服务器,并将MAX ACK扩展周期(Java)配置为处理时间的合理上限。此api在这里描述http://googleapis.github.io/google-cloud-java/google-cloud-clients/apidocs/index.html?com/google/cloud/pubsub/v1/package-summary.html
默认情况下,如果对所有作业使用相同的订阅服务器ID,则这将有效地实现服务器间的负载平衡。如果添加了服务器并且存在backlog,它将收到一个新条目。如果服务器被删除,它将不再被发送消息。如果它在处理时被删除或崩溃,它正在处理的消息将重新发送到另一个服务器。
不过,有一个问题是pubsub对每条消息的限制是10MB。您可以考虑将数据本身放入google云存储桶中。云存储可以在上传完成后将文件位置发布到pubsub主题。https://cloud.google.com/storage/docs/pubsub-notifications
关于redis - 处理pubsub订阅者以分发长时间运行任务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53311804/