Краткая версия:
Какие критерии следует использовать для оценки возможных кандидатов на сервер приложений Perl (замена mod_perl)?
Мы ищем какую-то структуру, которая позволит выполнять различные программы Perl повторно (как сервис) без затрат:
-
перезапуск Perl-интерпретатора один раз за каждое исполнение
-
загрузка/компиляция модулей Perl один раз за выполнение
(оба из которых являются преимуществами, предоставляемыми программой mod_perl)
Примечания:
-
Мы не очень заботимся о каких-либо дополнительных преимуществах, предоставляемых mod_perl, таких как глубокая интеграция с Apache.
-
Это будет чистый сервер приложений, то есть нет необходимости в каких-либо конкретных веб-функциях (это не проблема, если сервер приложений предоставляет его, просто не понадобится).
-
Мы, конечно, рассмотрим очевидные критерии (необработанная скорость, готовность к производству, активная разработка, возможность запускать на OS, о котором мы заботимся). Меня интересуют менее тривиальные и тонкие вещи, которые мы можем пожелать от такой среды/сервера.
Фон:
В $work полномочия, которые будут решаться, чтобы они захотели заменить текущую ситуацию (простые webapps разрабатываются в Embperl и развертываются через Apache/mod_perl).
Было принято решение использовать (доморощенную) систему MVC, которая будет иметь внешний интерфейс Java Spring для представления; и Контроллер будет обрабатывать внутренние запросы на услуги для каждого приложения, которые выполняют обязанности модели (не зацикливайтесь на деталях этого - это не очень важно для основного вопроса).
Один из вариантов для внутренних служб - это Perl, поэтому мы можем использовать все существующие существующие Perl IP (библиотеки, веб-серверный код), и не должны переносить 100% его на Java.
Подводя итог:
| View | Model/app | Model loaded/executed by: |
================================================================================
OLD | Empberl | Model.pm | mod_perl has Model.pm loaded, called from view.epl |
NEW | Java | Model.pm | perl generic_model.pl -model Model (does "require") |
================================================================================
Теперь те из вас, кто занимался Perl Web-разработкой какое-то время, сразу заметили самую вопиющую проблему с новым дизайном:
| Perl interpreter starts | Perl modules are loaded and compiled |
=======================================================================
OLD | Once per mod_perl thread | Once per mod_perl thread
NEW | Once per EVERY! request | Once per EVERY! request |
=======================================================================
Другими словами, в новой модели мы больше не имеем каких-либо преимуществ производительности, предоставляемых mod_perl в качестве контейнера приложений на постоянной стороне сервера.
Поэтому мы рассматриваем возможные контейнеры приложений для обслуживания одной и той же функции.
(в качестве примечания стороны, да, мы подумали о простом запуске экземпляра Apache с mod_perl как такового в контейнере приложения, что является жизнеспособной возможностью. Однако, поскольку веб-функциональность не требуется, я бы хотел увидеть, другие варианты могут соответствовать законопроекту).