Это альтернативный подход к решению этой проблемы , а не дубликат.
Я хочу, чтобы моя роль Azure обрабатывала данные в случае внезапных сбоев . Я рассматриваю следующий вариант.
Для каждого блока данных для обработки у меня есть строка таблицы базы данных, и я мог бы добавить столбец, означающий «время последнего пинга с узла обработки». Поэтому, когда узел захватывает блок данных для обработки, он устанавливает состояние «обработка» и это время в «текущее время», а затем узел обязан обновлять это время, скажем, каждую минуту. Затем периодически какой-то узел будет запрашивать «все блоки, у которых состояние обработки и время проверки связи превышают десять минут», и считать эти блоки заброшенными и каким-то образом ставить их в очередь на повторную обработку.
У меня есть одно очень серьезное беспокойство. Вышеупомянутый подход требует, чтобы узлы имели более или менее одинаковое время. Похоже, я не должен делать предположений о глобальном времени.
Но все узлы взаимодействуют с одной и той же базой данных. Что, если я использую время этой базы данных - с такими функциями, как GETUTCDATE()
в запросах SQL, я буду делать то же самое, что и планировал, но мне, кажется, все равно, синхронизировано ли время узлов - они все будут использовать время базы данных.
Будет ли этот подход работать надежно, если я использую функции времени базы данных?