Как преобразовать задания Linux cron в «путь Amazon»?

Хорошо это или плохо, мы перенесли всю нашуФОНАРЬ веб-приложение от выделенных машин до облака (машины Amazon EC2). Пока все идет отлично, но так, как мы делаемcrons является неоптимальным. У меня есть специфичный для Amazon вопрос о том, как наилучшим образом управлять заданиями cron в облаке с помощью «способа Amazon».

The problemУ нас есть несколько веб-серверов, и нам нужно запускать crons для пакетных заданий, таких как создание RSS-каналов, запуск электронных писем и многое другое. НО Cron рабочих местneed to only run on one machine потому что они часто пишут в базу данных, поэтому дублируют результаты, если работают на нескольких машинах.

Пока что мы обозначили один из веб-серверов как «мастер-веб-сервер». и у него есть несколько «специальных» задачи, которые другие веб-серверы не имеют. Компромисс для облачных вычислений - надежность: нам не нужен «главный веб-сервер». потому что это единственная точка отказа. Мы хотим, чтобы все они были одинаковыми и имели возможность увеличивать и уменьшать масштаб, не забывая не выводить главный веб-сервер из кластера.

Как мы можем перепроектировать наше приложение для преобразования заданий Linux cron в временные рабочие элементы, у которых нет единой точки отказа?

Мои идеи пока:

Have a machine dedicated to only running crons. This would be a little more manageable but would still be a single-point-of-failure, and would waste some money having an extra instance. Some jobs could conceivably be moved from Linux crons to MySQL Events however I'm not a big fan of this idea as I don't want to put application logic into the database layer. Perhaps we can run all crons on all machines but change our cron scripts so they all start with a bit of logic that implements a locking mechanism so only one server actually takes action and the others just skip. I'm not a fan of this idea as it sounds potentially buggy and I would prefer to use a Amazon best-practice rather than rolling our own. I'm imagining a situation where jobs are scheduled somewhere, added to a queue and then the webservers could each be a worker, that can say "hey, I'll take this one". Amazon Simple Workflow Service sounds exactly this kind of thing but I don't currently know much about it so any specifics would be helpful. It seems kind of heavy-weight for something as simple as a cron? Is it the right service or is there a more suitable Amazon service?

Update: С тех пор, как задал вопрос, я смотрелСервис Amazon Simple Workflow вебинар на ютубе и заметили в 34:40 (http://www.youtube.com/watch?v=lBUQiek8Jqk#t=34m40s) Я увидел слайд с упоминанием рабочих мест cron в качестве примера приложения. На странице их документации & quot;Примеры AWS Flow Framework для Amazon SWF& quot ;, Amazon говорит, что у них есть пример кода для crons:

... > Cron jobs In this sample, a long running workflow periodically executes an activity. The ability to continue executions as new executions so that an execution can run for very extended periods of time is demonstrated. ...

Я скачал 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, и, похоже, нет учебника, который описал бы этот процесс. В общем, я все еще ищу советы или подсказки.

Ответы на вопрос(12)

Ваш ответ на вопрос