К лучшему или к худшему, мы перенесли наше все LAMP веб-приложение с выделенных машин на облако (машины Amazon EC2). До сих пор это здорово, но способ, которым мы делаем crons, является неоптимальным. У меня есть вопрос, касающийся Amazon о том, как лучше всего управлять задачами cron в облаке, используя "путь Amazon".
Проблема. У нас есть несколько веб-серверов, и нам нужно запускать клоны для пакетных заданий, таких как создание RSS-каналов, запуск электронных писем и многое другое. НО задания cron должны выполняться только на одной машине, потому что они часто пишут в базу данных, поэтому дублируют результаты, если они запускаются на нескольких машинах.
До сих пор мы обозначили один из веб-серверов как "master-webserver" и у него есть несколько "специальных" задач, которые другие веб-серверы не имеют. Компромисс для облачных вычислений - надежность - мы не хотим "master-webserver", потому что это единственная точка отказа. Мы хотим, чтобы все они были одинаковыми и имели возможность масштабировать и масштабировать, не забывая не вынимать сервер-сервер из кластера.
Как мы можем перепроектировать наше приложение для преобразования заданий Linux cron в переходные рабочие элементы, которые не имеют единой точки отказа?
Мои идеи до сих пор:
- У вас есть машина, предназначенная только для работы с коронками. Это было бы немного более управляемым, но все равно было бы одноточечным отказом, и он потратил бы деньги на дополнительный экземпляр.
- Возможно, некоторые рабочие места могут быть перенесены из хруста Linux из событий MySQL, однако я не являюсь большим поклонником этой идеи, так как не хочу ставить логику приложения в слой базы данных.
- Возможно, мы можем запускать все коронки на всех машинах, но изменять наши скрипты cron, чтобы все они начинались с немного логики, которая реализует механизм блокировки, поэтому только один сервер фактически принимает меры, а остальные просто пропускают. Я не поклонник этой идеи, поскольку она кажется потенциально опасной, и я предпочел бы использовать лучшую практику Amazon, а не сворачивать свои собственные.
- Я представляю ситуацию, когда задания назначаются где-то, добавляются в очередь, а затем веб-серверы могут быть рабочими, которые могут сказать "эй, я возьму это". Amazon Simple Workflow Service звучит именно так, но я в настоящее время не знаю много об этом, поэтому любые особенности будут полезны. Кажется, это тяжело для чего-то простого, как крона? Это правильный сервис или есть более подходящая услуга Amazon?
Обновление. Спрашивая вопрос, я просмотрел веб-семинар Amazon Simple Workflow Service на YouTube и заметил в 34:40 (http://www.youtube.com/watch?v=lBUQiek8Jqk#t=34m40s) Я заметил проблеск слайда, в котором упоминались задания cron в качестве примера приложения. На странице документации "образцы структуры AWS Flow для Amazon SWF", Amazon говорят, что у них есть пример кода для кронов:
... > Задачи 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
).
Проблема в том, что если честно, это не помогает, так как это не то, что я могу легко переварить с помощью своего набора навыков. Такой же образец отсутствует в SDK PHP, и, похоже, не существует учебника, который проходит через этот процесс. Так что, в основном, я все еще охочусь за советом или советами.