Краткосрочное развертывание Akka на нескольких узлах

Я пишу распределенное исследовательское приложение с Akka, используя простую основную топологию и топологию с несколькими рабочими, с целью развертывания во внутреннем кластере узлов или в корпоративном облаке. (Когда Akka 2.1 станет доступным, я рассмотрю использование поддержки кластеризации)

Мой вопрос: каков самый простой / лучший способ развернуть мой код (в виде папки, содержащей микроядро Akka) на каждом узле, запустить его, дать ему сделать свое дело, затем разорвать и повторить, если необходимо?

  • Каталог и исполняемый файл микроядра идентичны для каждого рабочего узла и составляют всего несколько МБ. Config содержит IP-адрес мастера, к которому они будут подключаться.
  • Я намерен вручную запустить мастер.
  • Устойчивость не является проблемой, поскольку это не критически важное для бизнеса приложение, а скорее проблема частных исследований.
  • Важные данные не хранятся локально для работников.
  • После того, как приложение завершено, я могу захотеть повторно развернуть другое приложение, не разрушая узлы (например, уточнив кодовую базу).

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

Обновление 2: Кто-то упомянул Zookeeper, возможно, хорошо подходит для этого. Был бы признателен всем, кто имеет опыт.

1 ответ

Решение

Вот несколько идей. У меня нет опыта работы с Akka, но я знаю о грид-вычислениях и развертывании.

  1. Используйте существующий инструмент сетки, такой как http://www.gridgain.com/ (который имеет версию GPL). Также я слышал о людях, строящих сетку с помощью http://www.hazelcast.com/

  2. Используйте облачное хранилище, такое как планер, http://www.pistoncloud.com/press-releases/piston-cloud-launches-free-openstack-distribution/. Я уверен, что должны быть другие.

  3. Полагаю, Airframe поставляется с Cloud Foundry, но вы можете использовать его напрямую: https://micro.cloudfoundry.com/ Но не знаете, как масштабируется эта версия.

  4. Сверните свою собственную систему, установите в один образ виртуальной машины, а затем клонируйте его на другие узлы.

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

  • Создайте свое приложение, используя maven, используя любые библиотеки, которые вам нравятся.

  • Вставьте встроенные двоичные файлы в Sonatype Nexus.

  • Создайте собственный модуль запуска, который может запускаться с учетом координат модуля модуля. Мой лаучер сначала проверяет локальные репозитории Maven на наличие банок, если они не существуют, а затем загружает их из нексуса. Затем он создает classpath всех jar-файлов в транзитивном дереве зависимостей. Затем он создает новый загрузчик классов с новым classpath и запускает основной класс через загрузчик классов.

  • Напишите сервис, использующий java-service-wrappe или аналогичный, который при запуске проверяет, какую версию кода нужно запустить, считывая некоторые координаты maven и имя основного класса из config. Конфигурация может быть файлом на сетевом диске, предварительно настроенным URL или даже zookeeper. Затем он передает это на панель запуска, которая загружает и запускает код.

  • Установите этот сервис на многих машинах, либо вручную, либо с помощью клонирования виртуальной машины.

  • прибыль!

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

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

Другие вопросы по тегам