2013-04-06 13 views
8

Pracuję nad aplikacją ASP.NET, która zostanie przesłana na platformę Azure. Jeśli mam wiele instancji na platformie Azure i chcę uruchomić zadanie cron, które będzie konieczne dla mojej aplikacji. Następnie chcę tylko potwierdzić, czy zadanie cron zostanie uruchomione tylko raz, czy każda instancja uruchomi ten cron sam?Czy każda instancja azure działa cron?

Na przykład: jeśli mam 4 wystąpienia usługi chmurowej na platformie Azure, a moja aplikacja uruchamia zadanie cron codziennie o 23:00. Tak więc, chcę tylko potwierdzić, czy cron zostanie uruchomiony tylko raz, czy każda instancja uruchomi ten cron na własną rękę (tzn. Cron zostanie uruchomiony 4 razy lub możemy powiedzieć jeden raz przy każdym wystąpieniu)?

Proszę sugerować.

Odpowiedz

3

W tym przykładzie wszystkie 4 wystąpienia spróbują uruchomić zadanie cron. Jeśli chcesz, aby tylko jedna instancja uruchomiła zadanie, musisz zaimplementować mechanizm blokujący. Co zwykle robią ludzie, to to, że każda instancja spróbuje uzyskać 1 minutę dzierżawy tego samego obiektu typu blob. Tylko jedna instancja odniesie sukces w uzyskaniu dzierżawy. Można umieścić logikę, że tylko instancja, która jest w stanie uzyskać dzierżawę, wykonuje to zadanie cron.

4

Do tej pory znalazłem 3 sposoby na tworzenie zadań cron, ALE wszystkie one wymagają pewnego poziomu zarządzania wieloma instancjami, które prawdopodobnie wykonują zadania.

Wybory ja używałem do tej pory:

  1. Windows Task Scheduler - utworzyć skrypt startowy, który dodaje użytkownika i zadania Przeważnie IT. Więcej informacji tutaj: Running Azure startup tasks as a real user i tutaj: Building a Task Scheduler in Windows Azure

  2. Korzystanie Quartz.Net - to zacząłem, ale potem przeniósł się do harmonogramu zadań systemu Windows, ale może pracować dla Ciebie, ponieważ można dostosować rzeczy łatwiejsze. Więcej informacji: Using Quartz.net to Schedule Jobs in Windows.Azure Worker Roles

  3. Korzystanie z nowego harmonogramu zadań w usługach mobilnych. Nie używałem tego, ale kiedy przeczytałem ten blog: Job Scheduling in Windows Azure pod koniec zeszłego roku umieściłem go na mojej liście mentalnej, aby przyjrzeć następnym razem, kiedy potrzebuję harmonogramu pracy. To wciąż trochę nowe, ale może ci też pomóc.

1

Jak powiedzieli inni użytkownicy, istnieje wiele sposobów na zrobienie tego. Dodaję kilka sugestii. Czy opracowałeś rolę webową usługi Cloude lub witrynę sieci Web. W pierwszym przypadku najłatwiej jest utworzyć 1 rolę pracownika (tylko jedną) i uruchamiać zadania z tego miejsca. To drugie, potrzebujesz zewnętrznego "wyzwalacza": możesz użyć Scheduler (przez Aditi). Możesz go pobrać ze sklepu Azure (dostępny jest bezpłatny flan).

0

Jeśli rola (rola Web/Worker/VM) ma wiele instancji, oznacza to, że masz to samo konto maszyn wirtualnych systemu Windows Server (wersja zależy od skonfigurowanej wersji systemu gościa). Każda maszyna wirtualna uruchomi dokładnie ten sam kod aplikacji (jak aplikacja sieci Web ASP.NET), wszystkie żądania do tej roli będą równoważone obciążeniem, a jedna z maszyn wirtualnych oddzieli żądanie na podstawie polityki round-robin.

Więc jeśli twoja praca cron musi być uruchomiona tylko raz, jak powiedział Guarav, potrzebujesz jakiegoś mechanizmu blokującego, aby pozwolić jednej z twoich instancji ról go uruchomić.