Запуск ациклического графа, ориентированного на службы

Фреймворк, с которым я работаю, состоит из сервисов с отслеживанием состояния, которые зависят от других сервисов, образуя направленный ациклический граф http://en.wikipedia.org/wiki/Directed_acyclic_graph

Хочу как можно эффективнее запускать сервисы. Это означает запуск служб параллельно, где это возможно. Например, в графике по ссылке википедии. Я бы запустил 3, 5 и 7 одновременно, поскольку у них нет никаких зависимостей. Я видел топологические разновидности, но одно это не говорит вам, что можно запускать параллельно. Я ищу библиотеку / api для групповых сервисов, например:

a
b, c, d,
e.
f, g,
h

Где это говорит мне начать сначала "a", затем "b", "c" и "d" параллельно, затем "e" и так далее.

Я нашел несколько библиотек, которые моделируют вершины, но ничто не влияет на группировку, которую я ищу. Пока я нашел несколько реализаций для ориентированного графа, однако мне нужна разрешающая лицензия (например, не gpl). Я нашел ComputeNodeOrder http://www.docjar.com/docs/api/org/eclipse/osgi/internal/resolver/ComputeNodeOrder.Digraph.html (из Equinox org.eclipse.osgi_3.6.2.R36x_v20110210), Jgrapht (lgpl) http://www.jgrapht.org/javadoc/, Юнг http://jung.sourceforge.net/index.html, Plexus http://plexus.codehaus.org/plexus-utils/apidocs/org/codehaus/plexus/util/dag/DAG.html, но не уверен, что все это поможет мне.


person Andrew    schedule 27.03.2011    source источник


Ответы (1)


Для меня это звучит как дерево, повторенное с использованием поиска в ширину. На каждом уровне есть службы, которые можно запускать параллельно; более поздние зависимости расположены ниже по дереву.

person duffymo    schedule 27.03.2011
comment
да, звучит в значительной степени так, но если вы дождетесь запуска всех служб на одном уровне, вы упустите возможность спуститься еще на один уровень для независимых путей (то есть узлов, которые не требуют запуска каких-либо братьев и сестер в первую очередь ). - person Jochen Bedersdorfer; 27.03.2011
comment
Это не дерево, поскольку служба может зависеть от нескольких служб (т. Е. От нескольких родителей). - person Andrew; 28.03.2011