我正在评估将pubsub用于长时间运行的任务(例如视频转码)的使用,其中特定的转码可能需要2到10分钟的时间。 pubsub是这种任务分配的好方法吗?例如,假设我有五个服务器:
- publisher1
- publisher2
- publisher3
- publisher4
- publisher5
还有一个名为“视频”的主题。是否有可能在这五台服务器之间平均分配消息?何时添加或删除服务器呢?什么是这样做的好方法,或者pubsub不是执行此类操作的正确工具?
答案 0 :(得分:2)
这听起来像是pubsub的合理用例。具体来说,如果您使用请求订阅者,则可以配置流控制设置,以至多向您的服务器发送一条未处理的消息,并将max ack扩展周期(以Java为单位)配置为合理的处理时间上限。 http://googleapis.github.io/google-cloud-java/google-cloud-clients/apidocs/index.html?com/google/cloud/pubsub/v1/package-summary.html
中对此API进行了说明如果您对所有作业使用相同的订户ID,则默认情况下,这应该在整个服务器上有效地实现负载平衡。如果添加了服务器并且存在积压,它将收到一个新条目。如果服务器被删除,将不再发送消息。如果在处理或崩溃时将其删除,则正在处理的消息将重新发送到另一台服务器。
但是,一个忧虑是pubsub的每条消息限制为10MB。您可能会考虑将数据本身放入Google云存储桶中。上传完成后,云存储可以将文件位置发布到pubsub主题。 https://cloud.google.com/storage/docs/pubsub-notifications