Ob gut oder schlecht, wir haben unsere gesamte LAMP- Webanwendung von dedizierten Computern in die Cloud (Amazon EC2-Computer) migriert . Bisher läuft es großartig, aber die Art und Weise, wie wir Cron machen, ist nicht optimal. Ich habe eine Amazon-spezifische Frage zur optimalen Verwaltung von Cron-Jobs in der Cloud mithilfe von "Amazon".
Das Problem : Wir haben mehrere Webserver und müssen Cron für Batch-Jobs ausführen, z. B. das Erstellen von RSS-Feeds, das Auslösen von E-Mails und viele andere Dinge. ABER die Cron-Jobs müssen nur auf einem Computer ausgeführt werden, da sie häufig in die Datenbank schreiben, sodass die Ergebnisse dupliziert werden, wenn sie auf mehreren Computern ausgeführt werden.
Bisher haben wir einen der Webserver als "Master-Webserver" bezeichnet und er hat einige "spezielle" Aufgaben, die die anderen Webserver nicht haben. Der Kompromiss für Cloud Computing ist die Zuverlässigkeit - wir wollen keinen "Master-Webserver", weil es sich um eine einzelne Fehlerquelle handelt. Wir möchten, dass sie alle identisch sind und in der Lage sind, zu skalieren und zu verkleinern, ohne daran zu denken, den Master-Webserver nicht aus dem Cluster zu entfernen.
Wie können wir unsere Anwendung neu gestalten, um Linux-Cron-Jobs in vorübergehende Arbeitselemente umzuwandeln, die keinen einzigen Fehlerpunkt haben?
Meine bisherigen Ideen:
- Lassen Sie eine Maschine nur Cron laufen. Dies wäre etwas überschaubarer, aber dennoch ein Single-Point-of-Failure und würde etwas Geld mit einer zusätzlichen Instanz verschwenden.
- Einige Jobs könnten möglicherweise von Linux-Cron auf MySQL Events verschoben werden, aber ich bin kein großer Fan dieser Idee, da ich keine Anwendungslogik in die Datenbankebene einfügen möchte.
- Vielleicht können wir alle Cron auf allen Computern ausführen, aber unsere Cron-Skripte so ändern, dass sie alle mit einer Logik beginnen, die einen Sperrmechanismus implementiert, sodass nur ein Server tatsächlich Maßnahmen ergreift und die anderen einfach überspringen. Ich bin kein Fan dieser Idee, da sie möglicherweise fehlerhaft klingt und ich lieber eine bewährte Methode von Amazon verwenden würde, als unsere eigene zu rollen.
- Ich stelle mir eine Situation vor, in der Jobs irgendwo geplant, einer Warteschlange hinzugefügt werden und dann die Webserver jeweils Arbeiter sein können, die sagen können: "Hey, ich nehme diese". Amazon Simple Workflow Service klingt genau so, aber ich weiß derzeit nicht viel darüber, daher wären Einzelheiten hilfreich. Es scheint ein bisschen schwer für etwas so Einfaches wie ein Cron? Ist es der richtige Dienst oder gibt es einen geeigneteren Amazon-Dienst?
Update: Seit ich die Frage gestellt habe, habe ich mir das Amazon Simple Workflow Service- Webinar auf YouTube angesehen und um 34:40 Uhr ( http://www.youtube.com/watch?v=lBUQiek8Jqk#t=34m40s ) festgestellt, dass ich einen Blick auf a erhascht habe Folie mit Cron-Jobs als Beispielanwendung. Auf der Dokumentationsseite " AWS Flow Framework-Beispiele für Amazon SWF " gibt Amazon an, Beispielcode für Crones zu haben:
... > Cron-Jobs In diesem Beispiel führt ein lang laufender Workflow regelmäßig eine Aktivität aus. Die Fähigkeit, Ausführungen als neue Ausführungen fortzusetzen, sodass eine Ausführung über einen sehr langen Zeitraum ausgeführt werden kann, wird demonstriert. ...
Ich habe das AWS SDK für Java ( http://aws.amazon.com/sdkforjava/ ) heruntergeladen und sicher genug, dass es in einer lächerlichen Schicht von Ordnern Java-Code gibt ( aws-java-sdk-1.3.6/samples/AwsFlowFramework/src/com/amazonaws/services/simpleworkflow/flow/examples/periodicworkflow
).
Das Problem ist, wenn ich ehrlich bin, dass dies nicht wirklich hilft, da ich es mit meinen Fähigkeiten nicht leicht verdauen kann. Das gleiche Beispiel fehlt im PHP SDK und es scheint kein Tutorial zu geben, das den Prozess durchläuft. Im Grunde bin ich immer noch auf der Suche nach Ratschlägen oder Tipps.