Несколько очередей против нескольких заданий в resque

Я использую resque для фонового процесса двух типов заданий:

(1) 3rd-party API requests 
(2) DB query and insert

Хотя два задания могут обрабатываться параллельно, каждый тип задания сам по себе может обрабатываться только в последовательном порядке. Например, операции с БД должны выполняться в последовательном порядке, но могут выполняться параллельно с запросами стороннего API.

Я рассматриваю любой из следующих методов для выполнения этого:

(1) Having two queues with one queue handling only API requests and the other queue 
handling only db queries. Each queue will have its own worker.

(2) One single queue but two workers. One worker for each job.

Я хотел бы знать разницу между двумя подходами и какой из двух подходов лучше выбрать.


person Ninja    schedule 10.11.2016    source источник


Ответы (1)


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

Наличие двух очередей: одна очередь обрабатывает только запросы API, а другая очередь обрабатывает только запросы БД. У каждой очереди будет свой рабочий.

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

Одна очередь, но два работника. Один рабочий на каждую работу.

Ответ: Этот подход мы также используем в нашем проекте.
Постановка всех заданий в одну очередь и запуск нескольких рабочих процессов в ней.
Ваши рабочие процессы всегда будут заняты, независимо от типа задания.
возможна надлежащая утилизация рабочих.


Наконец, я бы посоветовал вам использовать второй подход.

person ritzz.soni    schedule 18.03.2017