Я создаю бэкэнд веб-сайта, в котором клиент отправляет запрос на выполнение дорогостоящей (по времени) операции. Дорогая операция также включает сбор некоторого набора информации для его завершения.Push Data to Queue vs Pull Data by Workers
Работа, которую клиент представляет, может быть полностью описана в uuid
. Я надеюсь использовать сервис-ориентированную архитектуру (SOA) (т. Е. Несколько микросервисов).
Клиент связывается с бэкэнд, используя связь RESTful через HTTP. Я планирую использовать очередь, чтобы работники, выполняющие дорогостоящую операцию, могли опросить работу. Очередь имеет постоянство и предлагает достойную семантику надежности.
Одно из вопросов заключается в том, собираю ли я все данные, необходимые для дорогостоящей операции вверх по течению, а затем вставлять в очередь все эти данные или я просто вставляю в очередь uuid
и позволяю работнику извлекать данные.
Вот схемы два архитектур рассматриваемый:
Нажмите на основе (т.е. сбор данных вверх по течению):
Выдвижной основе (т.е. работник собирает данные):
Некоторые вещи, о которых я думал:
- В случае с push-основанием я, вероятно, блокируюсь, пока я собрал необходимые данные, чтобы HTTP-запрос клиента не отвечал до тех пор, пока данные не будут собраны, а затем в очереди. С точки зрения пользовательского интерфейса запрос будет ожидаться до тех пор, пока ответ не вернется.
- В сценарии, основанном на тяге, только работник должен знать, какие данные необходимы для работы. Это означает, что я могу иметь несколько типов клиентов, разговаривающих с различными бэкэндами. Если данные нуждаются в изменении, я обновляю только работников, а не каждую из вышеперечисленных служб.
Что-нибудь еще, что мне не хватает здесь?
Я думаю, мой вопрос в том, есть ли какие-либо преимущества для подхода на основе push? –
Основываясь на высокоуровневом описании вашего дела, я не уверен, что я действительно вижу какие-либо преимущества для подхода, основанного на толчке. –