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