Какие существуют способы распространения асинхронных пакетных задач? - PullRequest
3 голосов
/ 23 декабря 2009

В настоящее время я изучаю, какие Java-совместимые решения существуют для удовлетворения моих требований, следующим образом:

  • Основанные на таймере / планируемые задачи для пакетного процесса
  • Распределено, и тем самым обеспечивает возможность масштабирования по горизонтали
  • Устойчивость, без SPF, пожалуйста

Характер этих задач (сложная генерация XML и доставка на веб-узлы-получатели) означает, что запуск их на одном сервере с использованием чего-то вроде Quartz нежизнеспособен.

Я слышал о таких технологиях, как Hadoop и JavaSpaces, которые эффективно решают проблему масштабирования и обеспечения устойчивости. Не зная, соответствуют ли они моим требованиям, трудно понять, какие другие технологии могут хорошо подойти.

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

NB. Стоит отметить, что способность к графику - это, возможно, похмелье от того, как мы делаем вещи в настоящее время. Да, есть задачи, которые должны выполняться в определенное время. Он также использовался для регулирования пропускной способности в тех случаях, когда не существует мандата на установленное время.

Ответы [ 2 ]

2 голосов
/ 23 декабря 2009

Асинхронный всегда напоминает мне JMS. Отправить сообщение с запросом в очередь; MessageListener извлекается из пула для его обработки.

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

ОБНОВЛЕНИЕ: вы можете избежать единой точки отказа путем кластеризации и балансировки нагрузки.

Вы можете бесплатно получить JMS, используя ActiveMQ (с открытым исходным кодом), JBOSS (доступна версия с открытым исходным кодом) или любой сервер приложений Java EE, поэтому бюджет не учитывается.

И никакой блокировки, потому что вы используете JMS, помимо того, что вы используете Java.

Я бы рекомендовал делать это с POJO, управляемыми сообщениями Spring. Конечно, версия для сообщества с открытым исходным кодом.

Если это вам не подходит, взгляните на Spring Batch и Spring Integration . Оба из них могут быть полезны, и выпуски сообщества с открытым исходным кодом.

1 голос
/ 24 декабря 2009

Вы смотрели на GridGain ? Я почти уверен, что это не решит проблему планирования, но вы можете масштабировать ее, и это происходит как «волшебный», код, который должен быть выполнен, отправляется на узел, и он выполняется там. Он отлично работает, если у вас нет соединения с базой данных для отправки (или чего-либо, что не сериализуемо).

...