ショートバージョン:
Perl「アプリ サーバー」(mod_perl の代替) の候補を評価するには、どのような基準を使用すればよいですか?
以下のコストをかけずに、さまざまな Perl プログラムを (サービスとして) 繰り返し実行できるフレームワークを探しています。
実行ごとに1回perlインタープリターを再起動する
実行ごとに 1 回の Perl モジュールのロード/コンパイル
(どちらも mod_perl を実行することで得られる利点です)
ノート:
Apache の深い統合など、mod_perl によってもたらされる追加の利点についてはあまり気にしません。
これは純粋なアプリ サーバーになります。つまり、Web 固有の機能は必要ありません (アプリ サーバーが提供する場合は問題ありませんが、必要ないだけです)。
もちろん、明白な基準 (生の速度、本番環境に対応した安定性、積極的な開発、関心のある OS で実行できる能力) を考慮します。私が興味を持っているのは、そのようなフレームワーク/サーバーから望むかもしれない、より些細で微妙なことです。
バックグラウンド:
$work では、現在の状況を置き換えたいと判断された権限 (Emperl で開発され、Apache/mod_perl を介してデプロイされた単純な Web アプリケーション)。
View 用の Java Spring フロント エンドを持つ (自家製の) MVC システムを使用することが決定されました。コントローラーは、バックエンド サービス リクエストを、モデルの役割を実行するアプリごとのサービスに解析します (これについての詳細にこだわらないでください。主な質問とはあまり関係ありません)。
バックエンド サービスのオプションの 1 つは 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 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 が永続的なサーバー側アプリ コンテナーとして提供するパフォーマンス上の利点はなくなりました!!!
したがって、同じ機能を提供する可能性のあるアプリ コンテナーを検討しています。
(余談ですが、実行可能な可能性として、mod_perl を使用して Apache のインスタンスを単純に実行することを考えました。ただし、Web 機能は必要ないため、他のオプションがあるかどうかを確認したいと思います。法案に適合します)。