2016-09-16 4 views
0

Как подойти к проблеме при наличии заданий, помещенных в очередь (pub-sub) распределенных систем, и у них есть зависимость между ними.Работа в очереди (pub-sub) распределенных систем с зависимостями?

Для примера. текущее состояние очереди:

j3 -> j2 -> j1 
rear  front 

j3 зависит от завершения j1.

Процессор очереди потребляет эти задания и начал обрабатывать его в распределенной среде.

На основании некоторого механизма разрешения зависимостей была обнаружена зависимость между j1 и j3.

Теперь, что я не знаю, лучший способ справиться с ситуацией:

  • я должен положить j3 обратно в очередь, и снова поднять его на поздней стадии, так что j1 к тому времени?
  • Должен ли я иметь какой-то другой механизм - базу данных, чтобы проверить, все ли отношения выполнены, а затем обрабатываются j3?

Любая помощь будет оценена по достоинству.

Спасибо!

ответ

0

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

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

В любом случае вам нужно будет знать, поставлена ​​ли задача в очередь/запущена/закончена. Вы можете хранить эту информацию в своей любимой базе данных или использовать какой-то протокол сплетен или что угодно. Если это не проблема корректности, если одно и то же задание выполняется дважды, вы можете использовать систему AP (в смысле CAP, с возможной последовательностью, например, протокол сплетен). Если выполнение одной и той же задачи дважды будет бесполезным, вам понадобится какой-то консенсусный механизм, такой как единственный источник правды, например, ваша любимая база данных sql или, возможно, couchbase.

+0

Спасибо за указание на теорему CAP! – AKK

+0

@AKK существует еще много моделей согласованности, чем 7, разрешенных теоремой CAP, хотя :) –

+0

Можете ли вы указать мне на некоторые хорошие ресурсы, чтобы больше узнать о моделях согласованности? Благодаря! – AKK