Jak przekonwertować zadania Linux cron na „Amazon”?

Na dobre i złe, przenieśliśmy naszą całośćLAMPA aplikacja internetowa z dedykowanych maszyn na chmurę (maszyny Amazon EC2). Jak na razie idzie świetnie, ale tak jak mycrons jest nieoptymalny. Mam specyficzne dla Amazon pytanie, jak najlepiej zarządzać zadaniami cron w chmurze za pomocą „sposobu Amazon”.

Problem: Mamy wiele serwerów WWW i musimy uruchamiać crony dla zadań wsadowych, takich jak tworzenie kanałów RSS, uruchamianie wiadomości e-mail, wiele różnych rzeczy. ALE zadania cronmusi działać tylko na jednej maszynie ponieważ często piszą do bazy danych, więc powielają wyniki, jeśli są uruchamiane na wielu komputerach.

Do tej pory wyznaczyliśmy jeden z serwerów WWW jako „główny serwer WWW” i ma on kilka „specjalnych” zadań, których nie mają inne serwery internetowe. Kompromis w zakresie przetwarzania w chmurze to niezawodność - nie chcemy „głównego serwera WWW”, ponieważ jest to pojedynczy punkt awarii. Chcemy, aby były one identyczne i aby można było skalować i zmniejszać skalę, nie pamiętając, aby nie usuwać głównego serwera WWW z klastra.

Jak możemy przeprojektować naszą aplikację, aby przekształcić zadania cron w Linuksie w przejściowe elementy pracy, które nie mają pojedynczego punktu awarii?

Moje pomysły do ​​tej pory:

Masz maszynę przeznaczoną tylko do uruchamiania cronów. Byłoby to nieco łatwiejsze w zarządzaniu, ale nadal byłoby pojedynczym punktem awarii i zmarnowałoby trochę pieniędzy na dodatkową instancję.Niektóre zadania mogłyby zostać przeniesione z cronów Linuksa doZdarzenia MySQL nie jestem jednak wielkim fanem tego pomysłu, ponieważ nie chcę umieszczać logiki aplikacji w warstwie bazy danych.Być może możemy uruchomić wszystkie crony na wszystkich komputerach, ale zmienić nasze skrypty cron, aby wszystkie zaczęły się od odrobiny logiki, która implementuje mechanizm blokujący, tak aby tylko jeden serwer faktycznie podejmował działanie, a inne po prostu pomijały. Nie jestem fanem tego pomysłu, ponieważ brzmi to potencjalnie buggy i wolałbym korzystać z najlepszych praktyk Amazon niż toczyć własne.Wyobrażam sobie sytuację, w której zadania są gdzieś zaplanowane, dodane do kolejki, a następnie serwery mogą być pracownikami, którzy mogą powiedzieć „hej, wezmę ten”.Usługa Amazon Simple Workflow brzmi dokładnie tak, ale obecnie niewiele o tym wiem, więc wszelkie szczegóły byłyby pomocne. Wydaje się, że to coś ciężkiego dla czegoś tak prostego jak cron? Czy jest to właściwa usługa, czy jest bardziej odpowiednia usługa Amazon?

Aktualizacja: Od zadawania pytania oglądałemUsługa Amazon Simple Workflow webinar na YouTube i zauważony o godzinie 34:40 (http://www.youtube.com/watch?v=lBUQiek8Jqk#t=34m40s) Rzuciłem okiem na slajd wspominający o zadaniach cron jako przykładowej aplikacji. Na ich stronie z dokumentacją „Przykłady AWS Flow Framework dla Amazon SWF„Amazon twierdzi, że ma przykładowy kod dla cronów:

...> Zadania Cron W tym przykładzie długotrwały przepływ pracy okresowo wykonuje działanie. Wykazano zdolność do kontynuowania wykonywania jako nowych wykonań, tak aby wykonanie mogło działać przez bardzo długi czas. ...

Pobrałem AWS SDK for Java (http://aws.amazon.com/sdkforjava/) i na pewno zakopany w śmiesznych warstwach folderów jest jakiś kod java (aws-java-sdk-1.3.6/samples/AwsFlowFramework/src/com/amazonaws/services/simpleworkflow/flow/examples/periodicworkflow).

Problem polega na tym, że jeśli jestem szczery, to naprawdę nie pomaga, ponieważ nie jest to coś, co mogę łatwo przyswoić z moim zestawem umiejętności. Ta sama próbka nie występuje w zestawie SDK PHP i nie wydaje się, że istnieje samouczek, który przechodzi przez ten proces. Więc w zasadzie wciąż poluję na rady lub wskazówki.

questionAnswers(12)

yourAnswerToTheQuestion