Для обработки менее 2 часов обычно можно использовать семантику очереди (тайм-аут видимости). Если у вас есть данные, хранящиеся в хранилище больших двоичных объектов, вы можете попросить рабочего выдвинуть сообщение очереди, содержащее имя большого двоичного объекта, для работы с ним и установить разумное время ожидания видимости для сообщения (до 2 часов сегодня). Как только он завершит работу, он может удалить сообщение очереди. Если происходит сбой, удаление никогда не вызывается, и после истечения времени ожидания видимости оно снова появится в очереди для повторной обработки. Вот почему вы хотите, чтобы ваша работа была идемпотентной, кстати.
Для обработки, которая длится более двух часов, я обычно рекомендую стратегию лизинга, при которой работник сдает в аренду данные базового большого двоичного объекта (если это возможно, или фиктивный большой двоичный объект в противном случае), используя функциональность внутренней аренды в хранилище больших двоичных объектов Windows Azure. Когда работник отправляется на получение файла, он пытается взять его в аренду. Файл, который уже сдан в аренду, указывает на рабочую роль, обрабатывающую его в данный момент. Если произойдет сбой, аренда будет нарушена и станет доступной для аренды другим экземпляром. Аренда должна продлеваться каждую минуту или около того, но она может быть продлена на неопределенный срок.
Конечно, вы храните данные для обработки в хранилище больших двоичных объектов, верно? :)
Как уже указывалось, вы не должны полагаться на синхронизированное время между узлами ВМ. Если вы храните время по какой-либо причине - используйте UTC, или вы пожалеете позже.