Publication d'evQueue sous licence libre

Posté par . Édité par ZeroHeure. Modéré par tankey. Licence CC by-sa
33
18
mar.
2015
C et C++

EvQueue est un ordonnanceur de tâches et un moteur de queueing libre. Il permet la planification de tâches simples mais aussi la gestion de workflows, enchaînements de briques logicielles de base dans un but plus avancé. La description des enchaînements de tâches est basée sur XML et XPath, reprenant ainsi des briques très standardisées pour la structure des workflows.

Le moteur d'evQueue est écrit en C++ en mode événementiel, il se démarque ainsi de certains ordonnanceurs par sa légèreté et sa rapidité. L'interface de pilotage Web est quant à elle développée en PHP. Elle permet le suivi des tâches et workflows en cours, la création de workflow notamment en mode graphique, et la planification de tâches.

En plus de l'interface de pilotage Web, evQueue propose une API réseau permettant son contrôle à distance (lancement de tâches, suivi des tâches en exécution…). L'exécution de traitements lourds est en effet une problématique récurrente des systèmes Web où les clients sont en mode asynchrone. L'utilisation d'evQueue résout cette problématique, assurant un suivi simple à mettre en place en AJAX côté utilisateur et une excellente visibilité pour les administrateurs systèmes.

Une documentation sur l'installation et l'utilisation d'evQueue, ainsi que des exemples de workflows sont disponibles sur le site d'evQueue.

EvQueue est développé et maintenu par l'équipe informatique de l'UFC-Que Choisir. Il est publié sous licence libre depuis mars 2015 (GPL 3). Il est utilisé pour les besoins informatiques de l'association depuis presque trois ans ; à ce jour, plus de quatre millions de workflows ont été lancés.

  • # ordonnancement

    Posté par . Évalué à 7. Dernière modification le 18/03/15 à 22:08.

    Merci pour cette libération qui tombe à pic!

    Je n'en peux plus de mes crontabs, et l'ordonnancement de jobs libres, c'est pas la joie.
    Je n'ai pas encore installé mais ça ne saurait tarder!

    En parcourant rapidement la doc, je constate que ça répond à mes besoins principaux:

    • enchainement de tâches dépendantes entre elles ("à la Makefile")
    • système de files d’exécution de jobs

    Pour moi il reste encore des inconnues et la doc me fait penser que je vais être déçu sur ces points (à vérifier) :

    • "reprise" des jobs en erreurs, et relance des subjobs suivants. Par exemple une machine injoignable, je rétabli le service et je relance le workflow.
    • "mise en pause", par exemple pour éviter le lancement des sauvegardes les soir de maintenance lourde, ou pour désactiver temporairement une chaine.
    • déclenchement à heure fixe ou sur évènement, typiquement sur l'arrivée d'un fichier
    • déclenchement sur calendrier un peu comme crontab (tous les jours, tous les 1er mardi du mois, toutes les heures, etc…)

    En tout cas, j'aime beaucoup l'esprit et la configuration me parait très propre et engage à essayer!
    J'espère vous faire un retour rapidement.

    • [^] # Re: ordonnancement

      Posté par . Évalué à 7.

      Bonjour,

      Ce que vous demandez est possible :

      • Concernant la reprise, vous pouvez regardez le "Retry Schedule", il permet de relancer automatiquement une tâche en erreur un certain nombre de fois et à des intervalles variables (réglables par niveaux).

      • La mise en pause des tâches est possible dans les workflow planifiés (qui sont l'équivalent des crons). Vous pouvez ainsi suspendre une tâche.

      • Le déclanchement sur calendrier est possible via les "Scheduled Workflows", vous avez une option heure fixe ou calendrier avec possibilité de sélectionner des dates multiples.

      • Le déclenchement sur événement est possible via l'API réseau. Il est également possible (et c'est ce que nous faisons) d'utiliser le retry schedule : un tâche est lancée et vérifie l'existence du fichier. Si il est absent, une erreur est retournée et le retry schedule va se charger de la relancer. Quand le fichier apparaît, la tâche s'exécute correctement et le workflow enchaine la tâche suivante qui effectue le traitement.

      • [^] # Re: ordonnancement

        Posté par . Évalué à 1.

        Ca semble intéressant.
        Pour mes jobs d'administration j'utilise crontab -e mais c'est systemd qui s'en occupe.
        Ce projet pourrait être englobé prochainement par systemd.

        Pas taper s'il vous plaît ! =>[]

      • [^] # Re: ordonnancement

        Posté par . Évalué à 3.

        Le déclenchement sur événement est possible via l'API réseau. Il est également possible (et c'est ce que nous faisons) d'utiliser le retry schedule : un tâche est lancée et vérifie l'existence du fichier. Si il est absent, une erreur est retournée et le retry schedule va se charger de la relancer. Quand le fichier apparaît, la tâche s'exécute correctement et le workflow enchaine la tâche suivante qui effectue le traitement.

        C'est un fonctionnement un peu plus compliqué. Il faut vérifier que le fichier a fini d'être écris. Pour ça la bonne méthode un peu compliqué est de vérifier que personne ne l'a ouvert, l'autre méthode plus simple mais moins robuste et de ne récolter que les fichiers qui ont un certain age.

        La solution de loin la plus pratique est de passer par inotify et netcat.

        Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • # Testé et approuvé

    Posté par . Évalué à 6.

    Bonjour,

    J'ai eu la chance de tester également evqueue et je ne peux que féliciter l'équipe pour sa publication.

    Principaux avantages:

    Simple, efficace, léger

    Web UI pour créer les workflow, les planifier et voir les historiques d'exécution.

    Lancement de tâches sur des machines distantes par ssh

    On peut régler sur chaque queue le nombre de job exécutés simultanéments.

    Pilotage par web service rest/xml.

    Stockage mysql rendant aisé le reporting et rendant possible la replication.

  • # communauté

    Posté par . Évalué à 6.

    Si les mainteneurs nous écoutent, je serais curieux de connaitre les motivations d'une publication sous licence libre d'un projet qui est visiblement un developpement interne.

    Est-ce pour créer une communauté autour du produit? Obtenir des retours?
    Est-ce simplement pour des raisons "sociales"? comme le départ du developpeur, migration vers un autre logiciel…

    Est-il prévu d'ouvrir un peu plus à la communauté, par exemple en ouvrant un GIT et un gestionnaire de ticket, voire un wiki?
    Si vous ne voulez pas assurer la maintenance vous-même, je ne citerai que Github comme exemple…

    Merci pour vos réponses.

    • [^] # Re: communauté

      Posté par . Évalué à 7.

      Il n'est pas vraiment question de créer une communauté, dont nous n'aurions pas le temps de nous occuper et en laquelle nous ne voyons à ce jour pas d'intérêt majeur.
      Obtenir des retours est toujours une bonne chose, mais ce n'est pas la raison principale de la « libération » du logiciel.
      Il ne s'agit pas non plus des raisons « sociales » que vous décrivez.

      La demande d'ouverture à la communauté étant déjà insistante alors que l'annonce ne date que d'hier, nous allons probablement mettre le projet sur github (à défaut d'une solution équivalente en libre, malheureusement).
      Nous doutons cependant que beaucoup contribueront.

      C'est justement parce que c'est un logiciel dont nous avions besoin en interne, et que nous n'avons pas trouvé d'alternative solide (comme votre premier message indiquait également), que nous avons développé evQueue.
      Maintenant qu'il est là, autant en faire profiter tout le monde… Même si ça peut paraître naïf ou idiot, c'est une notion qui est même incluse dans la GPL ! (« This program is distributed in the hope that it will be useful »)
      Énormément de logiciels libres (et surtout de grands projets) ont eu ce même cheminement.
      L'entreprise derrière le logiciel n'a rien à perdre à le publier sous licence libre, si ce n'est le temps justement de le publier.

      Espérant avoir répondu à vos questions,
      Nicolas

      • [^] # Re: communauté

        Posté par (page perso) . Évalué à 2.

        Obtenir des retours est toujours une bonne chose

        Ceci est discutable. Pas mal de personnes se sont prises des coups en montrant leur code PHP particulièrement dégueulasse. Bon, le PHP fournit contient quelques maladresses (htmlentities pour gérer du XML, sériously?) Ici, c'est principalement du C++ (enfin, surtout du C plus ou moins objet), ça réduit le nombre de râleurs possibles. Mais n'ayez point peur, je viendrais vous embêter avec ces sprintf non-vérifiés, ces ignobles allocations nues, les terrifiants héritages publics sans destructeurs virtuels, ce code sans tests, ces données en dur (mots de passe et proxy compris) et surtout cet ignoble class DB qui impose d'être clonée pour chaque requête car elle gère la désallocation du MYSQL_RES dans le destructeur.

        Plus sérieusement, pourquoi ne pas avoir utilisé MySql++ et Boost par exemple ?

        • [^] # Re: communauté

          Posté par . Évalué à 1.

          Bonjour LupusMic,

          Nous ne trouvons pas dérangeant de « se prendre des coups » en montrant le code. Après tout si les gens ne sont pas contents ils n'ont aucune obligation de lire ou d'utiliser le code.
          Et même si les remarques ne sont pas forcément formulées avec gentillesse, on peut en faire ressortir des bons conseils applicables pour améliorer le code.

          Concernant htmlentities, il n'apparaît qu'à un seul endroit, et c'est une tâche interne (qui certes n'a pas à faire partie du projet).
          Pour le C++, pouvez-vous nous envoyer une version plus détaillée des modifications proposées (sur dev at evqueue dot net) ?

          Merci d'avance

          • [^] # Re: communauté

            Posté par (page perso) . Évalué à 2.

            J'avoue que je suis un crétin qui pinaille sur des détails à la con, tel que la sécurité et la correction (correctness, pas sur que l'emploi en français soit correct) du développement :p

            J'ai commencé à essayer d'utiliser et d'améliorer le code, mais je n'y ai pas consacré beaucoup de temps. Je publierais un export Git et vous envoie le lien via courriel.

      • [^] # Re: communauté

        Posté par . Évalué à 3.

        Lorsqu'on publie des logiciels libre, on doit forcement s'attendre à des retours, des corrections ou des demandes d'évolution. C'est même le principal interêt!

        Mais c'est aussi un frein!

        Par exemple j'ai demandé plusieurs fois à ma boite de libérer notre petit logiciel de gestion de congé qui serait bien utile à d'autres PME. Mais c'est le refus de ma direction car elle craint u afflux de demande!

        Mais sur Github, c'est bien, ça laissera l'opportunité à quiconque de cloner le dépot pour le faire évoluer, libre à vous ensuite d'importer les changements!

  • # Envoi de jobs sur plusieurs machines ?

    Posté par . Évalué à 2.

    Je cherche depuis quelque temps un outil pour envoyer des jobs à intervalles réguliers sur plusieurs machines différentes (mais pas forcément toujours la même). Est-ce que cet outil sait faire ça ?

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.