0

Я написал диспетчер очереди, основанный на pheanstalk (beanstalkd), и я должен решить, какие действия будут проходить через эту систему. Менеджер очереди может отправлять и считывать из трех разных приоритетных трубок: быстрый, средний, медленный.Система очередей для мгновенных действий обратной связи (отдельные действия)

Отличие в приоритете - время выполнения. Действия в быстрой очереди будут иметь большинство рабочих процессов и должны выполняться почти мгновенно после добавления в очередь. Средство будет иметь меньше рабочих и медленнее.

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

Метод начальная не очередь проста:

  • Нажмите, чтобы сделать действие, Ajax и ждать ответа, визуальное представление об успехе.

Путь с очередью будет:

  • Ajax действие, отправить в очередь, обновить визуальное представление и надеюсь, что система очереди завершения выполнения действия, прежде чем обновлять данные

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

Каковы некоторые общие решения/шаблоны для этой проблемы? Я бы предпочел запустить все через очередь.

ответ

0

С Beanstalkd это довольно тривиально - у него есть приоритеты. Чем ближе к 0, тем выше приоритет.

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

Большинство рабочих могли смотреть все трубки, и в любом случае они всегда получат самые важные задания. Небольшое подмножество только наблюдает за трубой fast, поэтому всегда найдутся рабочие для самых важных. Если не хватает «быстрых» заданий, вместо этого они получат среднюю или медленную работу.

Я бы хотел установить приоритет для заданий, которые будут помещены в быструю очередь, например, 500, средняя: 1000 и медленная на 5000. Мне нравится оставлять большие пробелы, чтобы знать, что что-то еще может сложить при необходимости.