0

我在谷歌云中有一个项目,其中有 2 个任务队列:process-request接收请求并处理它们,send-result将处理请求的结果发送到另一台服务器。它们都在一个名为的实例上运行remote-processing

我的问题是我看到任务正在排队,send-result但它们仅在process-request队列为空并处理完所有请求后才执行。这是实例配置:

instance_class: B4

basic_scaling:
  max_instances: 8

这是队列配置:

- name: send-result
  max_concurrent_requests: 20
  rate: 1/s
  retry_parameters:
    task_retry_limit: 10
    min_backoff_seconds: 5
    max_backoff_seconds: 20
  target: remote-processing

- name: process-request
  bucket_size: 50
  max_concurrent_requests: 10
  rate: 10/s
  target: remote-processing

澄清:我不需要队列以特定顺序运行,但我觉得很奇怪,看起来保险一次只运行一个队列,所以它只会在完成后运行另一个队列中的任务与当前队列。

4

1 回答 1

2

这一切发生在多长时间内?

任务运行与任务process-request需要多长时间send-result

突出的一件事是你的rateforprocess-request比你的ratefor高得多send-result。因此,也许有几个send-result任务正在被挤掉,但它随后达到了rate上限,不得不运行process-request任务。

相同的注释bucket_size。与它相比,for 是巨大bucket_size的:process-requestrate

当队列中有许多任务并且速率很高时,桶大小限制了队列的处理速度。存储桶大小的最大值为 500。这允许您拥有较高的速率,以便在任务入队后立即开始处理,但在短时间内有许多任务入队时仍会限制资源使用。

如果您不为队列指定 bucket_size,则默认值为 5。我们建议您将其设置为较大的值,因为默认大小对于许多用例而言可能太小:推荐大小为处理速率除以 5 (率/5)。

https://cloud.google.com/appengine/docs/standard/python/config/queueref

此外,通过设置max_instances: 8是否会在这些队列中积压大量工作?

让我们尝试两件事:

  1. bucket_size和设置为和rate相同。如果修复它,然后开始摆弄这些值以获得所需的平衡process-requestsend-result
  2. 向上max_instances: 8看看是否消除了该瓶颈可以解决它
于 2020-05-07T16:42:55.280 回答