【问题标题】:Bulk Enqueue Google Cloud Tasks批量排队 Google Cloud 任务
【发布时间】:2019-11-21 22:39:21
【问题描述】:

作为将我的 Google App Engine 标准项目从 python2 迁移到 python3 的一部分,我似乎还需要从使用 Taskqueue API 和库切换到 google-cloud-tasks。

在任务队列库中,我可以像这样一次将多达 100 个任务排入队列

taskqueue.Queue('default').add([...task objects...])

以及异步排队任务。

在新库和新 API 中,您似乎一次只能将一个任务排入队列

我有一个端点,它接收包含数千个元素的批次,每个元素都需要在单独的任务中处理。我该怎么办?

【问题讨论】:

    标签: google-app-engine google-cloud-platform google-cloud-tasks


    【解决方案1】:

    根据官方文档(reference 1reference 2),异步添加任务到队列的功能(正如this 帖子建议向队列添加大量任务),NOT 通过 Cloud Tasks API 提供的可用功能。不过,它适用于users of App Engine SDK

    但是,文档中有一个reference 是关于通过双注入模式解决方法将大量云任务添加到队列中(this post 可能看起来也很有用)。

    要实现此场景,您需要创建一个新的注入器队列,其单个任务将包含添加您正在使用的原始队列的多个 (100) 任务的信息。在这个注入器队列的接收端将是一个服务,它将预期的任务实际添加到您的原始队列中。尽管此服务中的任务添加将是同步的和一对一的,但它会为您的主应用程序提供一个异步接口来批量添加任务。通过这种方式,您可以克服在主应用程序中同步、一对一任务添加的限制。

    • 请注意,将任务添加到队列的500/50/5 模式是一种建议方法,以避免任何(队列/目标)过载。

    由于我没有找到此实现的任何示例,因此我将在找到答案后立即编辑答案。

    由于您处于迁移过程中,我发现this link 会很有用,因为它涉及从任务队列迁移到云任务(正如您所说的那样)。

    有关迁移代码的其他信息以及您可以找到的所有可用详细信息 herehere,关于将队列拉入 Cloud Pub/Sub 迁移并将队列相应地推送到 Cloud Tasks 迁移。

    【讨论】:

    • 感谢您的回答 - 但这感觉就像是能够运行“AddMulti”并忘记它的严重降级。认为这是升级到兼容 Go 1.12 的包时感觉像是降级的第三个 appengine 包替换。
    【解决方案2】:

    为了重新创建批量拉取机制,您必须切换到 Pub/Sub。 Cloud Tasks 没有拉取队列。使用 Pub/Sub,您可以发送 batch pushbatch pull 消息。

    如果您使用的是推送队列架构,我建议将这些元素作为任务 payload 传递;但是最大任务大小限制为100kb

    【讨论】:

    • “我建议将这些元素作为任务负载传递”所以将所有元素传递到一个任务中?然后什么?我试图让它们全部并行处理。他们需要在某个时候分成单独的任务,对吗? (顺便我在做批量推送)
    • 那可能不适合你。我不确定我是否了解您的用例。
    • 每个元素都是我需要与系统中的用户匹配的事务。一旦匹配,我可能需要向用户收费,这涉及对 Braintree 进行 HTTP 调用。无论用例如何,在单个任务中并行处理每个元素应该比单个任务串行处理它们更有效。其次,如果任务挂起并重新运行,则更容易使单个任务具有幂等性;使用单个任务串行处理它们,如果它崩溃并重新运行,我需要有一个机制来确定它上次停止的位置。
    • 您对重试逻辑是正确的。您的任务处理在哪里进行?如果您正确设置队列并将每个事务添加到任务中,您的处理器应该能够处理尽可能多的任务(接近并行)。还是您的任务需要共享信息?
    • 这发生在 App Engine 标准 Python2(最终成为 Python3)上。 “将每个事务添加到任务中,您的处理器应该能够处理尽可能多的任务” 对,一旦任务入队,我相信它会没事的。我担心的是能够将每个事务排队/添加到任务中。听起来唯一的方法是循环遍历这批元素并同步地将它们排入队列。
    猜你喜欢
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 2016-10-19
    • 1970-01-01
    相关资源
    最近更新 更多