Si je veux mettre un programme en production, il y a plusieurs choses que je dois faire pour que ce programme le considère comme "opérationnalisé" - c'est-à-dire qu'il est opérationnel et maintenable de manière mesurable et vérifiable par les ingénieurs et le personnel d'exploitation. À mes fins, un programme opérationnel doit:
- Être capable de se connecter à plusieurs niveaux (ex: débogage, avertissement, etc.).
- Être en mesure de collecter et de partager des mesures / statistiques sur les types de travail effectué par le programme et la durée de ce travail. Idéalement, les métriques collectées sont disponibles dans un format compatible avec les outils de surveillance couramment utilisés tels que Ganglia , ou peuvent être ainsi intégrées.
- Être configurable, idéalement via un système qui permet de mettre à jour les propriétés configurées dans les programmes en cours d'exécution sans redémarrer lesdits programmes.
- Être déployable sur des serveurs distants de manière répétable.
Dans le monde Scala, il existe de bonnes bibliothèques pour traiter au moins les trois premières exigences. Exemples:
- Logula pour la journalisation.
- Métriques ou autruche pour collecter et rapporter des métriques.
- Configgy ou Fig pour la configuration.
En ce qui concerne le déploiement, une approche adoptée dans le monde Scala est de regrouper le bytecode et les bibliothèques qui composent son programme avec quelque chose comme assembly-sbt , puis de pousser le bundle résultant (un "fat JAR") vers des serveurs distants avec un outil comme Capistrano qui exécute des commandes en parallèle sur SSH. Ce n'est pas un problème qui nécessite des outils spécifiques au langage, mais je suis curieux de savoir si un tel outil existe dans la communauté Haskell.
Il existe probablement des bibliothèques Haskell qui fournissent les caractéristiques que j'ai décrites ci-dessus. J'aimerais savoir lesquelles des bibliothèques disponibles sont considérées comme «les meilleures»; c'est-à-dire qui sont les plus matures, bien entretenues, couramment utilisées dans la communauté Haskell et exemplaires des meilleures pratiques Haskell.
S'il y a d'autres bibliothèques, outils ou pratiques pour rendre le code Haskell "prêt pour la production", j'aimerais aussi les connaître.