
Mitogen est une bibliothèque permettant d’écrire des programmes distribués qui ne nécessitent aucun déploiement, spécialement conçue pour répondre aux besoins des logiciels d'infrastructure comme Ansible. Sans configuration préalable, il prend en charge toute machine UNIX disposant d'un interpréteur Python installé, c'est-à-dire la quasi-totalité d'entre eux. Il n'est pas nécessaire d'installer des paquets, de copier des fichiers, d'écrire des extraits de Shell, de configurer l'interface ou de fournir un lien secondaire vers une machine distante.
Son auteur indique qu’il ne s’agit pas d’un framework RPC générique. L'objectif est de fournir une API de bas niveau robuste et efficace sur laquelle des outils tels que Salt, Ansible ou Fabric peuvent être construits, et bien que l'API soit assez conviviale et comparable à Fabric, elle n'est en définitive pas destinée à être utilisée directement par les logiciels grand public. Selon la documentation de l’outil, le but est de centraliser et de perfectionner la danse complexe nécessaire pour exécuter du code Python de manière sûre et efficace sur une machine distante.
Cela est fait en évitant les fichiers temporaires ou les gros morceaux de scripts Shell qui sont sujets aux erreurs, mais également en supportant les techniques d'escalade de privilèges communs comme sudo, éventuellement en combinaison avec certaines méthodes de connexion exotiques comme WMI, Telnet ou console sur IPMI. Mitogen est compatible avec Python 2.4 sorti en novembre 2004, ce qui le rend adapté à la gestion d'une flotte de matériel d'entreprise potentiellement ancienne telle que Red Hat Enterprise Linux 5, sorti en 2007.
Mitogen ne nécessite aucune dépendance. Il est entièrement implémenté en utilisant les fonctionnalités de la bibliothèque standard et les interfaces qui étaient disponibles dans Python 2.4. Voici quelques caractéristiques de Mitogen :
Bootstrap automatique
La caractéristique principale de Mitogen est de permettre à votre programme Python de démarrer et de communiquer avec de nouvelles copies de lui-même sous son contrôle s'exécutant sur des machines distantes, en utilisant uniquement un interpréteur Python et un client SSH déjà installés, ce que l'on trouve par défaut sur presque toutes les machines modernes dans la nature. Pour réaliser le bootstrap, Mitogen utilise une seule ligne de commande SSH de 400 octets et 8 Ko de son propre code source envoyé à stdin de la connexion SSH distante.
Multiplexeur IO
Le bootstrap inclut un multiplexeur d'E/S compact (comme Twisted ou asyncio) qui lui permet de travailler en arrière-plan tout en exécutant le code de votre programme. Par exemple, le contexte distant peut être utilisé pour se connecter à un nouvel utilisateur sur la machine distante en utilisant sudo, ou comme intermédiaire pour étendre le domaine de contrôle du programme à d'autres machines, permettant à votre programme de manipuler des machines derrière un pare-feu, ou permettant à son plan de données de s'adapter à votre topologie réseau. Le multiplexeur s'assure également que le processus à distance est terminé si votre programme Python plante, si la communication est perdue ou si le code de l'application exécuté dans le contexte est suspendu.
Blocage de code convivial
Dans chaque processus, un thread privé exécute le multiplexeur d'E/S, laissant le thread principal et tous les threads d'application supplémentaires libres pour effectuer un travail utile. Bien que Mitogen soit asynchrone en interne, il cache cette asynchronie au code du consommateur. Ceci est dû au fait que l'écriture de code asynchrone est principalement un concept étranger à l'application cible de la gestion de l'infrastructure. Il devrait être possible de réécrire un script Shell en Python sans une restructuration significative, ou sans des exploits de compréhension ahurissants pour comprendre le flux de contrôle.
Dispersion/rassemblement d'appels
Les fonctions peuvent être invoquées de manière asynchrone et les résultats peuvent être retournés dès qu'ils sont disponibles.
Programmes à fichier unique
Les programmes qui sont autonomes dans un seul script Python sont supportés. Les contextes externes sont configurés de telle sorte que toute tentative d'exécution d'une fonction à partir du script Python principal entraînera correctement l'importation de ce script comme d'habitude dans le processus esclave (slave process).
En outre, Mitogen présente d’autres caractéristiques comme un module transporteur (module forwarder), le routage des messages, etc. Selon sa documentation, il accélère énormément l'exécution du playbook Ansible sur des hôtes distants, tout en réduisant la bande passante et la mémoire. Un playbook non modifié s'exécute 7 fois plus rapidement et consomme 50 fois moins de bande passante. La version 0.2.9 de l’outil a été publiée en début du mois. Cette version contient les modifications minimales requises pour Ansible 2.9.
Sources : Mitogen, GitHub
Et vous ?

Voir aussi




Vous avez lu gratuitement 463 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.