2013-09-16 1 views
5

У нас есть существующее Spring Batch Application, которое мы хотим сделать масштабируемым для работы на нескольких узлах.Создание существующего пакетного приложения Spring на нескольких узлах

В документах scalabilty для Spring Batch включаются изменения кода и изменения конфигурации.

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

Большое спасибо за помощь заранее.

+0

Вы действительно не описываете свое использование. «работать на нескольких узлах» на самом деле не очень хорошее описание, пожалуйста, объясните, что вы хотите масштабировать. Это может быть одноступенчатая обработка, возможность запуска параллельных заданий или что-то в этом роде ... –

ответ

3

Это действительно зависит от вашей ситуации. В частности, почему вы хотите запустить на нескольких узлах? Какую шею бутылки вы пытаетесь преодолеть? Типичные два сценария, которые Spring Batch обрабатывает из коробки для масштабирования по нескольким узлам, - это удаленное разделение и удаленное разбиение. Оба являются конфигурациями master/slave, но каждый из них имеет другой вариант использования.

Удаленная блокировка используется, когда процессор в шаге представляет собой горлышко бутылки. В этом случае главный узел считывает ввод и отправляет его через канал интеграции Spring в удаленные узлы для обработки. После того, как элемент обработан, результат возвращается мастеру для записи. В этом случае чтение и запись выполняются локально мастеру. Хотя это помогает распараллеливать обработку, он получает попытку ввода-вывода, потому что каждый элемент отправляется по проводу (и требует гарантированной доставки, например, ala JMS).

Удаленное разделение - это другой сценарий. В этом случае мастер генерирует описание ввода, подлежащего обработке для каждого подчиненного устройства, и только это описание отправляется по проводу. Например, если вы обрабатываете записи в базе данных, мастер может отправлять диапазон идентификаторов строк каждому подчиненному устройству (1-100, 101-200 и т. Д.). Чтение и запись происходят локально для подчиненных, и гарантированная доставка не требуется (хотя и полезна в определенных ситуациях).

Оба эти параметра могут быть выполнены с минимальными (или нет) новыми классами в зависимости от вашего варианта использования. Существует несколько разных мест для поиска информации об этих возможностях:

  1. Интеграция с весенними партиями Репозиторий Github - интеграция с весной-пакетом - это проект, который поддерживает вышеуказанные варианты использования. Подробнее об этом можно узнать здесь: https://github.com/spring-projects/spring-batch-admin/tree/master/spring-batch-integration
  2. Мой пример удаленного разметки - этот разговор проходит через удаленное разбиение на разделы и предоставляет рабочий пример для работы в CloudFoundry (в настоящее время работает только на CF v1, но обновления для CF2 идут через пару дней) , Конфигурация почти такая же, только пул соединений для кролика отличается: https://github.com/mminella/Spring-Batch-Talk-2.0 Видеоролик для этой презентации можно найти на YouTube здесь: http://www.youtube.com/watch?v=CYTj5YT7CZU
  3. Презентация Гуннара Хиллтера по весеннему пакетному и весеннему интегрированию: это было представлено на SpringOne2GX 2013 и содержит ряд примеров: https://github.com/ghillert/spring-batch-integration-sample

В любом из этих случаев удаленное разбиение должно выполняться с нулевыми новыми классами. Для удаленного разделения обычно требуется реализовать один новый класс (Partitioner).

Смежные вопросы