【问题标题】:Does task queue truly run tasks in parallel?任务队列真的并行运行任务吗?
【发布时间】:2016-08-28 23:24:29
【问题描述】:

我们有一个应用程序从用户那里获取一些输入并进行大约 50 次 RPC 调用。每次通话大约需要 4-5 分钟。

在后端,我们使用推送队列并将这 50 个调用中的每一个都作为任务排入队列。这是我们的队列规范:

queue:
- name: some-name
  rate: 500/s
  bucket_size: 100
  max_concurrent_requests: 500

我的理解是所有 50 个请求都应该并行运行,因此它们应该在 4-5 分钟内完成。但实际发生的情况是,这些请求中只有大约 15 个正在返回结果,而其余请求则超过了 10 分钟的限制并超时。另一件需要注意的事情是,如果我们将请求数减少到

总是有可能请求超时,因为 RPC 响应实际上花了那么长时间。但我想确认的是:

  1. 我对并行运行的任务的理解是正确的。
  2. 我们的队列配置和我们排队的任务数量与这些请求超时无关。 这些正确吗?

【问题讨论】:

  • 这取决于为该队列服务的模块的 .yaml 配置。 threadsafe 和缩放配置是什么?换句话说:一个实例可以并行执行多少个任务,并行运行多少个实例?
  • @DanCornilescu 我们将线程安全设置为 true,但我们没有明确指定任何缩放配置。我认为这会导致基本扩展,并且从文档看来基本扩展还可以在需要时提供按需实例。
  • 自动缩放是默认的。但是启动实例可能需要一段时间,您的队列配置需要能够缓冲任务,直到实例开始服务。检查是否在任务高峰发生时根据需要启动了额外的实例,并检查在任务高峰发生时实例已经在运行时是否仍然存在问题。
  • @DanCornilescu 实例确实启动了,但可能没有我们希望的那么快。您认为我们应该进行手动扩展并始终运行 10-15 个实例吗?
  • 除非你有 100 个空闲实例,否则我会大幅减少 bucket_size,以便让应用引擎有机会启动实例。现在的配置方式是您尝试在单个(或少数)实例上运行 100 个任务,但大多数任务都失败了,因为现有实例无法处理负载。一旦一些任务通过测量延迟拉动,将导致应用引擎启动更多实例。您应该尝试减少影响少数实例的并行任务的数量。注意应用引擎的扩展方式,您可以并行执行更多操作。

标签: google-app-engine scalability task-queue


【解决方案1】:

(1) 并行执行

是的,任务可以并行执行(在您的情况下最多 500 个),但在推送队列中,您的应用无法控制推送队列中的任务执行的特定顺序,并且无法直接控制一次执行多少个任务。 (您的应用可以控制将任务添加到队列中的顺序,请参见下面 (2) 中的模式)

App Engine 使用某些因素来决定执行的速度和任务,尤其是队列配置和扩展配置(例如在app.yaml 中)。由于您为实例的前 15 分钟付费,因此真正启动 50 个实例然后在关闭它们之前空闲 15 分钟(直到下一个请求)可能会变得非常昂贵。在这方面,产生新实例的机制更聪明一点,无论是用户的 HTTP 请求还是任务队列。

(2) 请求超时

是的,入队不太可能与这些请求超时有关。除非超时是错误假设之前执行特定任务的无意副作用。

为了避免请求超时,将一个任务拆分为多个任务是有意义的。例如,如果您有一个任务 do_foo 并且这些执行经常超过超时(或内存限制),您可以改为让 do_foo 将工作负载到将执行实际工作的其他任务。

对于某些迁移任务,我以线性/顺序方式使用此模式。例如。 classmethod do_foo 只查询某种类型的实体(例如按创建时间戳排序),可能按页面过滤(例如,与祖先的交易中的 50 个)。它首先对实体进行一些写入,并且仅在成功提交后的最后才创建一个带有光标参数的新事务性do_foo 任务到下一页,最终倒计时 1 秒以避免事务错误。 do_foo 的下一次执行将继续下一页(当然只有在上一页的任务完成之后)。

根据任务的性质,您也可以让每个任务在每次执行时分散到多个任务中,例如do_foo 触发 do_bardo_somethingdo_more。另请注意,在一个事务中最多可以创建五个事务。

【讨论】:

    猜你喜欢
    • 2011-07-28
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 2013-09-18
    • 1970-01-01
    相关资源
    最近更新 更多