ホーム規範知の欺瞞運営のヒント推奨文献最近のおすすめ掲示板

ウェブ掲示板の負荷軽減について

黒木 玄

2001年8月30日更新 (2001年8月26日作成)

関連のページ:ブックマークとリンクの両方に便利なやり方


現状の分析

このサイトの「黒木のなんでも掲示板」関係のアクセスの様子についてまとめておく。

まず、アクセスの大部分は更新中の掲示板ファイル (/~kuroki/keijiban/a.html) および過去ログ /~kuroki/keijiban/a[0-9][0-9][0-9][0-9].html である。他のアクセスは、 CGI を叩きまくる迷惑な自動巡回ソフトによるアクセスを除けば、オーダー的に非常に少ない:

/~kuroki/keijiban/a.html へのアクセス:ファイルの転送が行なわれるようなアクセス (response code が 200) は週に 5000 回程度であり、ファイルの更新時刻だけをチェックして実際にはファイルの転送が行なわれないようなアクセス (response code が 304) は 2500 回程度である。

/~kuroki/keijiban/a[0-9][0-9][0-9][0-9].html へのアクセス:ファイルの転送が行なわれるようなアクセス (response code が 200) は週に 3500 回程度であり、ファイルの更新時刻だけをチェックして実際にはファイルの転送が行なわれないようなアクセス (response code が 304) は 500 回程度である。

CGI を叩きまくる迷惑な自動巡回ソフトによるアクセスは週に数百から数千回と週ごとにかなりばらつきがある。 CGI の起動はサーバーの負荷をかなり高めるので大迷惑である。

他の掲示板と共有している BBS.cgi へのアクセスは CGI を叩きまくる迷惑な自動巡回ソフトによるアクセスを除けば週に 100 から 200 回程度である。

以上の分析によって、掲示板システムの負荷を減らすためには、掲示板を読むためのアクセス (現在更新中の掲示板ファイルと過去ログへのアクセス) と CGI を叩きまくる迷惑な自動巡回ソフトのアクセスの二つを問題にすれば良い。


掲示板を読むためのアクセス

このサイトの掲示板システムは以下のような仕様になっている:

特にこのサイトの掲示板システムは掲示板を読むためのアクセスのために CGI を起動する必要がない設計になっている。そのため、読むためのアクセスがサーバーの CPU にかける負担は小さい。

そして、ファイルの更新時刻だけをチェックして実際にはファイルの転送が行なわれないようなアクセスが全体の4分の1程度ある。

だから、読むためだけに CGI を起動しなければならず、その結果がキャッシュされないタイプの掲示板システムに比べると、このサイトの掲示板システムは CPU 負荷の点では圧倒的に有利であり、データの転送量に関しては4分の1が節約されていると考えられる。

もちろん、掲示板の様子によってどれだけ節約できるかは異なるだろう。例えば、リロードをしつこくする人のアクセスが多い掲示板では4分の1という節約量が大幅に上がることが予想される。

また、 CGI 経由のアクセスの結果はフォーム・データごとに異なるので、 HTML に直接アクセスする方式の採用による節約はさらに大きくなるだろう。例えば、

の二つを比べてみよう。後者では hoge0002.html のキャッシュが効くことによって記事を指定したアクセスはトラフィックをあまり増加させないことが予想される。それに対して、前者の方式では異なる記事の指定ごとにトラフィックが増加することになる。

以上の理由によって、少々の不便があったとしても、このサイトの掲示板システムのシンプルなやり方は負荷の高そうな掲示板においては十分にメリットがあると考えられる。

現在過去ログ・ファイルの大きさは 100KB に揃えている。その大きさが最適であるかどうかはよくわからない。しかし、頻繁にアクセスされる可能性のあるファイルの大きさに上限を設けておくことは流量を減らすためには有効であろう。

さらに流量を減らすためには、ファイルを gzip などで圧縮して転送するように設定しておくことも考えられる。大抵のテキスト・ファイルは gzip で圧縮すると数分の一の大きさに縮む。そのためには、 Apache + mod_gzip を用いてサーバー・レベルで圧縮を行なう方法と CGI で圧縮するという二つの方法がある。圧縮転送に対応した CGI はキャッシュが効くように適切に書かれなければいけない。

それでも不十分ならば帯域制御を行うことを検討するべきだろう (Apache + mod_bandwidth)。

mod_gzip と mod_bandwidth については UNIX Magazine 2001年6月号の「フリー・ソフトウェアの小径 (1)」を参照せよ。

まとめ: CPU およびネットの負荷軽減のためには以下が有効である:


CGI を叩きまくる迷惑な自動巡回ソフト

実はこのサイトの掲示板システムにおいてはこちらの問題はかなり頭の痛い問題である。なぜなら、各記事ごとにある reply, thread のリンク先がすべて CGI だからである。 CGI を叩きまくる迷惑な自動巡回ソフトはそれらのリンクをたどろうとするのだ。短時間で数千回も CGI にアクセスしてしまうようなものもある。

まだこのサイトの掲示板システムでは採用してないのだが、この問題を解決するためには CGI へのリンクを全てフォームに書き変えて、 GET method ではなく常に POST method で CGI にアクセスしてもらうようにすれば良いと思う。

そのような変更をサボるための対症療法として、 CGI へのアクセスを一部の user agent に限ることもそれなりに効果的なようである。 Apache の mod_rewrite でそれをやる方法に関しては「ロボット対策」の「mod_rewrite」の節を参照して欲しい。

まとめ: CGI を叩きまくる迷惑な自動巡回ソフト対策には以下が有効である:

補足:どうしても大量の CGI へのアクセスを許す必要がある場合には Apache + mod_perlApache + mod_fastcgi などの採用を検討した方が良い。その点に関して、浦栃裕による解説は非常に参考になる。