Не дублируйте задачи для нескольких работников - PullRequest
0 голосов
/ 09 марта 2020

Позвольте T быть набором Задач, W будет набором Рабочих, работающих над T.
Я полагаю, чтобы получить случайный t из T и перейти к любому w от W.

Как только w будет сделано с t, я отмечу t завершенной (представьте sql запись с isCompleted логическим значением).
Каждый t только должен быть сделано только w.

Исходная логика c проста:

When w requests for t:
    get random t from T where t.isCompleted is False.
When w submits t:
    mark t.isCompleted to True.

Однако после попытки одного цикла несколько t имеют очень странные свойства.
Причина, как T становится меньше, другой w имеет более высокий шанс получить тот же t до его завершения.

w1 gets t1.
w2 gets t1 before w1 submits.
w1 submits.
w2 submits.

Теперь есть 2 записи t1' (ответы представлены как w1 и w2).
Есть ли обходной путь для этой проблемы?

Учитывая У меня есть 3-х уровневая архитектура (клиент, серверная часть, БД).
Как лучше поддерживать состояние для обеспечения этой согласованности.
Или любые другие предложения.
Некоторые идеи:

  • Таблица «очереди» в БД
  • «Очередь» в бэкэнде, обнаружены некоторые проблемы с масштабированием
  • Маркер истечения срока действия на стороне клиента.
...