У меня есть одна очередь заданий с несколькими рабочими, наблюдающими за этой очередью. (каждое задание соответствует одному пользователю). В очереди может быть несколько заданий на пользователя в очереди.Проектирование системы очередей заданий, где работники могут обрабатывать только одно задание на каждого пользователя
Я не хочу, чтобы мои работники обрабатывали более 1 задания на пользователя в любой момент времени. Задача пользователя должна быть выбрана работником только в том случае, если в это время другой рабочий не обрабатывает этого пользователя. В случае, если работа пользователя обрабатывается рабочим, я также хочу, чтобы следующее задание пользователя было выбрано немедленно, как только оно будет завершено.
Я хочу, чтобы мои рабочие пользователи были агностиками (т.е. любой рабочий должен иметь возможность обрабатывать любую работу пользователя). Это поможет мне масштабироваться горизонтально.
Как мне это сделать? Я хотел бы создать отдельные очереди для каждого пользователя, но тогда работникам придется наблюдать огромное количество очередей и тратить ресурсы. Я использую beanstalkd в качестве сервера очереди прямо сейчас.
Любая помощь приветствуется.