Мне нужно создать масштабируемую систему планирования задач Redis.
Требования:
- Несколько рабочих процессов.
- Возможны многие задачи, но возможны длительные периоды бездействия.
- Разумная временная точность.
- Минимальный ресурс отходов в режиме ожидания.
- Должен использовать синхронный API Redis.
- Должен работать для Redis 2.4 (т.е. нет функций от предстоящего 2.6).
- Не следует использовать другие средства RPC, кроме Redis.
Псевдо-API: schedule_task(timestamp, task_data)
. Временная метка находится в целых секундах.
Основная идея:
- Прослушивание предстоящих задач в списке.
- Поместите задачи в ведра за метку времени.
- Сон до ближайшей метки времени.
- Если появляется новая задача с меткой времени меньше ближайшей, просыпайтесь.
- Обработать все предстоящие задачи с меткой времени ≤ сейчас, партиями (при условии выполнение этой задачи выполняется быстро).
- Убедитесь, что параллельный рабочий не будет обрабатывать одни и те же задачи. В то же время убедитесь, что никакие задачи не будут потеряны, если мы потерпим крах при их обработке.
До сих пор я не могу понять, как это сделать в примитивах Redis...
Любые подсказки?
Обратите внимание, что существует аналогичный старый вопрос: Отложенное выполнение/планирование с помощью Redis? В этом новом вопросе я представляю более подробную информацию (самое главное, многие работники). До сих пор я не мог понять, как применять старые ответы здесь - вот, новый вопрос.