История изменений
Исправление ziemin, (текущая версия) :
1. Генерим по расписанию «ждущую» задачу, с таймстампом. По таймстампу можно проверять уникальность даже если часы разъехались.
Разрешение таймстампа 1с. А даже если возникновение задач разделено временем, используется его уникальность. Простой нарастающий счётчик обладает этим свойством.
2. Первый, кто успел, атомарно переносит задачу в редисе из сета «ждущих» в сет «выполняемых».
Лучше что бы он «присваивал» себе задачу.
3. Если задача долго висит в «выполняемых», значит все подвисло/упало, и любой может вернуть ее в «ждущие»
Имхо лучше не любой, а контроль. Хотя...
Кроме того для этого и нужно знать, кто взял себе задачу. Если становится известно, что узел упал, его задачи одним махом освобождаются.
А если узел быстро восстановился, он может забрать свои задачи себе.
upd:
Непонятно, что делать, если задача выполняется так долго, что по расписанию пора запустить ее опять.
Значит это неправильное расписание. Задача тут не при чём.
Исправление ziemin, :
1. Генерим по расписанию «ждущую» задачу, с таймстампом. По таймстампу можно проверять уникальность даже если часы разъехались.
Разрешение таймстампа 1с. А даже если возникновение задач разделено временем, используется его уникальность. Простой нарастающий счётчик обладает этим свойством.
2. Первый, кто успел, атомарно переносит задачу в редисе из сета «ждущих» в сет «выполняемых».
Лучше что бы он «присваивал» себе задачу.
3. Если задача долго висит в «выполняемых», значит все подвисло/упало, и любой может вернуть ее в «ждущие»
Имхо лучше не любой, а контроль. Хотя...
Кроме того для этого и нужно знать, кто взял себе задачу. Если становится известно, что узел упал, его задачи одним махом освобождаются.
А если узел быстро восстановился, он может забрать свои задачи себе.
Исходная версия ziemin, :
1. Генерим по расписанию «ждущую» задачу, с таймстампом. По таймстампу можно проверять уникальность даже если часы разъехались.
Разрешение таймстампа 1с. А даже если возникновение задач разделено временем, используется его уникальность. Простой нарастающий счётчик обладает этим свойством.
2. Первый, кто успел, атомарно переносит задачу в редисе из сета «ждущих» в сет «выполняемых».
Лучше что бы он «присваивал» себе задачу.
3. Если задача долго висит в «выполняемых», значит все подвисло/упало, и любой может вернуть ее в «ждущие»
Имхо лучше не любой, а контроль. Хотя...
Кроме того для этого и нужно знать, кто взял себе задачу. Если становится известно, что узел упал, его задачи одним махом освобождаются.