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