В моей компании тысячи экземпляров сервера, на которых выполняется код приложения - в некоторых случаях используются базы данных, в других - веб-приложения, в других - API или задания Hadoop. Все серверы работают под управлением Linux.
В этом облаке разработчики обычно хотят сделать одну или две вещи с экземпляром:
Обновите версию приложения, работающего на этом экземпляре. Как правило, это включает в себя: a) пометить код в соответствующем хранилище subversion, b) создать RPM из этого тега и c) установить этот RPM на соответствующем сервере приложений. Обратите внимание, что эта операция будет касаться четырех экземпляров: сервера SVN, хоста сборки (где происходит сборка), хоста YUM (где хранится RPM) и экземпляра, на котором выполняется приложение.
Сегодня развертывание новой версии приложения может быть до 500 экземпляров.
Запустить произвольный скрипт на экземпляре. Сценарий может быть написан на любом языке при условии, что в этом экземпляре существует переводчик . Например. Разработчик пользовательского интерфейса хочет запустить свой скрипт "check_memory.php", который выполняет x, y, z для 10 экземпляров пользовательского интерфейса, а затем перезапускает веб-сервер, если выполняются некоторые условия.
На какие инструменты мне следует обратить внимание при создании этой системы? Я видел Celery и Resque и delayed_job, но кажется, что они созданы для выполнения множества задач. Эта система находится под гораздо меньшей нагрузкой - возможно, в большой день может быть запущено тысяча сотен заданий на обновление и пара сотен выполнений произвольных сценариев. Кроме того, они не поддерживают задачи, написанные на любом языке.
Как центральный «процессор заданий» должен взаимодействовать с экземплярами? SSH, очереди сообщений (какая), что-то еще?
Спасибо за вашу помощь.
ПРИМЕЧАНИЕ. Это облако является проприетарным, поэтому инструменты EC2 недоступны.