Mitogen : une bibliothèque Python pour l'écriture de programmes distribués à réplication automatique
qui permet aux programmes d'établir des doublons chargés sur des hôtes distants

Mitogen est une bibliothèque Python pour écrire des programmes distribués à réplication automatique développé par David Wilson. Il permet aux programmes d'établir des doublons chargés paresseusement sur des hôtes distants, sans nécessiter d'écriture préalable sur disque distant, et de communiquer avec ces copies une fois qu'elles existent. Les copies peuvent être ensuite fractionnées récursivement pour produire d'autres enfants, avec un routage bidirectionnel des messages entre chaque copie traitée automatiquement.

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.

Nom : z1.png
Affichages : 18061
Taille : 33,2 Ko

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 ?

Que pensez-vous de Mitogen ?

Voir aussi

Microsoft a intégré Python 3.7 par défaut dans la MàJ Windows 10 mai 2019 de son système d'exploitation

Python Software Foundation annonce qu'elle mettra fin au support de Python 2 à partir du 1er janvier 2020 et prévient qu'elle n'apportera plus son aide pour tout problème rencontré après cette date

Athena de JPMorgan a 35 millions de lignes de code Python et ne sera pas mis à jour vers Python 3 à temps, selon eFinancialCareers

Meilleurs langages en 2019 selon l'IEEE : Python leader pour la troisième année consécutive, il s'impose dans tous les domaines dans lesquels il est utilisé, du développement web à l'embarqué