Resque: срочные задания, которые выполняются последовательно для каждого пользователя.

Мое приложение создает задания resque, которые должны обрабатываться последовательно для каждого пользователя, и они должны обрабатываться как можно быстрее (максимальная задержка 1 секунда).

Пример: задание1 и задание2 создаются для пользователя1 и задание3 для пользователя2. Resque может обрабатывать job1 и job3 параллельно, но job1 и job2 должны обрабатываться последовательно.

У меня разные мысли о решении:

  • Я мог бы использовать разные очереди (например, queue_1 ... queue_10) и запускать обработчик для каждой очереди (например, rake resque:work QUEUE=queue_1) . Пользователи назначаются очереди/воркеру во время выполнения (например, при входе в систему, каждый день и т. д.)
  • Я мог бы использовать динамические «очереди пользователей» (например, queue_#{user.id}) и попытаться расширить resque, чтобы только 1 рабочий может обрабатывать очередь за раз (как указано в Resque: один работник на очередь)
  • Я мог бы поместить задания в очередь без восстановления и использовать «метазадание для каждого пользователя» с resque -lock ( https://github.com/defunkt/resque-lock), который обрабатывает эти задания.

Есть ли у вас опыт реализации одного из этих сценариев на практике? Или есть другие идеи, над которыми стоит подумать? Буду признателен за любой вклад, спасибо!

5
задан Community 23 May 2017 в 11:58
поделиться