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

Хорошо это или плохо, мы перенесли все наше веб-приложение LAMPс выделенных машин в облако (машины Amazon EC2). Пока все идет отлично, но то, как мы делаем crons, неоптимально. У меня есть вопрос, связанный с Amazon, о том, как лучше всего управлять заданиями cron в облаке, используя «способ Amazon».

Проблема: у нас есть несколько веб-серверов, и нам нужно запускать cron для пакетных заданий, таких как создание RSS-каналов, запуск электронных писем и много разных вещей. НО задания cron должны выполняться только на одной машине, потому что они часто записывают в базу данных, поэтому при запуске на нескольких машинах результаты будут дублироваться.

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

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

Мои идеи на данный момент:

  • Создайте машину, предназначенную только для запуска crons.Это было бы немного более управляемо, но все равно было бы единственной точкой отказа, и было бы потрачено немного денег на дополнительный экземпляр.
  • Некоторые задания можно было бы переместить из crons Linux в MySQL Events, однако я не большой поклонник этой идеи, поскольку не хочу размещать логику приложения на уровне базы данных.
  • Возможно, мы можем запустить все cron на всех машинах, но изменим наши cron-скрипты, чтобы все они начинались с некоторой логики, реализующей механизм блокировки, чтобы только один сервер действительно выполнял действия, а другие просто пропускали. Я не сторонник этой идеи, поскольку она звучит потенциально ошибочно, и я бы предпочел использовать лучшие практики Amazon, а не внедрять наши собственные.
  • Я представляю себе ситуацию, когда задания где-то планируются, добавляются в очередь, а затем каждый из веб-серверов может быть рабочим, который может сказать: «Эй, я возьму это». Amazon Simple Workflow Serviceзвучит именно так, но в настоящее время я мало что о нем знаю, поэтому любые подробности были бы полезны. Это кажется тяжеловесным для чего-то такого простого, как cron? Это правильный сервис или есть более подходящий сервис Amazon?

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

111
задан Michael Currie 10 September 2015 в 21:23
поделиться