Конечно, я надеялся все переписать все на Java/Groovy, однако вовремя остановился - это оказалось слишком дорого и больно. В итоге мы остановились на Perl и это позволило:
- Постепенно переписывать работающий код по частям и повторно использовать некоторый унаследованный код после минимального рефакторинга
- Не переучивать коллег - разве что более осознанно подойти к coding conventions
Значительная часть как старого, так и нового кода в итоге оказалась внутри модулей, написанных в процедурном стиле и пригодных к использованию в качестве автономных утилит:
#!/usr/bin/perl package MyModule; sub calculate { ... } calculate(@ARGV) unless caller();
Но чаще модули не запускаются вручную сменным инженером или кроном, а собираются в более крупные единицы:
- Юниксовые демоны, написанные с использованием Proc::Daemon (Net::Daemon оказался слишком умным) и запускаемые инит-скриптом в стиле SysV (никаких новомодных systemd)
- Web-приложения, использующие PSGI согласно последней моде
- Опираясь исключительно на спецификацию - в этом случае разбор URL, параметров и заголовков, возвращение требуемого Content-Type, шаблонизация и многое другое становятся проблемами самого разработчика
- Используя Plack - эталонную реализацию спецификации, которая предлагает стандартизованный способ декомпозиции приложений (в т.ч. выделения Middleware и специального DSL для настройки и склеивания разных приложений в одно), также обросла кучей разных полезных плагинов
- Используя один из полноценных web-фреймворков, хотя на самом деле их, похоже, всего лишь 2 - Dancer и Mojolicious
Сейчас весь старый код работает на последнем оставшемся сервере с Slakware 12.2.0 (который поначалу было едва справлялся с нагрузкой а сейчас почти отдыхает) и потихоньку переползает на новые сервера с ALT Linux. В последнем пришлось обновить Mojolicious, Plack и Starman, который используется в качестве самостоятельного web-сервера без всяких фронтендов типа nginx и тем более apache. Я также опакетил evpsgi и начал было перепиливать сборку uwsgi, однако быстро потерял к ним интерес - поэтому до репозитария они не добрались.