Jeśli mam zamiar wprowadzić program do produkcji, jest kilka rzeczy, które muszę zrobić, aby program mógł zostać uznany za „zoperacjonalizowany” - to znaczy działający i możliwy do utrzymania w sposób mierzalny i weryfikowalny zarówno przez inżynierów, jak i personel operacyjny. Dla moich celów zoperacjonalizowany program musi:
- Móc logować się na wielu poziomach (np. Debugowanie, ostrzeżenia itp.).
- Umiejętność gromadzenia i udostępniania metryk / statystyk dotyczących rodzajów pracy wykonywanej przez program i czasu jej trwania. Idealnie byłoby, gdyby zebrane metryki były dostępne w formacie zgodnym z powszechnie używanymi narzędziami do monitorowania, takimi jak Ganglia , lub można je w ten sposób zmienić.
- Być konfigurowalne, najlepiej za pośrednictwem systemu, który umożliwia aktualizację skonfigurowanych właściwości w uruchomionych programach bez ponownego uruchamiania programów.
- Możliwość wdrożenia na zdalnych serwerach w powtarzalny sposób.
W świecie Scala istnieją dobre biblioteki, które radzą sobie z co najmniej trzema pierwszymi wymaganiami. Przykłady:
- Logula do logowania.
- Metrics lub Struś do zbierania i raportowania metryk.
- Configgy lub Rys. Do konfiguracji.
Jeśli chodzi o wdrażanie, jednym podejściem przyjętym w świecie Scala jest połączenie kodu bajtowego i bibliotek, które składają się na program z czymś w rodzaju assemblera-sbt , a następnie wysłanie powstałego pakietu („grubego JAR”) na zdalne serwery za pomocą narzędzia takiego jak Capistrano który wykonuje polecenia równolegle przez SSH. Nie jest to problem, który wymaga narzędzi specyficznych dla języka, ale jestem ciekawy, czy takie narzędzie istnieje w społeczności Haskell.
Prawdopodobnie istnieją biblioteki Haskell, które zapewniają cechy, które opisałem powyżej. Chciałbym wiedzieć, które z dostępnych bibliotek są uważane za „najlepsze”; to znaczy, które są najbardziej dojrzałe, dobrze utrzymane, powszechnie stosowane w społeczności Haskell i stanowią przykład najlepszych praktyk Haskell.
Jeśli istnieją inne biblioteki, narzędzia lub praktyki związane z przygotowywaniem kodu Haskell do produkcji, chciałbym również o nich wiedzieć.