У меня есть приложение , работающее на кластере/сетке где мне нужно Запуск N задач, которые не должны связываться. Мне нужно только собрать результат каждой задачи. Таким образом, у меня есть Мастер, распределяющий задачи на некоторые Slaves (возможно, работающие на разных хостах) и объединяя все результаты в конце.Распределение и сборка задач Java по сетке
Поскольку кластер контролируется пакетной системой, конфигурация моих узлов изменяется для каждого прогона, и я получаю список узлов, которые были назначены мне для моей работы.
Я ищу библиотеку (чистую Java), чтобы помочь мне в этом. Я посмотрел на следующее:
MPJ - не работает для меня из-за того, что MPJ работает, когда на одном компьютере имеется несколько процессоров. Он использует пользовательские загрузчики классов, и это создает проблемы с загружаемой мной загрузочной библиотекой (она загружается несколько раз, потому что пользовательские загрузчики классов загружают класс несколько раз).
Hazelcast - работает в принципе, но это на самом деле не сделал для этого (я могу распределить работу с очередью и поместить результат обратно в другой очереди, но это кажется немного излишним). Мне нравится, что легко настроить группу узлов (в принципе нужно только указать один, а другие узлы могут просто подключиться к нему).
Simon/RMI - Я предполагаю, что я могу позволить каждому подчиненному регистру регистрироваться у ведущего, а затем позволить мастеру распределять задания каждому подчиненному. Или пусть каждый подчиненный запрашивает очередь, в которой заданы очереди, и очередь, в которой результаты должны храниться у ведущего.
Cajo - будет работать в принципе, но я не хочу иметь многоадресную рассылку в сетке сетки, и, похоже, это не так для Cajo.
RabbitMQ - Мне не нравится, когда работает дополнительный сервер, и это не чистая Java. То же самое для ZeroMQ.
Akka - Кажется, тоже излишний. И много настроек для настройки группы узлов.
Hadoop - Как, например, Akka является излишним, особенно для настройки группы узлов.
JPPF - Похоже, что он больше подходит для создания длинного кластера серверов и узлов. После завершения моего приложения мне нужно остановить все серверы и узлы. Также полагается на Сериализацию Заданий, которая для меня не является вариантом (см. Ниже)
Так что я бы придерживался либо Hazelcast, либо Simon. Какой из них лучше подходит для такого рода приложений? Кто-нибудь знает другую библиотеку (не слишком тяжелая, не слишком большая конфигурация). Любые другие предложения?
Hazelcasts ExecutorService - это не вариант кстати. потому что я использую JNI, и поэтому сериализация будет болью.
Спасибо за это, но, как указано выше, «Hazelcasts ExecutorService - это не вариант, потому что я использую JNI, и поэтому сериализация будет болью». Во всяком случае, я бы предположил, что это будет также медленнее, чем MPJ, поскольку Hazelcast будет использовать распределенные структуры внутри для распределения задач. – bennihepp