Якщо я збираюся вкласти програму у виробництво, мені потрібно зробити декілька речей, щоб вважати її "функціоналізованою" - тобто працює та ремонтується вимірюваним і перевіреним способом як інженерами, так і оперативним персоналом. Для моїх цілей операціоналізована програма повинна:
- Вміти входити на кілька рівнів (наприклад: налагодження, попередження тощо).
- Вміти збирати та обмінюватися показниками / статистичними даними про типи роботи, яку проводить програма і скільки часу ця робота займає. В ідеалі зібрані показники доступні у форматі, сумісному з широко використовуваними засобами моніторингу, такими як Ganglia , або можуть бути настільки розробленими.
- Будьте налаштовані, в ідеалі через систему, яка дозволяє оновлювати налаштовані властивості запущених програм без перезапуску зазначених програм.
- Будьте доступними для віддалених серверів повторно.
У світі Scala є хороші бібліотеки для вирішення хоча б перших трьох вимог. Приклади:
- Логула для лісозаготівлі.
- Метрики або страус для збору та повідомлення звітів.
- Конфігурація або Рис для конфігурації.
Що стосується розгортання, то один із підходів у світі Scala полягає в тому, щоб поєднати байт-код і бібліотеки, що містять свою програму чимось на зразок Assembly-sbt , а потім підштовхнути отриманий пакет ("жирний JAR") до віддалених серверів за допомогою інструменту типу Capistrano що паралельно виконує команди над SSH. Це не проблема, яка потребує конкретних мовних інструментів, але мені цікаво, чи існує такий інструмент у спільноті Haskell.
Напевно, є бібліотеки Haskell, які надають ознаки, які я описав вище. Я хотів би знати, яка з доступних бібліотек вважається «найкращою»; тобто найбільш зрілі, доглянуті, зазвичай використовуються в громаді Haskell, і є зразком найкращих практик Haskell.
Якщо є якісь інші бібліотеки, інструменти чи практики щодо створення коду Haskell "готовим до виробництва", я також хотів би знати про них.