Если я собираюсь ввести программу в производство, мне нужно, чтобы эта программа была "введена в действие", то есть выполнялась и поддерживалась поддающимся измерению и проверке способом как инженерами, так и операционный персонал. Для моих целей операционная программа должна:
- Возможность входа на несколько уровней (например: отладка, предупреждение и т.д.).
- Уметь собирать и делиться метриками/статистикой о типах работы, выполняемой программой, и о том, как долго эта работа выполняется. В идеале, собранные показатели доступны в формате, который совместим с обычно используемыми инструментами мониторинга, такими как Ganglia, или может быть настолько запутан.
- Конфигурируемая конфигурация, в идеале, через систему, которая позволяет обновлять настроенные свойства в запущенных программах без перезапуска указанных программ.
- Возможность развертывания на удаленных серверах повторяющимся способом.
В мире Scala есть хорошие библиотеки для решения, по крайней мере, первых трех требований. Примеры:
- Logula для ведения журнала.
- Metrics или Ostrich для сбора и показатели отчетности.
- Configgy или Fig для конфигурации.
Для развертывания один подход, принятый в мире Scala, заключается в объединении байт-кода и библиотек, которые содержат одну программу с чем-то вроде assembly-sbt, затем нажимаем полученный пакет ( "толстый JAR" ) на удаленные серверы с помощью инструмента, такого как Capistrano, который выполняет параллельные команды над SSH. Это не проблема, которая требует языковых инструментов, но мне любопытно, существует ли такой инструмент в сообществе Haskell.
Есть, вероятно, библиотеки Haskell, которые предоставляют черты, описанные выше. Я хотел бы знать, какая из доступных библиотек считается "лучшей"; то есть, которые являются наиболее зрелыми, ухоженными, обычно используемыми в сообществе Haskell, и являются образцовыми примерами лучших практик Haskell.
Если есть какие-либо другие библиотеки, инструменты или методы, которые делают код Haskell "готовым к производству", мне бы тоже хотелось узнать об этом.