Очереди облачных задач Google не работают параллельно - PullRequest
0 голосов
/ 05 мая 2020

У меня есть проект в облаке Google, где есть 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

Уточнение: мне не нужно, чтобы очереди запускались в определенном c порядке, но мне кажется очень странным, что похоже, что страховка запускает только одну очередь за раз, поэтому она будет запускать задачи в другой очереди только после того, как они будут выполнены с текущей очередью.

1 Ответ

2 голосов
/ 07 мая 2020

в течение какого периода времени все это происходит?

сколько времени требуется на выполнение задачи process-request по сравнению с задачей send-result

Особо выделяется то, что ваша rate для process-request намного выше вашего rate для send-result. Так что, возможно, пара задач send-result ВЫЖИМАЕТ, но затем она достигает ограничения rate и вместо этого должна запускать process-request задач.

То же примечание для bucket_size. bucket_size для process-request огромен по сравнению с rate:

Размер сегмента ограничивает скорость обработки очереди, когда в ней много задач и скорость высокая. Максимальное значение для размера корзины составляет 500. Это позволяет иметь высокую скорость, поэтому обработка начинается вскоре после постановки задачи в очередь, но все же ограничивает использование ресурсов, когда многие задачи ставятся в очередь за короткий период времени.

Если вы не укажете bucket_size для очереди, значение по умолчанию - 5. Мы рекомендуем вам установить это на большее значение, потому что размер по умолчанию может быть слишком мал для многих случаев использования: рекомендуемый размер - это скорость обработки, деленная на 5 (rate / 5).

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

Кроме того, при установке max_instances: 8 в этих очередях накапливается большое количество невыполненных работ?

Давайте попробуем две вещи:

  1. установить bucket_size и rate одинаковыми для process-request и send-result. Если это исправит, то начните возиться со значениями, чтобы получить желаемый баланс
  2. поднять max_instances: 8, чтобы увидеть, устраняет ли это узкое место
...