プログラムを運用環境に導入する場合、そのプログラムが "運用可能"であると見なすためには、そのプログラムを実行する必要があるいくつかのこと、つまり、エンジニアと運用スタッフの両方が測定可能で検証可能な方法で実行および保守できるようにします。私の目的では、運用可能なプログラムは次の要件を満たしている必要があります。
- 複数のレベルでログを記録できる(例:デバッグ、警告など)。
- プログラムが実行している作業の種類とその作業にかかっている時間に関するメトリック/統計を収集して共有できるようにします。理想的には、収集された指標は、Gangliaなどの一般的に使用されている監視ツールと互換性のある形式で使用できるか、またはそのように変更することができます。
- プログラムを再起動せずに、実行中のプログラムで構成されたプロパティを更新できるシステムを介して、理想的には構成可能にする。
- 繰り返し可能な方法でリモートサーバーに展開できる。
Scalaの世界には、少なくとも最初の3つの要件に対処するための優れたライブラリーがあります。例:
デプロイに関しては、Scalaの世界で採用されている1つのアプローチは、プログラムを構成するバイトコードとライブラリをassembly-sbtのようなものでバンドルし、結果のバンドル(「ファットJAR」)をCapistranoのようなツールでリモートサーバーにプッシュすることです。SSH経由でコマンドを並列実行します。これは言語固有のツールを必要とする問題ではありませんが、Haskellコミュニティにそのようなツールが存在するかどうか知りたいです。
おそらく、上記で説明した特性を提供するHaskellライブラリがあるでしょう。利用可能なライブラリのうち、「最良」と見なされているものを知りたいのですが。つまり、Haskellコミュニティで一般的に使用されている、最も成熟し、よく管理されている、Haskellのベストプラクティスの例です。
Haskellのコードを「本番対応」にするためのライブラリ、ツール、またはプラクティスが他にある場合は、それらについても知りたいと思います。