Si voy a poner un programa en producción, hay varias cosas que necesito que el programa haga para considerarlo "operacionalizado", es decir, en ejecución y mantenible de manera medible y verificable tanto por ingenieros como por personal de operaciones. Para mis propósitos, un programa operativo debe:
- Ser capaz de iniciar sesión en varios niveles (p. Ej., Depuración, advertencia, etc.).
- Ser capaz de recopilar y compartir métricas / estadísticas sobre los tipos de trabajo que realiza el programa y cuánto tiempo lleva ese trabajo. Idealmente, las métricas recopiladas están disponibles en un formato que es compatible con las herramientas de monitoreo de uso común, como Ganglia , o pueden ser modificadas.
- Ser configurables, idealmente a través de un sistema que permita actualizar las propiedades configuradas en los programas en ejecución sin reiniciar dichos programas.
- Se puede implementar en servidores remotos de forma repetible.
En el mundo de Scala, existen buenas bibliotecas para hacer frente al menos a los tres primeros requisitos. Ejemplos:
- Logula para la tala.
- Métricas o avestruz para recopilar y reportar métricas.
- Configgy o Fig para la configuración.
En cuanto a la implementación, un enfoque adoptado en el mundo de Scala es agrupar el código de bytes y las bibliotecas que componen el programa de uno con algo como assembly-sbt , luego enviar el paquete resultante (un "JAR gordo") a servidores remotos con una herramienta como Capistrano que ejecuta comandos en paralelo a través de SSH. Este no es un problema que necesite herramientas específicas del idioma, pero tengo curiosidad por saber si tal herramienta existe en la comunidad de Haskell.
Probablemente existen bibliotecas de Haskell que proporcionan los rasgos que describí anteriormente. Me gustaría saber cuáles de las bibliotecas disponibles se consideran "mejores"; es decir, cuáles son los más maduros, bien mantenidos, de uso común en la comunidad de Haskell y ejemplares de las mejores prácticas de Haskell.
Si hay otras bibliotecas, herramientas o prácticas para hacer que el código Haskell esté "listo para producción", me encantaría conocerlas también.