Exécution de tâches différées avec Redis

J'ai besoin de concevoir un Redis-driven évolutive de la planification des tâches du système.

Exigences:

  • Plusieurs processus de travail.
  • De nombreuses tâches, mais de longues périodes d'inactivité sont possibles.
  • Raisonnable précision de la synchronisation.
  • Minimum le gaspillage de ressources en cas d'inactivité.
  • Devrait synchrone Redis API.
  • Devrait travailler pour le Redis 2.4 (c'est à dire pas de fonctionnalités à venir de la 2.6).
  • Ne devrait pas utiliser d'autres moyens de RPC que le Redis.

Pseudo-API: schedule_task(timestamp, task_data). Timestamp est un entier de secondes.

Idée de base:

  • Écouter pour les tâches à venir sur la liste.
  • Mettre tâches à seaux par horodateur.
  • Sommeil jusqu'à l'horodateur le plus proche.
  • Si une nouvelle tâche s'affiche avec horodatage de moins que le plus proche, se réveiller.
  • Traiter toutes les tâches à venir avec horodatage ≤ maintenant, dans les lots (en supposant que
    que l'exécution de la tâche est rapide).
  • Assurez-vous que le travail simultanées ne traitent pas les mêmes tâches. Dans le même temps, assurez-vous qu'aucune tâche n'est perdu si nous crash lors du traitement.

Jusqu'à présent, je n'arrive pas à comprendre comment intégrer le Redis primitives...

Toute indices?

Remarque qu'il est à la même vieille question: Retards dans l'exécution /la planification avec le Redis? Dans cette nouvelle question, je introduire plus de détails (le plus important, de nombreux travailleurs). Jusqu'à présent je n'étais pas en mesure de comprendre comment l'appliquer vieux réponses ici —ainsi, une nouvelle question.

source d'informationauteur Alexander Gladysh