Какие критерии мне следует использовать для оценки сервера приложений Perl (замена mod_perl)?

Краткая версия:

Какие критерии следует использовать для оценки возможных кандидатов на роль «сервера приложений» Perl (замена mod_perl)?

Мы ищем некий фреймворк, который позволит многократно выполнять различные программы Perl (как услугу) без затрат на:

  1. повторный запуск интерпретатора perl один раз за каждое выполнение

  2. загрузка / компиляция модулей Perl один раз за выполнение

(оба из которых являются преимуществами запуска mod_perl)

Примечания:

  • Мы НЕ слишком заботимся о каких-либо дополнительных преимуществах, предоставляемых mod_perl, таких как глубокая интеграция с Apache.

  • Это будет чистый сервер приложений, что означает, что нет необходимости в каких-либо специфических веб-функциях (это не проблема, если сервер приложений предоставляет их, просто не понадобится).

  • Мы, конечно же, рассмотрим очевидные критерии (чистая скорость, готовая к работе стабильность, активная разработка, возможность работать на ОС, которые нам небезразличны). Меня интересуют менее тривиальные и тонкие вещи, которые мы могли бы пожелать от такого фреймворка / сервера.

Справочная информация:

В $ work власти, которые решили, что они хотят заменить текущую ситуацию (простые веб-приложения, разрабатываемые на Embperl и развертываемые через Apache / mod_perl).

Было принято решение использовать (домашнюю) систему MVC, которая будет иметь интерфейс Java Spring для View; и Контроллер будет анализировать запросы серверных сервисов к сервисам для каждого приложения, которые выполняют обязанности Модели (не зацикливайтесь на деталях этого - это не очень актуально для основного вопроса).

Одним из вариантов внутренних сервисов является Perl, так что мы можем использовать весь наш существующий Perl IP (библиотеки, внутренний код webapp) в будущем и не портировать 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, сразу заметят самую вопиющую проблему с новым дизайном:

    | 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 в качестве такого контейнера приложения, как жизнеспособную возможность. Однако, поскольку веб-функциональность не требуется, я хотел бы посмотреть, могут ли какие-либо другие параметры соответствуют всем требованиям).


person DVK    schedule 07.06.2013    source источник
comment
Какой протокол будет использоваться, чтобы части java и perl взаимодействовали друг с другом?   -  person innaM    schedule 07.06.2013
comment
Но разве вы не можете сохранить параллелизм одного запуска, просто продолжая запускать службы в apache mod_perl среде (или PSGI) и разговаривая со всеми ими из своей новой штуки Java Swing? Это слишком медленно? По крайней мере, тогда интерпретатор perl работает, ждет и готов.   -  person G. Cito    schedule 07.06.2013
comment
Извините, я имел в виду, что мой предыдущий комментарий был дополнительным вопросом / ответом относительно вашей дополнительной заметки. Вы тестировали этот mod_perl подход к контейнеру приложений? Похоже, что www.apache.org запускается или запускается Qpsmtpd, чтобы помочь таким образом обрабатывать доставку своих списков рассылки (т.е. встроен как SMTP-сервис в экземпляр apache mod_perl). Итак, apache и mod_perl ... они не только для Интернета :-)   -  person G. Cito    schedule 07.06.2013
comment
@innaM - протокол не очень актуален (например, гибкий). Текущий дизайн без сервера приложений был просто интерфейсом командной строки, передавая эквивалент строки запроса на STDIN и выдавая ответы JSON на STDOUT.   -  person DVK    schedule 07.06.2013
comment
@ G.Cito - Да, mod_perl - одна из возможных замен. Однако нам нужно посмотреть, существуют ли лучшие альтернативы.   -  person DVK    schedule 07.06.2013
comment
Потенциальный кандидат на вики-сайт сообщества?   -  person G. Cito    schedule 29.11.2014


Ответы (3)


Starman - это высокопроизводительный веб-сервер PSGI / Plack для предварительной установки, который можно использовать в этом контексте. Легко создать приложение REST, которое обслуживает объекты JSON без сохранения состояния (это простой вариант использования).

Starman - это готовый к работе сервер, и очень легко установить набор экземпляров Starman за обратным прокси-сервером (этот вопрос SO может вам помочь), для масштабирования

person Miguel Prz    schedule 07.06.2013

Думаю, вы уже определили, что вам нужно знать и что тестировать: время выполнения по сравнению с памятью. Вам также необходимо оценить гибкость и простоту развертывания, которые вы получаете с mod_perl, и большой выигрыш от сохранения полезности программного обеспечения, которое вы уже разработали (и накопленный опыт ваших сотрудников). Помните, что вы можете легко разделить службы по ЦП и машинам, если ваш новый интерфейс будет взаимодействовать с вашими приложениями внутри вашей собственной сети. Многое зависит от того, насколько «веб» вы можете сделать свои сервисы и можно ли их эффективно «демонизировать». Конечно, существует множество способов взаимодействия веб-интерфейсов с другими сервисами, и perl может обрабатывать почти все из них ... TIMTOWTDI.

Поскольку вы упоминаете "tuits" (т.е. "manpower") как ограничение, возможно, лучшим подходом в краткосрочной перспективе является создание отдельного экземпляра apache - mod_perl в качестве "контейнера приложения" и запуск вашего приложения таким образом (так как они уже хорошо работают, это правильно?). В конце концов, apachemod_perl) хорошо известны, протестированы в боевых условиях и в высшей степени настраиваемы и конфигурируемы. Варианты развертывания довольно гибкие (одна и та же машина, разные машины, переключение при отказе, балансировка нагрузки, облако, локальные, виртуальные машины), и они также были хорошо протестированы.

После того, как вы запустите это, вы можете начать экспериментировать с различными подходами с «малой потребностью в рабочей силе», чтобы волшебным образом демонизировать ваши приложения и службы без apache. Plack и Starman, Mojolicious:: - это еще одна структура, способная работать с веб-сокетами JSON и т. Д. (И Plack). Они тоже были хорошо протестированы, но, возможно, менее знакомы, чем mod_perl и Apache. Тем не менее, если вы работаете в магазине Perl, у вас не должно возникнуть проблем с работой с этими «современными» инструментами. Однажды, если у вас действительно окажется больше ресурсов, вы сможете создать сложную сетевую платформу для всех ваших служб на основе Perl и использовать все классные «новые» (или, по крайней мере, новее, чем mod_perl) вещи на CPAN, например _ 13_, Plack и т. д. Вы можете получить массу удовольствия от разработки интересных вещей, решая свои бизнес-задачи.

Чтобы прояснить мой предыдущий комментарий: Ubic (см. Ubic в MetaCPAN) может демонизировать (и, таким образом, прекомпилировать) ваши perl инструменты и предлагает некоторые средства мониторинга и управления, которые предоставляются бесплатно вместе с фреймворком. Доступен один модуль Ubic, предназначенный для использования с Plack, который называется Ubic::Service::Plack. Сам по себе Ubic не обеспечивает простое решение для вашего нового приложения Java / Swing для взаимодействия с вашими Perl-приложениями, но он может помочь в управлении / мониторинге любого решения, которое вы придумаете.

Удачи и приятного времяпровождения!

person G. Cito    schedule 07.06.2013
comment
если их можно эффективно демонизировать. - они не могут (причины не технические, а потребность в людях для написания и тестирования демонов), иначе нам бы не понадобился сервер приложений, очевидно :) - person DVK; 07.06.2013
comment
Обратите внимание, что с помощью Ubic вы можете демонизировать практически все что угодно (как и с runit, daemontools, s6, и т.д). Я отредактирую свой ответ, чтобы прояснить это. Может помочь небольшое исследование, сравнивающее скорость отклика Perl-скрипта, запущенного в качестве демона под Ubic, с запуском по запросу или под mod_perl. Но чтобы сделать это полезным, нам нужно знать, как вы планируете, чтобы веб-служба и серверная часть взаимодействовали друг с другом. Как отмечает @Miguel, для этого было бы довольно просто использовать JSON. - person G. Cito; 07.06.2013

Вы можете создать простой демон, используя HTTP :: Daemon, и получить все необходимые преимущества компиляции части вашего кода позже (require) или заранее, до запуска демона.

person maxim4d    schedule 11.06.2013