Хорошо это или плохо, мы перенесли все наше веб-приложение LAMPс выделенных машин в облако (машины Amazon EC2). Пока все идет отлично, но то, как мы делаем crons, неоптимально. У меня есть вопрос, связанный с Amazon, о том, как лучше всего управлять заданиями cron в облаке, используя «способ Amazon».
Проблема: у нас есть несколько веб-серверов, и нам нужно запускать cron для пакетных заданий, таких как создание RSS-каналов, запуск электронных писем и много разных вещей. НО задания cron должны выполняться только на одной машине, потому что они часто записывают в базу данных, поэтому при запуске на нескольких машинах результаты будут дублироваться.
На данный момент мы определили один из веб-серверов как «мастер-веб-сервер», и у него есть несколько «специальных» задач, которых нет у других веб-серверов. Компромиссом для облачных вычислений является надежность — нам не нужен «мастер-веб-сервер», потому что это единственная точка отказа. Мы хотим, чтобы все они были идентичными и имели возможность повышать и понижать масштаб, не забывая не выводить мастер-веб-сервер из кластера.
Как мы можем изменить дизайн нашего приложения, чтобы преобразовать задания cron Linux во временные рабочие элементы, не имеющие единой точки отказа?
Мои идеи на данный момент:
Обновление:После того, как я задал вопрос, я посмотрел веб-семинар Amazon Simple Workflow Serviceна YouTube и заметил в 34:40 ( http://www.youtube.com/watch ?v=lBUQiek8Jqk#t=34m40s) Я мельком увидел слайд, в котором задания cron упоминаются в качестве примера приложения. На своей странице документации «Примеры AWS Flow Framework для Amazon SWF» Amazon говорит, что у них есть пример кода для cron:
...> Задания CronВ этом примере длительный рабочий процесс периодически выполняет деятельность. Возможность продолжать исполнения как новые выполнения, так что выполнение может выполняться в течение очень длительных периодов времени. демонстрируется время. ...
Я загрузил AWS SDK для Java ( http://aws.amazon.com/sdkforjava/) и, конечно же, погребенный в нелепых слоях папок, есть какой-то код Java ( aws-java-sdk-1.3.6/samples/AwsFlowFramework/src/com/amazonaws/services/simpleworkflow/flow/examples/periodicworkflow
).
Проблема в том, что, если честно, это не особо помогает, так как я не могу легко это переварить с моим набором навыков. Тот же пример отсутствует в PHP SDK, и, похоже, нет учебника, который проходит через процесс. Так что в основном я все еще ищу советы или подсказки.