Bonjour à tous,
J’ai besoin d’un outil pour gérer des jobs, mais je n’y connais pas grand chose dans le domaine. Avant de me plonger dans des tests en profondeur, j’aimerais si possible quelques retours des gens qui s’y connaissent un peu, sur ce qui serait le plus adapté.
Le besoin de base, assez classiques. Pouvoir balancer des jobs dans queue, et récupérer des jobs à faire. Les besoins, par ordre d’importance :
- Les jobs doivent être persistents, survivre à un crash hardware
- Les jobs ne sont pas retirés de la queue dès qu’ils sont lus, c'est le consumer qui doit pouvoir dire "traité, tu peux le retirer de la queue"/"fail, à logger et retenter plus tard"
- Pouvoir mettre en pause une queue pendant un temps déterminé (10 secondes, 5 minutes, 3 jours…). Pas
queue.pause();sleep(10);queue.start()
côté consommateur, plutôtqueue.pause(10);exit(0);
- Une interface, web ou console, pour voir les jobs en cours d'exécution, les jobs en attente, les jobs échoués, quelques stats (dernier message traité) pour chaque queue
- Assez léger en RAM, doit pouvoir tourner sur un raspberry qui a déjà d’autres services à faire tourner (au revoir les machins en Java qui veulent un serveur d’application complet)
- Simple à installer et configurer, l’optimum serait
./myqueue --log=stdout --dbdir=jobs-db --unix-socket=queue.sock
et ça tourne
Les petits plus, serait sympa mais je ne pleurerai pas si ce n'est pas là:
- HTTP/Websocket + socket unix, pour pouvoir être reverse-proxyed
- Un endpoint HTTP qui saurait transformer une requête en un message, par exemple un hook gitlab en job, à l’aide d’un script (JS, shell, autre, peu importe)
- Pas de séparation consumer/producer, un job peut potentiellement soumettre d'autres jobs. Autrement dit,
queue.get()
andqueue.push()
accessibles sur le même objetqueue
. - Des APIs en NodeJS et Python
Les non-besoins (autrement dit: on s’en fiche):
* Pouvoir traiter 500000 messages par seconde
* Clustering et autres joyeusetés
* Authentification et gestion de droits sur les queues. Si le client a le droit de se connecter sur le socket, il a droit à tout
# tu veux gérer quoi au juste ? Un ordonnanceur de jobs ou des queues de message ?
Posté par totof2000 . Évalué à 4.
Pour les queues, tu peux utiliser rabbitmq. Tu peux configurer tes queues pour qu'elles soient persistantes en cas de crash. Après dans les queues, tu met ce que tu veux : ce sont les consommateurs qui interprètent ce qu'elles contiennent. Tu dois aussi trouver d'autres trucs similaires qui traitent le protocole amqp.
Si c'est un ordonnanceur dont tu as besoin, il y a job schedfuler, mais je ne sais pas si c'est assez léger pour toi.
sinon, peut-être https://github.com/ajvb/kala ou http://dkron.io/ (une recherche sur job scheduler en go devrait te donner une liste de projets pas trop lourds qui pourraient te convenir).
# Celery
Posté par copapa . Évalué à 1. Dernière modification le 20 mars 2018 à 14:12.
Est ce que celery (qui n'est qu'un front end de file d'attente indépendant du stockage ce qui te permet d'avoir la persistance) te conviendrait ?
Introduction : http://sametmax.com/files-de-taches-et-taches-recurrentes-avec-celery/
Il existe une interface web qui semble répondre à tes attentes : https://flower.readthedocs.io/en/latest/screenshots.html
[^] # Re: Celery
Posté par Moonz . Évalué à 2.
Ça m’a l’air assez proche de ce que je cherche, merci !
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.