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