負荷対策のためロボット向けページ表示時のDBアクセスを省略する
2008/05/06最近 サーバ負荷 がかなりマズイことになっています。
今度こそ間違いなく、回線負荷ではなくサーバのCPU負荷です。
Load Averageの値が昨年10月頃には 平均2.5 くらいだったものが、
現在では 5.0くらいまで膨らんで きています。既にレッドゾーンです。
皆さまにはご迷惑をお掛けして誠に申し訳ございません。
急いで対策を考えなければいけないのですが、その中で
以前から気になっていたことを1つ試してみることにしました。
それは検索エンジンの 巡回ロボットの負荷対策 です。
現在のあまともやコミックダッシュ!は、トップページや
ランキングのページなどは負荷対策のため最初から 静的HTMLのページ
になっています。しかし、そのほかのページ、たとえばシリーズ情報の
ページや、各ユーザの蔵書一覧のページなどは 全て動的生成 です。
これは何を意味するのかといいますと、アクセスしてくる人がたとえ
巡回ロボットであったとしても、純粋なユーザのアクセスと同じように
その場で ”DBから” 最新情報を引き出して
出力HTMLを一所懸命作り上げることになります。
これが少量のアクセスなら良いのですが、あまともやコミックダッシュ! のように
商品数やユーザ数によってページ数がどんどん増えていく
タイプのサービスだと、巡回ロボットのアクセスのほうが
一般のユーザのアクセスより格段に多くなります。
具体的には 約9割がこうした巡回ロボットのアクセスなのです。
そこでこんな仕組みを考えました。
巡回ロボットがアクセスに来たときに、そのページの内容を
丸々キャッシュとして ファイルに落としておき、次回ロボットが
同じページをクロールしてきたときには、10日以内であれば
キャッシュの内容をそのまま読み込んで返す、というものです。
CGIがUserAgentを判別して、巡回ロボットのときだけこうした動作をします。
一般のユーザ向けにはキャッシュは使わず、常に最新の情報が返ります。
CGI自体の起動は避けられませんが、毎回毎回ページ情報の構成のために
大量にDBにアクセスしていたぶん の負荷はこれで大幅に軽減されるはず、です。
ちなみにGooglebotは私のサイトのページを合計で 3万ページ/日 も拾っていきます。
平均して 2~3秒に1回 のペースが24時間休みなく続いているようなイメージです。
これらに それぞれ×数回以上のDBアクセス が伴っていると考えるとゾッとします。
今回作ったキャッシュは別々のロボットの間でも同じものを使いまわしますので、
Googlebot、Yahoo! Slurp、msnbotなど 多種多様なロボット が同じページに
アクセスしてきても、キャッシュの生成は全部あわせて10日に1度で済みます。
本来、UserAgentによって別の情報を返すことは対検索エンジンのマナーからいうと
良くないのですが、情報をフェイクしているワケでもありませんし、サーバ負荷が
危機的状況に陥っていることも鑑みると酌量の余地はあると思っています。
仕組みの性質上、最初のうちはキャッシュの 「生成」 の率が高く、
逆に負荷を上げてしまう可能性がありますが、時間が経つにつれて
キャッシュの 「流用」 の率が上がってくる見込みになります。
すでにこの試みを始めて3日目になりました。初日=3%、2日目=6%、3日目=12%
と順調にキャッシュ利用率が上がっているのが確認できています。
サーバ負荷にもほんの僅かながら改善の傾向が見られました。
このままキャッシュ利用率が5割を超えるくらいまで育ってくれることを願っています。
2008/05/06 [updated : 2008/05/06 23:59]

ブログ「デジモノに埋もれる日々」「アニメレーダー」「コミックダッシュ!」管理人。デジモノ、アニメ、ゲーム等の雑多な情報をツイートします。
@ckom をフォローする
![]() « はてなポイントによる「投げ銭」を延々と投げ続る意味と効果 | ![]() トップに戻る | ![]() SH903iのバッテリをドコモショップで交換 - 結果的に無償でした » |
▼ はてなブックマークのコメント ▼
関連記事
ピックアップタグ
- アニメ(429)
- GSR(300)
- ウマ娘(49)
- ライブ(75)
- イベント(196)
- コラボカフェ(34)
- 舞台挨拶(43)
- 先行上映会(19)
- トークショー(20)
- アニメ吐き出しメモ(10)
- バンドリ!(51)
- ガールズ&パンツァー(58)
- 少女☆歌劇レヴュースタァライト(58)
- ゾンビランドサガ(9)
- プリンセス・プリンシパル(17)
- スタリラ(31)
- コラム(170)
- ゲームプレイ日記(69)
- ワンフェス(12)
- コメンタリー上映(7)
- 岩浪美和(25)
- 大洗(9)
- 響け!ユーフォニアム(12)
- リズと青い鳥(9)
- RAISE A SUILEN(10)
- 艦これ(23)
- ストライクウィッチーズ(23)
- メイドインアビス(8)
- BLAME!(8)
- ヤマノススメ(7)
- ラブライブ!サンシャイン!!(11)
- HELLO WORLD(6)
- 宇宙よりも遠い場所(5)
- ヴァイオレット・エヴァーガーデン(8)
ブログ内検索
▼ コメント ▼
No.18867 投稿者 : きりけん 2008年5月11日 03:44
Linuxでcpu負荷がLoadAverageを押し上げる要因になることはほとんどありません。
大抵の場合、ボトルネックは別の理由だったりします。
メモリ不足で大量のswapアクセスが発生するとか(RDBMS+Apacheはご存知かとは思いますが、激しくメモリを消費します)ミドルウェアの設定チューニング不足とか(大抵の場合デフォルトではサーバリソースを占有しないように設計されていますが、組み合わせて使うとそれがかえって仇になることもあります)
メモリ増量やRDBMS設定パラメータの見直しでも効果があるかと。
UserAgentによって別の情報を返すのは最終手段ではないでしょうか?
No.21633 投稿者 : annkokunokizinn 2008年7月16日 10:25
ロボットのアクセスの数が自分のサイトブログ
のほうにはたくさん歩けどホムペのほうには逆にロボットが少ない状況
どうやらサーバーによってもホムペよりブログのほうが高待遇であるようだ
クロール対象が大規模になるサービスでは、ボット向けには人間よりキャッシュを多用した方がよいということ
クロール対象が大規模になるサービスでは、ボット向けには人間よりキャッシュを多用した方がよいということ
コメントしましょう