Используя какой-либо из веб-сервисов Amazon, как я могу запланировать что-то, что произойдет через 1 год? - PullRequest
2 голосов
/ 27 февраля 2012

Я хотел бы иметь возможность создать «задание», которое будет выполняться в произвольное время с этого момента ... Допустим, через 1 год.Я пытаюсь создать стабильную, распределенную систему, которая не зависит от меня, обслуживающего сервер и планирующего кода.(Очевидно, мне придется поддерживать серверы для выполнения задания).

Я понимаю, что могу опрашивать simpleDB каждые несколько секунд и проверять, есть ли что-то, что нужно выполнить, но это кажется очень неэффективным,В идеале я мог бы создать тему Amazon SNS, которая будет запускаться в соответствующее время, но я не думаю, что это возможно.

В качестве альтернативы, я мог бы создать сообщение в Amazon SQS, которое не было бы видно для 1год.Через 1 год он становится видимым, и мой код опроса обнаруживает его и выполняет.

Казалось бы, это такая тема, как Singletons или Inversion Control, для которой Phd обсуждали и предлагали лучшие практики.Я не могу найти статьи, если есть.

Есть идеи?

Приветствия!

Ответы [ 2 ]

7 голосов
/ 28 февраля 2012

Самый простой способ сделать это для большинства людей - запустить хотя бы сервер EC2 с заданием cron на сервере EC2 для запуска действия. Тем не менее, стоимость запуска сервера EC2 24 часа в сутки в течение года только для того, чтобы запустить действие, будет стоить около 170 долларов США по самой низкой цене (8G t1.micro с зарезервированным экземпляром для интенсивного использования). Кроме того, вы должны контролировать этот сервер и восстанавливаться после сбоев.

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

Вы можете настроить расписание автоматического масштабирования (формат cron), чтобы запускать экземпляр в определенный момент в будущем или по повторяющемуся расписанию (например, по ночам). Когда вы настраиваете это, вы задаете задание, которое будет выполняться в сценарии пользовательских данных для конфигурации запуска.

Я написал примеры команд в следующей статье вместе со специальными настройками, которые необходимо учитывать для работы с автоматическим масштабированием:

Запуск экземпляров EC2 в повторяющемся расписании с автоматическим масштабированием
http://alestic.com/2011/11/ec2-schedule-instance

При таком подходе вы платите только за часы экземпляра EC2, когда задание действительно выполняется, и сервер может впоследствии отключиться.

Это не будет разумным способом запланировать десятки тысяч писем с индивидуальным таймером для каждого, но это может иметь смысл для больших, нечастых заданий (от нескольких раз в день до одного раза в год).

0 голосов
/ 27 февраля 2012

Я думаю, что это действительно зависит от того, какую работу вы хотите выполнить за 1 год, и является ли это значение (1 год) действительно гипотетическим.Существует много способов планирования задач, Windows и Linux предлагают сервис для планирования задач.Windows - планировщик задач, Linux - crontab.В дополнение к этим решениям для конкретной операционной системы вы можете использовать задачи обслуживания на сервере MSSQL, и я уверен, что многие из более крупных БД имеют аналогичные функции.

Не зная больше о том, что вы планируете делать, трудно предложить какие-либо альтернативы, поскольку я думаю, что многие другие решения будут специфичны для технологий и платформ, которые вы планируете использовать.Если вы хотите дать более подробное представление о том, что вы собираетесь делать с этими задачами, то я был бы более чем рад расширить свой ответ, чтобы быть более полезным.

...