2015-02-07 8 views
2

Я создаю бэкэнд веб-сайта, в котором клиент отправляет запрос на выполнение дорогостоящей (по времени) операции. Дорогая операция также включает сбор некоторого набора информации для его завершения.Push Data to Queue vs Pull Data by Workers

Работа, которую клиент представляет, может быть полностью описана в uuid. Я надеюсь использовать сервис-ориентированную архитектуру (SOA) (т. Е. Несколько микросервисов).

Клиент связывается с бэкэнд, используя связь RESTful через HTTP. Я планирую использовать очередь, чтобы работники, выполняющие дорогостоящую операцию, могли опросить работу. Очередь имеет постоянство и предлагает достойную семантику надежности.

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

Вот схемы два архитектур рассматриваемый:

Нажмите на основе (т.е. сбор данных вверх по течению): Push-based (i.e. gather data upstream)

Выдвижной основе (т.е. работник собирает данные): Pull-based (i.e. worker gathers the data)

Некоторые вещи, о которых я думал:

  1. В случае с push-основанием я, вероятно, блокируюсь, пока я собрал необходимые данные, чтобы HTTP-запрос клиента не отвечал до тех пор, пока данные не будут собраны, а затем в очереди. С точки зрения пользовательского интерфейса запрос будет ожидаться до тех пор, пока ответ не вернется.
  2. В сценарии, основанном на тяге, только работник должен знать, какие данные необходимы для работы. Это означает, что я могу иметь несколько типов клиентов, разговаривающих с различными бэкэндами. Если данные нуждаются в изменении, я обновляю только работников, а не каждую из вышеперечисленных служб.

Что-нибудь еще, что мне не хватает здесь?

ответ

0

Я думаю, вы уже в значительной степени объяснили, что второй (на основе тяги) подход лучше.

  1. Если запрос пользователя в любом случае обрабатывается асинхронно, зачем ждать сбора данных и затем возвращать ответ. Вам нужно просто поставить в очередь рабочий элемент и вернуть HTTP-ответ.
  2. Передача данных через очередь не является хорошим вариантом. Если вы получите данные вверх по течению, вам придется передать их каким-то образом, кроме как через очередь для рабочего (обычно это BLOB-хранилище). Это дополнительная работа, которая на самом деле не нужна в вашем случае.
+0

Я думаю, мой вопрос в том, есть ли какие-либо преимущества для подхода на основе push? –

+0

Основываясь на высокоуровневом описании вашего дела, я не уверен, что я действительно вижу какие-либо преимущества для подхода, основанного на толчке. –

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^