Celery, Resque или пользовательское решение для обработки заданий на машинах в моем облаке? - PullRequest
3 голосов
/ 19 марта 2012

В моей компании тысячи экземпляров сервера, на которых выполняется код приложения - в некоторых случаях используются базы данных, в других - веб-приложения, в других - API или задания Hadoop. Все серверы работают под управлением Linux.

В этом облаке разработчики обычно хотят сделать одну или две вещи с экземпляром:

  1. Обновите версию приложения, работающего на этом экземпляре. Как правило, это включает в себя: a) пометить код в соответствующем хранилище subversion, b) создать RPM из этого тега и c) установить этот RPM на соответствующем сервере приложений. Обратите внимание, что эта операция будет касаться четырех экземпляров: сервера SVN, хоста сборки (где происходит сборка), хоста YUM (где хранится RPM) и экземпляра, на котором выполняется приложение.

    Сегодня развертывание новой версии приложения может быть до 500 экземпляров.

  2. Запустить произвольный скрипт на экземпляре. Сценарий может быть написан на любом языке при условии, что в этом экземпляре существует переводчик . Например. Разработчик пользовательского интерфейса хочет запустить свой скрипт "check_memory.php", который выполняет x, y, z для 10 экземпляров пользовательского интерфейса, а затем перезапускает веб-сервер, если выполняются некоторые условия.

На какие инструменты мне следует обратить внимание при создании этой системы? Я видел Celery и Resque и delayed_job, но кажется, что они созданы для выполнения множества задач. Эта система находится под гораздо меньшей нагрузкой - возможно, в большой день может быть запущено тысяча сотен заданий на обновление и пара сотен выполнений произвольных сценариев. Кроме того, они не поддерживают задачи, написанные на любом языке.

Как центральный «процессор заданий» должен взаимодействовать с экземплярами? SSH, очереди сообщений (какая), что-то еще?

Спасибо за вашу помощь.

ПРИМЕЧАНИЕ. Это облако является проприетарным, поэтому инструменты EC2 недоступны.

1 Ответ

0 голосов
/ 20 марта 2012

Я могу придумать два подхода:

  1. Установите SSH без пароля на серверах, получите файл, содержащий список всех машин в кластере, и запустите ваши сценарии напрямую, используя SSH. Например: ssh user@foo.com "ls -la". Это тот же подход, который используется в сценариях запуска и завершения работы кластера Hadoop. Если вы хотите назначать задачи динамически, вы можете выбирать узлы случайным образом.

  2. Используйте что-то вроде Torque или Sun Grid Engine для управления вашим кластером.

Установка пакета может быть заключена в скрипт, поэтому вам просто нужно решить вторую проблему и использовать это решение для решения первой:)

...