絨毯爆撃系ブラウザ
このところはてなブックマークへの過度なアクセスがよく見られます。User-Agent などを見ていても特殊な bot などのものではなく、その多くが Internet Explorer や Firefox などの一般のブラウザのそれを名乗っています。
中には、目立たないようにそういった User-Agent を敢えて名乗っているリクエストもありそうですが、どうもそれらの挙動を見てるに、巡回系のソフトウェアや先読み系のブラウザのような振る舞いが多そうです。ページ内に表示されたリンクを節操なくすべて辿るということで、僕は勝手に絨毯爆撃系ブラウザなんて呼んでますが。
del.icio.us開いたら片っ端から先読みし始めるし、既読のページにもかかわらず先読みするし節操が無い。読みもしないページを片っ端からダウンロードすることが有効活用と言えるのか?
この Fasterfox はその代表例で、時折すごい勢いでアクセスが来たりします。それこそ秒間に100リクエストとかそのぐらいで。(追記: Fasterfox は拡張子を見てるらしいので、偶然条件が重なってるときみたい。コメント欄参照。)
はてなダイアリーくらい大きなサービスだと後ろに控えるサーバーの台数もそれなりなので、ある程度のものには耐えられますがブックマークはまだそれほどでもないので、過剰なアクセスが来た場合には他のユーザーさんの利用に影響を与えてしまう場合もあります。あと、ブックマークはそのサービスの性格上、タグとか○○usersとか、自分自身へのリンクを多数含むのでどうしてもこの手のソフトウェアを使ったときに過剰なアクセスになりやすいということもあります。
いまもサーバーのアクセスログやステータスに目を光らせながら目視確認で対応してるわけですが。
そもそもこういう類のソフトウェアが裏でどういう実装になっているかはエンドユーザーが知る由もなく(知る術も与えられていないことの方がほとんどかも)、多くの責任は開発者が負っているということになります。利用するユーザーが、知らないうちにサーバーに負荷をかけているようなソフトウェアを作ってしまわないためにも、ある程度負荷分散やその周辺の技術については熟知していることが、ウェブプログラマに求められる責任なのかなあと思います。
その一方で、サーバーサイドでももっとインテリジェントな仕組みを導入したり、ある程度の突発的なアクセスに対しても動じないシステムを構築するなりといったことはわれわれサービス提供者側の責務であると思います。
ということで、先日から過剰アクセスを動的にコントロールする仕組みとかを調べてるのですが、いい解決策はまだ見つからず。ソーシャルブックマークのような動的かつフレッシュな情報が肝のサイトは単純なコンテンツキャッシュではデメリットが大きいため、それ以外の方法、たとえばTCPより上位のレイヤで単位時間の過剰アクセスを感知するシステムとかかなあと思っています。Apache2 の bw_mod をリバース proxy に入れて、というのをちょっと試したのですが、これは少し期待するものとは違う感じ。