稚拙な負荷軽減法

負荷を減らす?

サーバはみんなの資源です。 高負荷のCGIは他の人の迷惑になります。 自分のサイトの負荷が高ければ、 なるべく負荷を下げる努力をすべきでしょう。

ここでは、負荷を下げるための方法を解説していきます。

結論

一番始めに、結論を持ってきます。

それだけでほとんどの場合は大丈夫です。 いまはPHPで作られた優れた作品が数多くあります。 一般的なCGIであればすぐに乗り換えることが可能でしょう。

しかし、セキュリティー的な理由により、 suEXECの機能が働いて欲しい事もあります。 その時はCまたはC++が一番いいです。

では、細かくそれぞれの違いを見ていきましょう。 *1

各言語の速さ

場合によるので絶対ではありませんが、 大体次のようになっています。 *2

C > C++ > Perl > Python > Ruby > PHP

あれ、PHPダメダメじゃん!と思いましたか? 確かに、そのままでは駄目なんです。 public_htmlにPHPを置くとその重さがありありとわかるでしょう。 でも、PHPはshared_htmlに置くことによって劇的に速度がアップします。 その秘密はモジュールとして組み込まれていること、これです。

CGI版とモジュール版

shared_html内でPHPを動かした場合は、 mod_phpと言うApacheモジュールを使用しています。

通常のCGIではアクセスの度にプロセスを起動し、 実行して、結果をApacheが受け取り、 それをhttpで送っています。 このプロセス起動というのがくせ者です。 プロセス起動はかなりの負荷がかかっています。 軽いCGIであれば、 実際の処理よりもプロセス起動の負荷の方が遥かに大きいのです。 しかも、PerlやRubyなどのスクリプト言語では、 インタプリタを起動しなくてはなりません。 これもそれ自体で大きな負荷になってしまいます。 インタプリタが起動し、スクリプトを解釈し、実行する。 でも、もしインタプリタが常に起動していたとしたらどうでしょうか? 一つのプロセスで複数のスクリプトをどんどん実行できたら、 それだけでかなりの負荷が削減されます。

モジュール版ではインタプリタのプロセスが常駐し、 このプロセスでそれぞれのスクリプト実行します。 よってプロセス起動の負荷分を除くことが出来、 軽快に動くことが出来るのです。

また、CやC++で作った直接実行可能なバイナリであっても、 このプロセス起動は避けられません。

このように、一つのプロセスで全てをこなすことによって、 無駄な処理を省き、軽快な動作を可能になります。 だから、shared_htmlでPHPを置くことによって、 mod_phpを活用するのがいいのです。

同じようにmod_perlやmod_rubyもありますが、 残念ながらXREAでは使用できません。

戯れ言

私は主にRubyという比較的重い言語を使っています。 そもそも、XREAにサイトを開こうと思った理由はRubyが使えるからでした。 しかし、Rubyはあまり胸を張って使える物ではありません。 どうしても負荷が高いからです。 もしmod_rubyが使えたのであれば、私も大手を振って道を歩けるのですが、 残念ながらセキュリティー上の理由により採用されていません。

ならば、Rubyを使うなと言うのか? 私はいつもそう言われるのでないかという不安に駆られています。 こんな文章を書きながら、自分はそんな負荷の高い物を使っているではないか? そう言われれば、私は何も言えないでしょう。 でも、私は逆に聞きたいのです。 あなたはそのCGIを置く理由はなんですか?と。 ただ掲示板を設置したいから、 ただカウンターを付けたいからと言う理由ならば、 私はRubyで出来たカウンターや掲示板など設置しようとは思いません。 私は自分が作った物をどうにか置いてみたかったのです。 それがRubyだった。ただそれだけなのです。

私を蔑視してもいいでしょう。 罵ってもいいでしょう。 おまえは綺麗事を言っているが、 実際やっていることは違うと。 ただ、私は自分のサイトの負荷が高まったとき、 上のことを実行すると思います。

いや、その時には、是が非でも、 xrea側にmod_rubyの導入をせがむかも知れません…。



*1public_htmlでのmode_fastcgiはrootのみしか使えないようです。
*2The Great Computer Language Shootoutを参考に独断と偏見で書いています。