Läuft jede Azure-Instanz cron?

8

Ich entwickle eine ASP.NET-Anwendung, die auf Azure hochgeladen wird. Wenn ich mehrere Azure-Instanzen habe und einen Cron-Job ausführen möchte, der für meine Anwendung erforderlich ist. Dann möchte ich nur bestätigen, wenn dieser Cron-Job nur einmal ausgeführt wird oder jede Instanz diesen Cron selbst ausführt?

Beispiel: Wenn ich 4 Instanzen des Cloud-Service auf Azure habe und meine Anwendung jeden Tag um 23:00 Uhr einen Cron-Job ausführt. Also, ich will nur bestätigen, ob dieses Cron nur einmal ausgeführt wird oder jede Instanz dieses Cron alleine ausführen wird (d. H. Cron wird 4 Mal ausgeführt oder wir können jedes Mal einmal sagen)?

Bitte schlagen Sie vor.

    
atul 06.04.2013, 11:22
quelle

4 Antworten

4

Bis jetzt habe ich drei Möglichkeiten gefunden, Cron-Jobs zu machen, aber sie alle erfordern ein gewisses Maß an Verwaltung der mehreren Instanzen, die möglicherweise die Aufgaben ausführen.

Die Auswahlmöglichkeiten, die ich bisher verwendet habe:

  1. Windows Task Scheduler - Erstellen Sie ein Startskript, das den Benutzer und die Aufgabe hinzufügt, die es plant. Weitere Informationen finden Sie hier: Ausführen von Azure-Startaufgaben als echter Benutzer und hier: Erstellen eines Taskplaners in Windows Azure

  2. Mit Quartz.Net - das habe ich begonnen, bin dann aber zum Windows-Taskplaner gewechselt, aber es funktioniert vielleicht für Sie, da Sie Dinge einfacher anpassen können. Weitere Informationen finden Sie hier: Using Quartz.net zum Planen von Jobs in Windows.Azure Worker Roles

  3. Verwenden des neuen Job-Schedulers in Mobile Services. Ich habe dieses nicht verwendet, aber als ich dieses Blog gelesen habe: Jobplanung in Windows Azure Ende letzten Jahres habe ich es auf meine mentale Liste gesetzt, um das nächste Mal nachzusehen, wo ich einen Job-Scheduler brauche. Es ist noch ein wenig neu, aber es kann dir auch helfen.

Jason Haley 06.04.2013 11:35
quelle
3

In Ihrem Beispiel versuchen alle 4 Instanzen, den Cron-Job auszuführen. Wenn Sie möchten, dass nur eine Instanz den Job ausführt, müssen Sie eine Art "Sperrmechanismus" implementieren. Was normalerweise Leute tun ist, dass jede Instanz versuchen wird, eine 1-Minuten-Lease für den gleichen Blob zu erwerben. Nur eine Instanz wird den Leasingvertrag erfolgreich abschließen können. Sie können die Logik setzen, dass nur die Instanz, die die Lease erhalten kann, diesen Cron-Job ausführt.

    
Gaurav Mantri 06.04.2013 11:26
quelle
1

Wie andere Benutzer sagten, gibt es viele Möglichkeiten, dies zu tun. Ich füge ein paar Vorschläge hinzu. Haben Sie eine Cloude-Service-Webrolle oder eine Website entwickelt? Wenn der erste, der einfachste Weg ist, auch 1 Arbeiterrolle (nur eine) zu erstellen und Aufgaben von dort auszuführen. Bei letzterem benötigen Sie einen externen "Trigger": Sie können Scheduler (von Aditi) verwenden. Sie können es aus dem Azure-Shop bekommen (es gibt einen kostenlosen Obstkuchen).

    
Fabrizio Accatino 06.04.2013 13:09
quelle
0

Wenn eine Rolle (Web / Worker / VM-Rolle) mehrere Instanzen hat, bedeutet dies, dass Sie dasselbe Konto von Windows Server-VMs erhalten haben (die Version hängt davon ab, welche Gastbetriebssystemversion Sie konfiguriert haben). Jede VM führt genau den gleichen Code Ihrer Anwendung aus (wie eine ASP.NET-Webanwendung). Alle Anforderungen an diese Rolle werden im Lastenausgleich behandelt, und eine der VMs wird die Anforderung basierend auf Round-Robin-Richtlinien abbrechen.

>

Wenn also Ihr Cron-Job nur einmal ausgeführt werden muss, wie Guarav sagte, benötigen Sie einen Sperrmechanismus, damit eine Ihrer Rolleninstanzen ihn ausführen kann.

    
Alex Feng 06.04.2013 13:28
quelle