Google Similar の backend を FastCGI 化
Google Similar と Amazon Search はフロント部分は、ひたすらキャッシュを返す超軽量の perl-cgi を mod_perl で動作しているのですが、新規リクエストに対するの検索+キャッシュ生成を担当する backend process は激重の perl として動作しています。
何故こんな構成になっているかというと、プロセス数管理を mod_perl 上で実装する方法を知らないのと、実際の検索部分の処理速度を犠牲にしてでも、検索済みの結果を静的 html 並に処理して大量のリクエストを処理可能とするための工夫(mod_perl のメモリ使用量を減らして最大プロセス数をあげる)なわけです。
本当は、Athlon 64 X2 とかをサクッと購入できればプログラムをチマチマ改善する必要はないのですが、貧乏暇無しって感じでして仕方なく更なる高速化を検討してみた結果、backend 部分に FastCGI を導入して高速化+プロセス数管理を実装しようと考えた次第です。
FastCGI は mod_perl と同じような考えで、メモリに常駐することで高速化を図ろうとする仕組みのひとつですが、どちらかといえば、SpeedyCGI に近い考え方ですが、httpd.conf とかで起動プロセス数が管理できるのが良いですね。
Fast CGI を利用するための CGI インターフェースとして CGI::Fast ってのが用意されていますので、その仕様に従って Google Similar の backend を書き換えてサーバプロセスとして動作させてみました。
当分動かしてみて問題がないようであれば、より重い処理をしている Amazon Search の backend も FastCGI 化してサーバプロセスとして動作させてみようと思います。
ちなみに、FastCGI も Intel Compiler でコンパイルして高速なバイナリで動作するようにしました。
コメントやシェアをお願いします!