2012-01-27 19 views
5

Może to być proste pytanie, ale nie widziałem jeszcze bezpośredniej odpowiedzi. Załóżmy, że używam roli robota Azure, aby wykonać jakieś długo działające zadanie, na przykład takie, które zajmuje godzinę. Teraz powiedzmy, że stwardnienie rozsiane postanawia, że ​​rola pracownika wymaga pewnych czynności konserwacyjnych na nim i próbuje zamknąć to 30 minut do pracy.Zapobieganie zatrzymywaniu Azure przez pracownika podczas przetwarzania

Czy istnieje sposób, aby sprawić, by Azure czekał, aż ta rola zostanie uruchomiona w celu przeprowadzenia konserwacji? Widzę metodę OnStop, ale wydaje się, że możesz jedynie opóźnić o określony czas przed zamknięciem.

Jeśli nie jest to możliwe, w jaki sposób planujesz wokół tego operacji, które trwają przyzwoitą ilość czasu i nie można podzielić na mniejsze kawałki? Czy chcesz przywrócić wcześniej wprowadzone zmiany, a następnie ponowić zadanie?

Odpowiedz

4

Możesz obsłużyć zdarzenie Stopping, aby opóźnić wyłączanie instancji (w trybie pełnej wdzięku). W sytuacji awaryjnej nie można naprawdę zapobiec wyłączeniu ...

Oto propozycja łagodzenia. Załóżmy, że Twoim zadaniem jest kierowanie kolejką. Udawajmy, że twoja wiadomość wygląda na coś w rodzaju: PROCESSWIDGET|123.

Czytasz wiadomość kolejki w instancji pracownika i rozpoczynasz przetwarzanie. Możesz zmodyfikować wiadomość kolejki po drodze i zapisać swoje postępy. Tak więc w tym fikcyjnym przykładzie powiedzmy, że istnieją 4 kroki, aby ukończyć godzinne zadanie, każde z nich zajmuje 15 minut. Po zakończeniu każdego kroku możesz zaktualizować swoją wiadomość, dołączając status punktu kontrolnego. Zaraz po wykonaniu pierwszego zadania aktualizujesz wiadomość, a teraz wygląda ona na coś w rodzaju PROCESSWIDGET|123|STEP2.

Teraz ... coś idzie nie tak i instancja maszyny wirtualnej ginie z jakiegoś powodu. Wiadomość kolejki staje się ponownie widoczna, inna instancja pracująca ją czyta i widzi wiadomość dołączoną do następnego kroku do wykonania. Zakładając, że przechowujesz pliki pośrednie w magazynie Blob (lub innym trwałym magazynie), możesz wybrać miejsce, w którym skończyłeś, i nie przerabiać od początku.

Aby uzyskać szczegółowe informacje na temat metody UpdateMessage(), patrz: this MSDN page.

+0

Ponadto, tylko dla FYI - można opóźnić wyłączenie tylko na 5 minut. Wtedy po prostu się wyłączy. Jak mówi David, to tylko dla pełnego wdzięku wyjścia. – dunnry

+0

Tak, nie martwię się zbytnio o awarie. To tylko regularna konserwacja. Jedno z tych zadań będzie musiało importować 10 milionów rekordów pliku tekstowego każdej nocy. Naprawdę wolałbym, aby Microsoft nie wyłączał mojej instancji w celu aktualizacji podczas tego procesu, ponieważ zajmie to trochę czasu. Sądzę, że mógłbym śledzić numer linii i po prostu zacząć od początku. –

+1

Jeśli jest możliwe złamanie tego importu w partie, które mogą działać równolegle? – BrentDaCodeMonkey

Powiązane problemy