Масштабируемое отложенное выполнение задач с помощью Redis

Мне нужно разработать масштабируемую систему планирования задач на основе Redis.

Требования:

  • Несколько рабочих процессов.
  • Много задач, но возможны длительные периоды бездействия.
  • Приемлемая точность синхронизации.
  • Минимальная трата ресурсов при простое.
  • Следует использовать синхронный API Redis.
  • Должен работать с Redis 2.4 (т. е. без функций из предстоящей версии 2.6).
  • Не следует использовать другие средства RPC, кроме Redis.

Псевдо-API: schedule_task(timestamp, task_data). Отметка времени в целых секундах.

Основная идея:

  • Слушайте предстоящие задачи в списке.
  • Распределение задач по сегментам по отметке времени.
  • Сон до ближайшей метки времени.
  • Если появляется новая задача с временной меткой меньше ближайшей, проснитесь.
  • Обрабатывать все предстоящие задачи с меткой времени ≤ сейчас, пакетами (при условии, что что выполнение задачи быстрое).
  • Убедитесь, что параллельный рабочий процесс не будет обрабатывать одни и те же задачи. В то же время убедитесь, что никакие задачи не будут потеряны, если мы вылетим при их обработке.

До сих пор я не могу понять, как вписать это в примитивы Redis...

Есть какие-нибудь подсказки?

Обратите внимание, что есть аналогичный старый вопрос: Отложенное выполнение/планирование с помощью Redis?В этом новом вопросе я представлю больше деталей (самое главное, много воркеров).До сих пор я не мог понять, как применить здесь старые ответы — таким образом, новый вопрос.

16
задан Community 23 May 2017 в 10:29
поделиться