エンジニアブログ

エンジニアブログ
Perl

オープンソースカンファレンス2011 Hokkaido に参加してきました

kaeru1.jpg 谷内 2011年06月14日

谷内@帯広です。

先週の土曜日、札幌でオープンソースカンファレンスが開催されました。
私も Hokkaido.pm という perl 言語の団体の一員として参加し、セミナー講師を務めてきました。

WEB越しにガンガン実行される重たいタスクを、高速に処理し、かつリソースを食い潰されないようにするにはどのようなアーキテクチャにすればよいのかというテーマでお話してきました。
つまり、本来バッチ処理で実行されるべき重いタスクを、リアルタイム処理するには?という内容です。

今回は perl と非同期WEBサーバーを組合せた設計と実装を紹介しました。
・perl
・非同期WEBサーバー (PSGI/Plack + Twiggy)
・非同期WEBアプリケーションフレームワーク(Tatsumaki)
・ジョブキューサーバ(gearman)
・非同期IO(AnyEvent、AnyEvent::Gearman、WebService::Async、AnyEvent::FlashSocketPolicy)
・ストリーミング(Flash/XMLSocket、JavaScript/long-polling、multipart/mixed)

サーバーについてはソースレベルで内部の挙動を追い、ジョブキューに関してはプロトコルを理解して nc コマンドで直に叩いてみるなど、デモを交えて説明しました。また、単純な prefork/cgiのデモも行い、同期方式の何が問題になるのかを理解できるように努めました。

DBの非同期接続やAIOも以前は仕事で使っていたので、いずれは取り上げてみたいと思います。

最後に例として架空のWEBサービスの要件を定義し、その実装例を解説したのですが、バッチ処理がインタラクティブな操作で起動してしまうという実例が身近にありました。MovableType ですね。
MovableTypeをFastCGI起動させると、1プロセスあたり70メガ近くメモリを消費します。また、再構築ではたくさんのCPUリソースを、長時間に渡って消費し続けます。
プロセス数が増えず、バッチを分散処理できる非同期アーキテクチャをうまく利用すれば、大きな恩恵を受けることができるはずなのですが、現在のMTの設計上、非同期に対応させるのはどうやら非常に困難なようです。

しかし再構築を速くしたいという要望が強い中、メニーコアのCPUやクラウドを持っていても活かせないというのは、とてももったいない話ですので、近い将来チャレンジしてみたいと思います。