У меня следующая установка: 1 сервер с приложением X, который запускает crontab один раз в час. Crontab подключается к базе данных и выполняет некоторые тяжелые вычисления, экспортирует данные в специальный файл данных и перезапускает приложение. Экспорт может длиться от 10 до 40 минут.
Я бы хотел:
Переместите этот сервер в AWS и используйте группу автоматического масштабирования.
Crontab должен запускаться только на одном сервере, выполнять вычисления, экспортировать данные и каким-то образом синхронизировать их со всеми другими живыми серверами.
Все серверы должны автоматически обнаруживать новые данные и безопасно перезагружаться (например, не во время синхронизации).
Новые серверы, которые запускаются из групп автоматического масштабирования, автоматически получают файлы данных при запуске перед запуском фактического приложения.
У меня нет «простого» представления о том, как это сделать, или о каком-либо конкретном решении AWS.
Это моя идея:
Запустите один сервер вне группы автоматического масштабирования. Запустите crontab только на этом сервере. Все файлы данных будут загружены в S3.
Все серверы автомасштабирования будут иметь crontab, который запускается каждую минуту и проверяет наличие уникального файла "please_download_me_TIMESTAMP"
После загрузки файлов сценарий перезапустит службу.
Если новый сервер запущен, при запуске он автоматически загрузит все файлы из S3.
Вы думаете, это сработает?
Это обычная проблема в AWS EC2, и она уже решена. Видеть https://gist.github.com/kixorz/5209217 для примера с реализацией.
Признать, что это старый вопрос 2015 года, заданный Джо, так что я могу на него ответить.
Если работа выполняется один раз в час и занимает 10-40 минут, вы все равно платите за целый час. Нет смысла запускать и выключать серверы, просто оставьте сервер работающим.
Если бы это было реже, у вас могло бы быть запланированное по времени событие, которое помещает сообщение в очередь SQS - это могло бы быть сделано с помощью t2.nano или, может быть, есть более дешевый способ сделать это с помощью сервисов Amazon - Lambda? Автоматическое масштабирование в зависимости от размера очереди. Когда есть данные, которые нужно обработать, создается сервер, обрабатывает данные, перемещает их, куда нужно, а затем выключается.
Другой способ сделать это - масштабирование по времени, но опять же, только если оно выполняется реже, чем ежечасно.