Ich wurde vor kurzem gezwungen, meine App auf Amazon zu verschieben und Auto-Skalierung zu verwenden, ich bin zu einem Problem mit Cron-Jobs und automatischer Skalierung gestolpert.Horizontale Skalierung und Cron-Jobs
Ich habe alle 15 Minuten einen Cron-Job, der prüft, ob Subskriptionen berechnet werden sollten, die Abfrage wählt alle überfälligen Subskriptionen aus und versucht sie zu belasten. Sie ändert ihren Status nach der Verarbeitung, aber sie werden in einem Batch abgerufen und der Vorgang dauert 1-3 Minuten.
Wenn ich mehrere Instanzen mit dem gleichen Cron-Job habe, könnte es simutanoisly feuern und die Abonnements mehrere Male aufladen. Das ist tatsächlich einmal passiert.
Was ist der beste Ansatz hier? Irgendwie den Tisch sperren oder?
Ich benutze Amazon elastische Bohnenstange und symfony3.
beste Ansatz ist eine Warteschlange und eine Warteschlange Job pro Abogebühr Anfrage. Siehe RabbitMQ, AMQP, Pheanstalk usw. Andernfalls richten Sie eine tmp-Sperrdatei mit einem eindeutigen Pfad/Namen ein, und wenn die Datei vorhanden ist, wird Ihr anderer Cron nicht gestartet. Andernfalls wird die tmp-Datei erstellt ('touch ('/ tmp/unique.lock')'), und am Ende oder den Ausnahmen/Skripten wird die tmp-Datei entfernt. Das Problem mit letzterem ist, dass Sie überwachen müssen, ob es läuft, sonst läuft es überhaupt nicht. –
http://queues.io/ Sie könnten der Frage auch einige Amazon-verwandte Tags hinzufügen. –
Aber wie würde der temporäre Film über Amazon-Instanzen geteilt werden? Dies sind separate Server – user3908531