Se vou colocar um programa em produção, há várias coisas que preciso que esse programa faça para considerá-lo "operacionalizado" - ou seja, executando e podendo ser mantido de forma mensurável e verificável por engenheiros e equipe de operações. Para meus propósitos, um programa operacionalizado deve:
- Ser capaz de fazer logon em vários níveis (ex: depuração, aviso, etc.).
- Ser capaz de coletar e compartilhar métricas / estatísticas sobre os tipos de trabalho que o programa está fazendo e quanto tempo esse trabalho está demorando. Idealmente, as métricas coletadas estão disponíveis em um formato compatível com ferramentas de monitoramento comumente usadas, como Ganglia , ou podem ser modificadas.
- Ser configurável, de preferência através de um sistema que permite que as propriedades configuradas nos programas em execução sejam atualizadas sem reiniciar os referidos programas.
- Pode ser implantado em servidores remotos de maneira repetível.
No mundo Scala, existem boas bibliotecas para lidar com pelo menos os três primeiros requisitos. Exemplos:
- Logula para registro.
- Métricas ou avestruz para coletar e relatar métricas.
- Configgy ou Fig para configuração.
Quanto à implantação, uma abordagem adotada no mundo Scala é agrupar o bytecode e as bibliotecas que compõem o programa com algo como assembly-sbt e , em seguida, enviar o pacote resultante (um "JAR gordo") para servidores remotos com uma ferramenta como Capistrano que executa comandos em paralelo sobre SSH. Este não é um problema que necessite de ferramentas específicas de um idioma, mas estou curioso para saber se essa ferramenta existe na comunidade Haskell.
Provavelmente, existem bibliotecas Haskell que fornecem as características que descrevi acima. Gostaria de saber quais das bibliotecas disponíveis são consideradas "melhores"; isto é, que são mais maduros, bem mantidos, comumente usados na comunidade Haskell e exemplares das melhores práticas de Haskell.
Se houver quaisquer outras bibliotecas, ferramentas ou práticas em torno de tornar o código Haskell "pronto para produção", eu adoraria saber sobre elas também.